Zum Inhalt springen

Io (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. November 2005 um 20:20 Uhr durch 80.219.218.159 (Diskussion) (Beispielcode). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Io ist eine kompakte Prototypen-basierte, objektorientierte Programmiersprache. Der Erfinder und Hauptentwickler, der Amerikaner Steve Dekorte, legt bei der Entwicklung großen Wert auf Minimalismus, sowohl was die Codegröße als auch die Komplexität der Syntax und Speicherverbrauch angeht. Das spiegelt sich auch im Motto der Sprache Io - less is more wieder. In Io gilt stärker als in anderen Programmiersprachen: "Alles ist ein Objekt". Die Sprache wurde hauptsächlich von Smalltalk (alle Werte sind Objekte), Self, NewtonScript, Act1 (Prototypen-basierte Vererbung, Actors und Zugriff), LISP (Code zur Laufzeit betracht- und modifizierbar) und Lua (kompakt, einbettbar) inspiriert.

Interessant an Io ist vor allem der Prototyp-basierte Ansatz der OO, bei dem keine Klassen zum Einsatz kommen. Statt dessen wird einem Objekts ein weiteres Objekt als sogenannter Prototyp zugewiesen. Nicht existente Methoden oder Felder werden dann automatisch im Prototyp gesucht. Damit definiert sich ein Objekt durch die Eigenschaften seines Prototyps und seine spezifischen Unterschiede in Zustand und Verhalten dem Prototypen gegenüber. Diese Art der OO ähnelt der von JavaScript.

Eine weitere interessante Eigenschaft von Io ist der Verwendung so genannter Actors um Nebenläufigkeit zu erreichen. Ein Actor ist dabei gleichsam ein "lebendes" Objekt; es stellt einen leichtgewichtigen Thread dar, der asynchrone Methodenaufrufe in einer Queue speichert und dann einen nach dem anderen ausführt. Synchronisationsprobleme können damit elegant umgangen werden. Ein solche asynchroner Methodenaufruf liefert als Ergebnis eine transparente Future zurück. Diese Future blockiert Zugriffe, bis tatsächlich ein Wert vorliegt und wird dann das Ergebnis.

Io wird, wie andere Skriptsprachen auch, in einen AST übersetzt. Der Parser ist in C geschrieben, eine Io-version ist in Entwicklung (November 2005). Als Besonderheit besteht dieser AST besteht ausschließlich aus Message-Objekten: Jedes dieser Objekte repräsentiert einen der in OO-Sprachen üblichen Vorgänge des Sendens einer Message an einen Empfänger. Dieser Baum von Message-sends kann zur Laufzeit inspiziert und gegebenenfalls auch manipuliert werden. Das ermöglicht es LISP-artige Macros zu schreiben.

Der Message-Baum wird von einer einfachen VM interpretiert, die nur aus rund ~10k Zeilen ANSI C-Code besteht. Sie bietet inkrementelle automatische Speicherbereinigung (englisch garbage collector) mit Unterstützung schwacher Referenzen (weak references). Neben dieser Minimal-VM stehen mit AddOns für die wichtigsten Anwendungsgebiete erweiterte VMs bereit, darunter Regular Expressions, ein XML-Parser, Blowfish-Verschlüsselung, ein OpenGL-, ein PortAudio- und Freetype-Binding. Unterstützte Plattformen sind zur Zeit Mac OS X, Linux, die BSD-Systeme, IRIX, Windows, Symbian OS und L4.

Io steht unter der BSD-Lizenz.


Beispielcode

//C++ style comments can be used
#as can shell-style comments
/* and C-style comments */

"Hello world" print //hello world

for(i, 1, 10, i print) //prints numbers 1 through 10

x := Object clone //Smalltalk style object syntax; ':=' used for new slots
x = Map clone //when overwriting, '=' is used.
x prettyprint := method( //make a method with no arguments
    foreach(key, value, write(key, ": ", value, "\n")) //loop through map
)
x atPut("hi", 1) //put key-value pair into map
x atPut("hello", 2)
x prettyprint /* output:
hi: 1
hello: 2
*/