Hard und Software
Heute möchte ich mich diesen beiden elementaren Bestandteilen widmen. Die klassische Antwort auf die Frage: " Was ist der Unterschied zwischen Hard und Software " lautet: " Hardware ist das, was man Anfassen kann, Software alles, was man eben nicht anfassen kann" selbstverständlich beziehe ich mich hier auf die Bestandteile eines Computers.
Die Hardware sind dabei die mechanischen oder elektronischen Bauteile der Maschine. Momentan wird fieberhaft daran gearbeitet die Quote an mechanischen Bauteilen so weit wie möglich zu senken.
Dabei fällt mir ein, dass das endgültige Ziel der Computerentwicklung sein wird, auch auf elektronsiche Bauteile zu verzichten.
Wie? Nun das steht noch in den Sternen, aber die Technologie, die hierzu in der lage sein wird und deren auftreten das Antlitz der Welt verändern wird ist das Quantum Computing. Ich muss mir merken auch darüber unbedingt noch einmal einen Blogeintrag zu machen.
Nun aber zurück zur konventionellen Computertechnologie.
Also, die Hardware ist der Teil des Computers, der das tut, was Ergebnisse liefert. Die Software ist die notwendige Information dafür.
Auf wikipedia steht der Satz: " Software ist im Voraus geleistete geistige Arbeit ". Formidabel. Genau so habe ich das auch immer empfunden. Bei der Entwicklung von Software überlegt man sich die Arbeitsschritte, die zur Bewältigung einer Aufgabe notwendig sind im vorraus, und versucht dann auf möglichst effiziente Weise der Maschine, die diese Arbeit tun soll zu erklären wie.
Eine KI wie bei Star Trek, der man sagen kann, was man getan haben möchte ( "Computer bitte spring aus dem Fenster") wäre dabei ein großer Fortschritt in sachen Programmentwicklung. Allerdings wäre eine Künstliche Intelligenz, die diese Vorgänge beherrschte wohl in der Lage selbst die Notwendigkeit von Programmen zu erkennen und diese zu schreiben.
Hier haben wir also noch ein Thema: Künstliche Intelligenz ( das mag ich am liebsten!?)
Freitag, 29. April 2011
Dienstag, 26. April 2011
Assembler und Maschinensprache
Assembler und Maschinensprache
Teil 2
Gut. Um zu demonstrieren wie zäh die Abarbeitung von Maschinencode erscheint.
Hier ein Programm im Assembler von http://andremueller.gmxhome.de/intro.html#firstprog für den Befehlssatz des x86 Prozessors
Das Knobelvergnügen daran war ( oder ist ) die Ressourcen so Optimal wie Möglich zu nutzen und durch einen Programmkniff einen Zyklus zu sparen, oder 2 oder 10. Andererseits erkennt man auf diesem Wege auch Fehler und Probleme in der Archikektur der Prozessors und seiner Befehle.
Teil 2
Gut. Um zu demonstrieren wie zäh die Abarbeitung von Maschinencode erscheint.
Hier ein Programm im Assembler von http://andremueller.gmxhome.de/intro.html#firstprog für den Befehlssatz des x86 Prozessors
TITLE Das erste Programm ;Diese Zeile ist optional IDEAL ;IDEAL-Modus einschalten MODEL SMALL ;Speichermodell STACK 100 ;100 Bytes für den Stack DATASEG ;Beginn des Datensegments derText db 'Das erste Programm$' ;1. CODESEG ;Beginn des Codesegmentes start: ;2. STARTUPCODE mov ah, 009h ;3. mov dx, OFFSET derText ;4. int 21h ;5. EXITCODE END start ;6.
Nun noch die Erklärung der einzelnen Zeilen:
- Hier wird die Zeichenkette definiert, die ausgegeben werden soll
- Dies ist die Anfangsmarke für Code (s. auch weiter unten)
- In das Prozessorregister AH den Wert 9 schreiben
- Das Prozessorregister DX mit der Adresse des Ausgabestrings beschreiben
- Aufruf eines Interrupts;
- Die Endmarkierung für die Assemblierung; alles, was jetzt noch kommt, wird vom Assemblierer ignoriert
Das Knobelvergnügen daran war ( oder ist ) die Ressourcen so Optimal wie Möglich zu nutzen und durch einen Programmkniff einen Zyklus zu sparen, oder 2 oder 10. Andererseits erkennt man auf diesem Wege auch Fehler und Probleme in der Archikektur der Prozessors und seiner Befehle.
Assembler und Maschinensprache
Assembler und Maschinensprache
Teil 1
Heute möchte ich mich mit dem beschäftigen, was sich die unbedarften von 30 bis 40 Jahren unter einem Computer, beziehungsweise der Arbeit damit vorgestellt haben. Assemblercode hat das erste Klischee der Computernerds geprägt. Hinter ihren grünen Bildschirmen Sitzend und kryptischen unverständlichen Kram lesend.
Ich gebe zu, Assemblercode ist eine beleidigung für das Auge. Er ist dröge, schwer zu lesen und sogar wenn man sich ein wenig damit auskennt - ein einfacher wechsel des Befehlssatzes und schon ist man wieder vollkommen unbedarft.
Ein Assembler ist ein "Hilfsprogramm das in Maschinennaher Sprache geschrieben wurde" . Nun fragt sich, wie dieses Programm geschrieben wurde, da es selbst eben diesem Zweck dient. Es ist ein wenig wie mit dem Huhn und dem Ei.
Alle heutzutage eher populären Vorstellungen des Programmierens mit Verzweigungen und Schleifen, mit Feldern etc. haben Ihren Ursprung in kompliziert einfachen Vorgängen, die sich sehr kluge Menschen vor langer zeit einmal ausgedacht haben, damit die Maschinen, die sie entwickelten das taten, was sie wollten. Durch die von Neumann - Architektur und der Verwendung einer Zentralen Recheneinheit, sovie Abarbeitungsroutinen bei Speicher - Lese und Schreibzugriffen kristallisierten sich über die Zeit hinweg gewisse Routinen heraus. Diese Routinen verwenden Mikroprozessoren heute, um ihre Opreationen anzustellen.
Jeder einzelne Assemblerbefehl tut nur unheimlich wenig, wie man hier sehen kann. Die Möglichkeiten daraus faszinierende Anwendungen zu bauen kommt erst durch die oft erwähnte unglaubliche Gewschwindigkeit, mit der Sie ausgeführt werden.
Teil 1
Heute möchte ich mich mit dem beschäftigen, was sich die unbedarften von 30 bis 40 Jahren unter einem Computer, beziehungsweise der Arbeit damit vorgestellt haben. Assemblercode hat das erste Klischee der Computernerds geprägt. Hinter ihren grünen Bildschirmen Sitzend und kryptischen unverständlichen Kram lesend.
Ich gebe zu, Assemblercode ist eine beleidigung für das Auge. Er ist dröge, schwer zu lesen und sogar wenn man sich ein wenig damit auskennt - ein einfacher wechsel des Befehlssatzes und schon ist man wieder vollkommen unbedarft.
Ein Assembler ist ein "Hilfsprogramm das in Maschinennaher Sprache geschrieben wurde" . Nun fragt sich, wie dieses Programm geschrieben wurde, da es selbst eben diesem Zweck dient. Es ist ein wenig wie mit dem Huhn und dem Ei.
Alle heutzutage eher populären Vorstellungen des Programmierens mit Verzweigungen und Schleifen, mit Feldern etc. haben Ihren Ursprung in kompliziert einfachen Vorgängen, die sich sehr kluge Menschen vor langer zeit einmal ausgedacht haben, damit die Maschinen, die sie entwickelten das taten, was sie wollten. Durch die von Neumann - Architektur und der Verwendung einer Zentralen Recheneinheit, sovie Abarbeitungsroutinen bei Speicher - Lese und Schreibzugriffen kristallisierten sich über die Zeit hinweg gewisse Routinen heraus. Diese Routinen verwenden Mikroprozessoren heute, um ihre Opreationen anzustellen.
Jeder einzelne Assemblerbefehl tut nur unheimlich wenig, wie man hier sehen kann. Die Möglichkeiten daraus faszinierende Anwendungen zu bauen kommt erst durch die oft erwähnte unglaubliche Gewschwindigkeit, mit der Sie ausgeführt werden.
Donnerstag, 21. April 2011
Blogplan Teil 9
Esoterische Programmiersprachen Teil 3
ein paar Vertreter sind hier noch aufgelistet.
"Ook" ist wohl ein Vertreter der Vorgeschichtlichen Kommunikation? Laut Wikipedia eine Programmiersprache für Orang Uthans. Es existieren nur die drei Syntaxelemente Ook. Ook? und Ook!
Das Programm, dass damit Hello World auf dem Bildschirm ausgibt sieht dann so aus:
Wirklich nicht von schlechten eltern.
"Piet ist noch ein weiterer Vertreter der zweidimensionalen esoterischen Programmiersprachen. Die Programme sehen aus wie Bilder des niederländischen Males Piet Mondrian.
Der Programmcode muss als .gif - Datei vorliegen und wurde wie die Sprache Chef von David Morgan-Mar (engl.) erfunden.
Absolut erwähnenswert ist auch die Sprache Shakespeare deren Code wie ein Text des berühmten Autors assieht.
Hier die Variablendeklaration:
ein paar Vertreter sind hier noch aufgelistet.
"Ook" ist wohl ein Vertreter der Vorgeschichtlichen Kommunikation? Laut Wikipedia eine Programmiersprache für Orang Uthans. Es existieren nur die drei Syntaxelemente Ook. Ook? und Ook!
Das Programm, dass damit Hello World auf dem Bildschirm ausgibt sieht dann so aus:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.Wirklich nicht von schlechten eltern.
"Piet ist noch ein weiterer Vertreter der zweidimensionalen esoterischen Programmiersprachen. Die Programme sehen aus wie Bilder des niederländischen Males Piet Mondrian.
-Programm der Sprache Piet
Absolut erwähnenswert ist auch die Sprache Shakespeare deren Code wie ein Text des berühmten Autors assieht.
Hier die Variablendeklaration:
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.
Dies genügt wohl, den restlichen Codestil kann man sich wohl nun denken. Der Programmierteil greift eben auf die Interaktion zwischen den Charaktären zurück. Auch Regieanweisungen sind Teil des Codes.
Blogplan Teil 8
Weitere Esoterische Programmiersprachen
Da mir die Recherche im letzten Eintrag gefallen hat werde ich noch weitere Vertreter esoterischer Programmiersprachen vorstellen. Mal schauen ob begeisterungsfähiges dabei ist.
Hier haben wir was feines. Die von David Morgan-Mar entwickelte Programmiersprache Chef, die sich wie ein Kochrezept ließt. Hier ein Codebeispiel für ein "Hallo Welt Gericht" :
Klingt doch lecker, oder?
Die Angeblich am schwersten zu benutzende Programmiersprache ist Malbolge, die gerade zu diesem Zweck entwickelt wurde. der Code ist ein einziges Desaster:
es verwendet den ASCII-Wert eines Zeichens und wendet den Modulo von 94 darauf an. Erst anschließend wird das ganze ein Kommando. Um die Schwierigkeit noch zu steigern, wird danach ein Zähler erhöht, welcher auf zukünftige Werte addiert wird.
Wer hat denn die Zeit um sich mit soetwas zu befassen??
Da mir die Recherche im letzten Eintrag gefallen hat werde ich noch weitere Vertreter esoterischer Programmiersprachen vorstellen. Mal schauen ob begeisterungsfähiges dabei ist.
Hier haben wir was feines. Die von David Morgan-Mar entwickelte Programmiersprache Chef, die sich wie ein Kochrezept ließt. Hier ein Codebeispiel für ein "Hallo Welt Gericht" :
Hallo-Welt-Soufflee Ingredients. 72 g haricot beans 101 eggs 108 g lard 111 cups oil 32 zucchinis 119 ml water 114 g red salmon 100 g dijon mustard 33 potatoes Method. Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Serves 1.
Klingt doch lecker, oder?
Die Angeblich am schwersten zu benutzende Programmiersprache ist Malbolge, die gerade zu diesem Zweck entwickelt wurde. der Code ist ein einziges Desaster:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Übertrumpft wird dieser Umstand nur noch von der Beschreibung:es verwendet den ASCII-Wert eines Zeichens und wendet den Modulo von 94 darauf an. Erst anschließend wird das ganze ein Kommando. Um die Schwierigkeit noch zu steigern, wird danach ein Zähler erhöht, welcher auf zukünftige Werte addiert wird.
Wer hat denn die Zeit um sich mit soetwas zu befassen??
Blogplan Teil 7
Programmiersprachen und Vertreter verschiedener Konzepte
Esoterische Programmiersprachen
Ich erkläre das Thema der Geschichte der Programmiersprachen hiermit als beendet. Als nächstes möchte ich mich um ein bischen Unterhaltung kümmern und gehe auf die etwas merkwürdigeren Vertreter aus der Gattung der Programmiersprachen ein.
Hierhin fallen auch alle sogenannten "Esotherischen Programmiersprachen", welche laut Wikipedia zur Umsetzung ungewöhnlicher Sprachkonzepte da sind. Als einen Vertreter aus diesen Reihen möchte ich das nicht zu unrecht so genannte *Entschuldigung* "Brainfuck", nennen, auch Brainf*ck, Brainf*** oder BF genannt.
Laut Wikipedia dient Brainf*** unter anderem um Grundlagen der Computertechnik zu lernen.
Hier ein Codebeispiel:
Die Kommentare machen deutlich, dass es sich um eine Sprache handelt die stark an Assembler erinnert. Brainfuck besitzt lediglich acht Befehle, mit denen sich alle prozeduralen Funktionen ausführen lassen:
Der Entstehende Code ist aufgrund der wenigen Verwendeten Symbole und der kaum vorhandenen Struktur sehr schwer zu lesen, was der Sprache wohl zu Ihrem Namen verholfen hat.
Esoterische Programmiersprachen
Ich erkläre das Thema der Geschichte der Programmiersprachen hiermit als beendet. Als nächstes möchte ich mich um ein bischen Unterhaltung kümmern und gehe auf die etwas merkwürdigeren Vertreter aus der Gattung der Programmiersprachen ein.
Hierhin fallen auch alle sogenannten "Esotherischen Programmiersprachen", welche laut Wikipedia zur Umsetzung ungewöhnlicher Sprachkonzepte da sind. Als einen Vertreter aus diesen Reihen möchte ich das nicht zu unrecht so genannte *Entschuldigung* "Brainfuck", nennen, auch Brainf*ck, Brainf*** oder BF genannt.
Laut Wikipedia dient Brainf*** unter anderem um Grundlagen der Computertechnik zu lernen.
Hier ein Codebeispiel:
++++++++++ [ >+++++++>++++++++++>+++>+<<<<- ] Schleife zur Vorbereitung der
Textausgabe >++. Ausgabe von 'H' >+. Ausgabe von 'e' +++++++. 'l' . 'l' +++. 'o' >++. Leerzeichen <<+++++++++++++++. 'W' >. 'o' +++. 'r' ------. 'l' --------. 'd' >+. '!' >. Zeilenvorschub +++. Wagenrücklauf
Die Kommentare machen deutlich, dass es sich um eine Sprache handelt die stark an Assembler erinnert. Brainfuck besitzt lediglich acht Befehle, mit denen sich alle prozeduralen Funktionen ausführen lassen:
| Zeichen | C-Äquivalent | Semantik |
|---|---|---|
> | ++ptr; | inkrementiert den Zeiger |
< | --ptr; | dekrementiert den Zeiger |
+ | ++*ptr; | inkrementiert den aktuellen Zellenwert |
- | --*ptr; | dekrementiert den aktuellen Zellenwert |
. | putchar(*ptr); | Gibt den aktuellen Zellenwert als ASCII-Zeichen auf der Standardausgabe aus |
, | *ptr = getchar(); | Liest ein Zeichen von der Standardeingabe und speichert dessen ASCII-Wert in der aktuellen Zelle |
[ | while (*ptr) { | Springt nach vorne, hinter den passenden ]-Befehl, wenn der aktuelle Zellenwert null ist |
] | } | Springt zurück, hinter den passenden [-Befehl, wenn der aktuelle Zellenwert verschieden von null ist |
Der Entstehende Code ist aufgrund der wenigen Verwendeten Symbole und der kaum vorhandenen Struktur sehr schwer zu lesen, was der Sprache wohl zu Ihrem Namen verholfen hat.
Dienstag, 19. April 2011
Blogplan 19-04-2011
Programmiersprachen und Vertreter verschiedener Konzepte
Teil 6
Heute geht die Reise durch die Geschichte der Entwicklung der Programmierspachen, oder besser der Evolution der Programmiersprachen weiter. In der 80er Jahren wurden die ersten Objektorientieren Programmiersprachen beliebt und begannen sich allmählich durchzusetzen. Darunter das immer noch vielverwendete C++, aber auch jüngere Vertreter. Leider konnte ich keine Geschichte der Objektorientierten Programmiersprachen finden. Ich gehe aber davon aus, das Smalltalk, welches dem Objektorientierten Programmierparadigma entschieden folgt eine der Ältesten, wenn nicht die älteste Objektorientierte Programmiersprache ist.
Hierbai entstanden neue Konzepte und Begriffe, zum Besipiel Abstraktion der Klasse oder der Prototyps. Wobei ich mir nicht genau darüber im klaren bin, was der unterschied zwischen klassen und Prototypen sind. Beim Anlegen von Klassen bei der objektorientierten Programmierung werden Methoden und Parameter festgelegt. So bekommt eine bestimmte Klasse bestimmte Eigenschaften und ist somit ein bestimmtes Objekt, das durch seine Eigenschaften und seinen Namen eindeutig bestimmt ist. Beim Prototyping werden neue Prototypen aus bereits vorhandenen Prototypen erzeugt. Der einzige mir Bekannte vertreter ist Java Script, eventuell nch das von Flash verwendete Actionscript. Ein Objekt aus einer Sprache die Klassen verwendet ist immer in erster linie ein Objekt. Beim Prototyping wird dabei vermutlich durch die ganze Hierarchie der Verwendeten Prototypen heruntergebrochen?
Hiermit und mit anderem werde ich mich in Teil 6 beschäftigen.
Teil 6
Heute geht die Reise durch die Geschichte der Entwicklung der Programmierspachen, oder besser der Evolution der Programmiersprachen weiter. In der 80er Jahren wurden die ersten Objektorientieren Programmiersprachen beliebt und begannen sich allmählich durchzusetzen. Darunter das immer noch vielverwendete C++, aber auch jüngere Vertreter. Leider konnte ich keine Geschichte der Objektorientierten Programmiersprachen finden. Ich gehe aber davon aus, das Smalltalk, welches dem Objektorientierten Programmierparadigma entschieden folgt eine der Ältesten, wenn nicht die älteste Objektorientierte Programmiersprache ist.
Hierbai entstanden neue Konzepte und Begriffe, zum Besipiel Abstraktion der Klasse oder der Prototyps. Wobei ich mir nicht genau darüber im klaren bin, was der unterschied zwischen klassen und Prototypen sind. Beim Anlegen von Klassen bei der objektorientierten Programmierung werden Methoden und Parameter festgelegt. So bekommt eine bestimmte Klasse bestimmte Eigenschaften und ist somit ein bestimmtes Objekt, das durch seine Eigenschaften und seinen Namen eindeutig bestimmt ist. Beim Prototyping werden neue Prototypen aus bereits vorhandenen Prototypen erzeugt. Der einzige mir Bekannte vertreter ist Java Script, eventuell nch das von Flash verwendete Actionscript. Ein Objekt aus einer Sprache die Klassen verwendet ist immer in erster linie ein Objekt. Beim Prototyping wird dabei vermutlich durch die ganze Hierarchie der Verwendeten Prototypen heruntergebrochen?
Hiermit und mit anderem werde ich mich in Teil 6 beschäftigen.
Abonnieren
Posts (Atom)
