Die Programmiersprache Ruby

Blog| Forum| Wiki  

Inhaltsverzeichnis

Relevanz

Smalltalk-Anwendungen existierten bis vor kurzem in nahezu jedem Großunternehmen (Banken, Versicherungen, Automobilbranche, etc.). Dann kam Java und IBM zog sich langsam aus der Smalltalk-Entwicklung zurück. Um die Parcplace-Aktie stand es schlecht, das UR-Smalltalk VisualWorks wechselte daraufhin in kurzer Zeit zweimal den Besitzer.

Mit der Übernahme von VisualWorks durch Cincom hat sich die Lage stabilisiert. Zumindest die Wartung von Legacy-Anwendungen darf als gesichert angesehen werden. Trotzdem hört man immer wieder von Portierungsversuchen, wobei als Zielplattform meist Java genannt wird.

Dialekte

Hinter Smalltalk steht kein einzelner Mastermind wie bei Ruby. Das gilt allenfalls für GNU Smalltalk, was jedoch als reine Skripting-Variante von Smalltalk nie marktwirtschaftliche Relevanz hatte. Wie vielfältig die Smalltalk-Landschaft ist, kann auf dem Smalltalk Versionen Wiki der German Smalltalk Users Group9 nachgelesen werden.

Diese Dialekt-Vielfalt erschwert Sprach-Vergleiche. Es gibt zwar einen Smalltalk-Standard, aber der stellt eher soetwas wie den kleinsten gemeinsamen Nenner dar. Im Allgemeinen bezieht man sich daher eher auf die beiden am weitesten verbreiteten Dialekte: Das IBM-Smalltalk VisualAge und das Cincom-Smalltalk VisualWorks. Zwar hat auch das nichtkommerzielle Squeak-Smalltalk einen vergleichbaren Bekanntheitsgrad, es spielt aber im Business-Bereich keine Rolle.

Laufzeitumgebung

VisualWorks gilt mit seinem Just-In-Time-Compiler mit Compiled-Code-Cache und inkrementeller Garbage-Collection als das schnellste Smalltalk im Markt. Ob hier die aus Java bekannte Hot-Spot-Technologie zum Einsatz kommt, ist nicht allgemein bekannt (vermutlich nicht). Es lassen sich dynamische Bibliotheken einbinden, aber externe Bibliotheken sind im Smalltalk-Bereich eher die Ausnahme. Demgegenüber ist die Verwendung von C-Bibliotheken in Ruby wesentlich häufiger zu beobachten.

Rubinius ist ein Ruby-Interpreter, der angeblich nahe an der Smalltalk-80-VM implementiert ist: http://code.fallingsnow.net/forums/4/topics/12.

Entwicklungsumgebungen

Smalltalk-Anwendungen sind in der Regel sehr groß. Die Entwicklungsumgebung basiert dabei auf dem einzigartigen Image-Prinzip: Die Entwicklungsumgebung speichert nicht nur Sourcecode sondern auch Laufzeit-Objekte. Da in Smalltalk sogar Prozesse und Ausführungskontexte als Smalltalk-Objekte behandelt werden, kann man z. B. eine am Vortag begonnene Debug-Session fortsetzen. Das wäre etwa so, als wenn man in Ruby eine IRB-Sesson abspeichert, diese aber ein komplettes FreeRide enthält.

Der Build-Prozess besteht im Prinzip aus vier Schritten:

  • Laden des Produktivcodes
  • Entfernen der Entwicklungsumgebung
  • Starten von Lightwight-Anwendungsprozessen
  • Abspeichern der Laufzeit-Objekte

Das Image-Prinzip hat einige Implikationen, die das eigentliche Alleinstellungsmerkmal von Smalltalk bilden. Insofern ist die Aussage, Ruby und Smalltalk hätten viel gemein, nur eingeschränkt haltbar. Richtig ist, dass man sich als Smalltalker sehr leicht in Ruby zurechtfindet, weil man dort auf viele bekannte Sprach-Konzepte trifft.

Das ursprünglich von OTI vertriebene Teamentwicklungswerkzeug Envy (Basis von VisualAge) wird von IBM nicht mehr weiterentwickelt. OTI wird heute eher mit Eclipse denn mit Envy assoziiert. Wer VisualWorks einsetzt, steigt früher oder später auf StORE um, ein Werkzeug, das trotz einiger Parllelen zu Envy noch viel in der Kritik steht. Arbeit mit CVS oder Subversion ist eher unüblich aber möglich, wie etwa SmalltalkX zeigt.

Syntax

Von der eigentlichen Smalltalk-Syntax zu unterscheiden ist das, was einem eine Smalltalk-IDE an syntaktischen Elementen zeigt. Smalltalk-Code kann zwar in Text-Dateien ausgelagert, und dort bearbeitet werden, das ist jedoch unüblich. Da eine IDE den Code bereits in Klassendefinitionen Methodendefinitionen usw. aufteilt, entfällt z. B. die Eingabe von Trennzeichen zwischen solchen Konstrukten völlig.

Eine Methodensignatur sieht in Smalltalk anders aus als in Ruby: Es gibt keine geklammerte Argumentliste. Die Argumente werden benannt und in die Signatur eingebettet:

do: elementBlock separatedBy: separateBlock


Mehrere Message-Sends an das gleiche Ojekt können als Kaskade notiert werden:


1
2
3
4
^OrderedCollection new
    add: 'Ich bin die Antwort auf die Frage nach dem Leben, dem Universum und allem:';
    add: 42;
    yourself


Code wird von links nach rechts geparst, so dass man gelegentlich klammern muss:

(1 to: 10) do: [ :i | Transcript cr; show: i displayString ]


ist etwas anderes als:

1 to: 10 do: [ :i | Transcript cr; show: i displayString ]


Im ersten Fall wird do: an das per to: erzeugte Intervall gesendet. Im zweiten Fall wird to:do: an die 1 gesendet. Da Operatoren wie Methoden mit einem Parameter behandelt werden, kennt Smalltalk keine Punkt- vor Strichrechnung!

Gemeinsamkeiten