Seiten

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:


Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! 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

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:


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" :

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:


++++++++++
 [
  >+++++++>++++++++++>+++>+<<<<-
 ]                       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.

Montag, 18. April 2011

Blogplan 18-04-2011

Programmiersprachen und Vertreter verschiedener Konzepte

Teil5 

jetzt geht es in die 80er Jahre. Hier wird die Sache schon sehr unübersichtlich. Die verschidensten Sprachen aufgebaut auf den unterschiedlichsten KOnzepten rangen miteinander um die Vorherrschaft. Da meine Kenntnisse üner diesen Zeitraum sehr begrenzt sind werde ich mich wieder an dem entsprechenden WikipediaArtikel orientieren und eigenes Wissen und ideen einfliessen lassen.

Zu beginn der 80er Jahre existierten über 450 Programmiersprachen, die in Projekten des Verteidgungsministeriums in verwendung waren. Alle nicht standardisiert und vom Anbieter abhängig. Hierbei gilt zu bedenken, dass die Zahl der Anbieter noch nicht von einem Monopolisten, der sich durchgesetzt hatte gedrückt wurde ( beispiel Microsoft ) und es auch noch  eine Fülle von Anbietern von Heimcomputuern gab: 
Commodore VC20, C64, Sinclair ZX80/81, Sinclair ZX Spectrum, Schneider/Amstrad CPC 464/664, Atari XL/XE-Reihe,(Texas Instruments TI-99/4A, Amiga, Atari ST. Jeder dieser Anbieter benutzte ein eigenes Betriebssystem und unterstütze eigene Programmiersprachen, die mehr oder weniger gut an das System angepasst waren. Diese Computer waren auch in Büros in Benutzung und es gab somit mindestens ebensoviele Bürostandarts.  Um dies zu vereinheitlichen wurde eine neue Sprache Ada benannt nach der Mathematikerin Ada Lovelace, die als eine der ersten Programme für die Analytical enging von Charles Babbage entworfen hat.

Der nächste große Entwicklungsschritt war die entwicklung objektorientierter Programmiersprachen, welche das entwickeln von Programmen stark verbessern sollten.

darau beziehe ichmich dann in

Teil 6

Freitag, 15. April 2011

Blogplan 15-04-2011

Programmiersprachen und Vertreter verschiedener Konzepte

Teil 4


Nachdem nun die ersten höheren Programmiersprachen das Licht der Welt erblickt haben folgte der erste Kompiler, entwickelt von Grace Hopper. Dieser war eine Ansammlung von von ihr auf ein Band geschriebener Funktionen, welche über einen Index adressiert waren. Die Bezeichnung lautete A-0. Eine weitere bekannte Sprache, die zu dieser Zeit entstanden war Algol ( 60 ) die ebenfalls, wie Fortran in erster Linie für Wissenschaftliche Zwecke entwickelt wurde. Desweiteren gab es Fortschritte in der Theorie durch die Einführung der Backus-Naur Form zur Beschreibung des Syntax einer Programmiersprache ( Typ 2 Grammatik der Chomsky Hierarchie ).

In den 60er Jahren wurden weitere Fortschritte gemacht. Ursache dafür war nicht zu letzt die Erfindung des Transistors, der die sperrigen Röhren ablöste und wesentlich effizienter mit Energie umging. Aus dieser Zeit stammen auch die ersten Betriebssysteme. Das Bekanteste war das von IBM für sein System 360 entwickelte OS/360.

Nach der Erfindung der Mikroprogrammierung welche von einem fest integrierten Befehlssatz der Elektronik ausgeht wurden auch Compiler verstärkt eingesetzt um die Programmierung auf bestimmten Systemen in den entsprechenden Sprachen zu erleichtern.

Gegen Ende der 1970er Jahre wurde auch das beliebte BASIC entwickelt. Das Akronym B.A.S.I.C. steht übrigens für "Beginner’s All-purpose Symbolic Instruction Code".

Donnerstag, 14. April 2011

Blogplan 14-04-2011

Programmiersprachen und Vertreter verschiedener Konzepte

Teil 3

Nachdem nun die erste universelle Programmiersprache das Licht der Welt erblickt hatte ( leider konnte ich keine Entwicklungsumgebung finden, ausserdem dient es noch der Aufwandswabschätzung bei Funktionen ) fehlte es noch an der notwendigen Hardware welche in der Lage war die Programme, die sich die Mathematiker wie Alan Turing ausgedacht hatten tatsächlich automatisch umzusetzen. 
Einer der ersten Computer, der dazu in der Lage war, war der von dem Bauingenieur Konrad Zuse entwickelte Z1, welcher mit Telefonrelais arbeitete. Später folgte dann als Meilenstein der bekannte ENIAC, welcher durch den Einsatz der Röhrentechnologie, welche wie Transistoren eingesetzt wurden und eine imense Menge an Energie verbrauchten, schon bedeutend schneller arbeitete.


Zu dieser Zeit wurden auch die ersten höheren Programmiersprachen entwickelt. Eine davon war die bis heute gebräuchliche FORTRAN, welche von Naturwissenschaftlern eingesetzt wird und die Sprache LISP, der ich später auch noch einen Blogeintrag widmen möchte.

Hier eine Methodendeklaration aus FORTRAN (Quelle:Wikipedia)

SUBROUTINE test( Argument1, Argument2, Argument3 )
   REAL,              INTENT(IN) :: Argument1
   CHARACTER(LEN= *), INTENT(IN) :: Argument2
   INTEGER,           INTENT(IN), OPTIONAL :: Argument3
   ! Hier was sinnvolles.
END SUBROUTINE
Hier werden einige Datentypen, die die Sprache verwendet mit den an die Methode ( oder Funktion ) übergebenen Werten belegt.