Io (Programmiersprache)
Io ist eine kompakte Prototypen-basierte Programmiersprache. Sie 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.
Io wird, wie andere Skriptsprachen auch, in einen AST übersetzt, der dann von einer VM interpretiert wird. Der Erfinder und Hauptentwickler, der Amerikaner Steve Dekorte, legt bei der Entwicklung großen Wert auf Minimalismus, was sich auch im Motto der Sprache io - less is more widerspiegelt. Unterstützte Plattformen sind zur Zeit Mac OS X, Linux, die BSD-Systeme, IRIX, Windows, Symbian OS und L4.
Interessant an Io ist vor allem der Prototyp-basierte Ansatz der OO, bei dem keine Klassen zum Einsatz kommen, sondern Eigenschaften eines Objekts von einem oder mehreren anderen Objekten, den Prototypen übernommen werden, solange der Programmierer sie nicht explizit überschreibt. Diese Art der OO wird sonst eher selten eingesetzt, die bekannteste Sprache die derartiges unterstützt ist wohl JavaScript.
Eine weitere interessante Eigenschaft von Io ist der Verwendung so genannter Actors um Nebenläufigkeit zu erreichen. Diese Technik wird bisher nur von wenigen Programmiersprachen benutzt, bietet aber gegenüber klassischen Threads einige Vorteile. Jedes Objekt stellt hierbei selbst einen leichtgewichtigen Thread dar, der asynchrone Methodenaufrufe in einer Queue speichert und einen nach dem Anderen ausführt. Dadurch können Synchronisationsprobleme elegant umgangen werden.
Neben der extrem kleinen Basissprache existieren AddOns für die wichtigsten Anwendungsgebiete. Vorhanden sind unter anderem Regular Expressions, ein XML-Parser, Blowfish-Verschlüsselung, ein OpenGL-, ein PortAudio- und Freetype-Binding.
Merkmale von Io:
- Quelloffen BSD-Lizenz
- pure Objektorientierung
- kompakte Virtuelle Maschine (~10k Zeilen)
- geringer Speicherbedarf (abhängig vom Betriebssystem zwischen 64kB-200kB)
- schnell (vergleichbar mit Python, Perl oder Ruby)
- inkrementelle automatische Speicherbereinigung (englisch garbage collector) mit Unterstützung schwacher Referenzen (weak references)
- differenzielles Prototyp-basiertes Objekt-Model
- Exceptions
- Implemetierung in ANSI C
- Einbettbar als Scriptsprache in Applikationen
- multi-state (Mehrere unabhängige VMs können in der selben Anwendung laufen)
- Actor-basierender Zugriff durch den Gebrauch von Coroutinen (Light-weight Threads)
- 64 bit fähig