EntstehungRuby ist eine komplett objektorientierte, höhere Programmiersprache und wurde (und wird) von Yukihiro "Matz" Matsumoto entwickelt. Ruby entstand 1993 (zu dem Zeitpunkt noch ohne Code!) aus Unzufriedenheit Matz' über andere Programmiersprachen. Python war ihm nicht objektorientiert genug, C zu statisch, Perl nicht mächtig genug. Also vereinte er die seiner Meinung nach besten Eigenschaften aller ihm bekannten Programmiersprachen (sein Liebling war zu diesem Zeitpunkt angeblich Smalltalk) und schuf die nach dem kostbaren Edelstein und als Anspielung auf Perl benannte Sprache Ruby. Aus diesem Grund liegt Ruby eine wohl einzigartige Interpretation des "Prinzips der geringsten Überrschung" zugrunde, Matz selbst sagt dazu: "Das Prinzip der geringsten Überrschung ist das Prinzip meiner geringsten Überraschung. Und das Prinzip der geringsten Überraschung, nachdem du Ruby gut gelernt hast." Für weitere Prinzipien, siehe Rubys Prinzipien. Die offizielle Website von Ruby ist ruby-lang.org. Wer sich für das allerneueste interessiert und des Japanischen mächtig ist, kann sich Matz' Blog ansehen. Eine Liste der Webseiten rund um Ruby gibt es hier. Die Sprache selbstHinweis: Hierbei handelt es sich um eine Übersetzung der Rubrik Features aus Rubys Manpage. ...ist interpretiertRuby ist eine interpretierte Sprache, d.h. du musst deine Programe nicht ständig neu kompilieren, um sie auszuführen.
...besitzt Variablen ohne Typen (dynamische Typisierung)Variablen können in Ruby Daten jeglichen Typs enthalten, du musst dir demnach keine Sorgen über Variablentypen machen. Die Konsequenz daraus ist aber, dass Ruby schwächere Compile-Time-Prüfungen hat.
...benötigt keine DeklarationenDu kannst Variablen ohne Deklaration verwenden. Die Namen jeder Variable enhalten bereits die Information, ob sie lokal, global, instanzbezogen, etc. ist.
...hat eine einfache SyntaxRubys menschenlesbare Syntax wurde leicht von Eiffel beeinflusst.
...braucht keine manuelle SpeicherverwaltungRuby besitzt ein automatisches Speichermanagement. Objekte, die keine Referenzen mehr besitzen, werden automatisch vom eingebauten Garbage Collector eingesammelt.
...ist vollständig objektorientiertRuby ist eine vollständig objektorientierte Sprache und war es seit ihrer Erschaffung. Selbst grundlegende Dinge wie Zahlen werden als Objekte behandelt.
...kennt Klassen, Vererbung und MethodenSelbstverständlich hat Ruby als objektorientierte Sprache solch grundlegende Features wie Klassen, Vererbung und Methoden.
...kann mit Singletonmethoden umgehenIn Ruby gibt es die Möglichkeit, Methoden für einzelne Objekte zu definieren. Zum Beispiel kannst du eine Button-Klick-Aktion für ein spezielles Widget mithilfe einer Singleton-Methode definieren, oder du könntest dein eigenes, prototypen-basiertes Objektsystem über Singleton-Methoden realisieren (wenn du das tatsächlich wolltest).
...hat Mix-InsRuby besitzt absichtlicherweise keine Mehrfachvererbung, was nicht selten Anlass zu Verwirrung gibt. Stattdessen kannst du in Ruby aber Implementations quer über den Vererbungsbaum verteilen; dies nennt man oftmals "Mix-In".
...hat IteratorenRuby besitzt Iteratoren, die Schleifen abstrahieren.
...hat ClosuresIn Ruby kannst du Prozeduren objektorientiert machen.
...hat keine Probleme mit Textverarbeitung und Regulären AusdrückenRuby hat eine Menge Features zur Textverarbeitung wie etwa Perl.
...kann M17N und ist zeichensatzunabhängigRuby unterstützt multilinguale Programmierung. Es ist leicht, verschiedensprachige und in unterschiedlichen Zeichenkodierungen abgefasste Texte zu bearbeiten, ohne dabei jedoch von Unicode abhängig zu sein.
...hat BignumsMit den eingebauten Bignums kannst du z.B. factorial(400) berechnen.
...ermöglicht Reflexion und Domain Specific LanguagesClass ist auch eine Instanz der Klasse Class. Die Definition von Klassen und Methoden ist nur ein Ausdruck wie es auch 1 + 1 ist, sodass deine Programme sogar weitere Programme schreiben und sich selbst ändern können. Das bedeutet, dass du deine Anwendung in deiner eigenen, auf Ruby basierenden Programmiersprache schreiben kannst.
...kennt objektorientierte AusnahmenbehandlungWie in Java(tm).
...hat direkten Zugriff auf das BetriebssystemRuby kann die meisten Unix-Systembefehle direkt benutzen, was oft in systemnaher Programmierung benötigt wird.
...kann dynamisch ladenAuf den meisten Unix-Systemen (und auch auf Windows) kannst du Object-Dateien (DLLs auf Windows) on-the-fly in den Ruby-Interpreter laden.
...besitzt viele BibliothekenProgrammbibliotheken namens "builtin libraries" und "standard libraries" werden mit Ruby verteilt. Und es ist kinderleicht, weitere Bibliotheken mithilfe des Paketsystems RubyGems zu installieren. Außerdem gibt es Tausende Ruby-Projekte auf Rubyforge und im RAA.
Rubys SyntaxRubys Syntax ist sehr leserlich (außer man legt es drauf an, siehe HowToObfuscate). Matz hat einmal gesagt, "Ich will Ruby natürlich machen, nicht einfach". Ein vollständiges Ruby-Programm sieht bereits so aus:
Es wird keine Klasse benötigt, in der der Code ausgeführt wird, denn Rubyprogramme werden grundsätzlich immer von einem "Main"-Objekt eingefasst. Klammern um Methodenargumente sind in den meisten Fällen optional, das bedeutet ebenfalls eine Erleichterung des Lesens von Rubys ohnehin schon "federleichter" Syntax. Die bereits oben beschriebene Flexibilität von Ruby bringt natürlich auch Nachteile mit sich. So ist Ruby nicht typensicher, man kann einer Methode grundsätzlich alle Typen von Argumenten übergeben und die Methode muss sehen, wie sie damit klar kommt. Auch kann es vorkommen, dass Methoden z.B. der Klasse String während der Laufzeit überschrieben oder entfernt werden, was dazu führen kann, dass unter Umständen das gesamte Programm nicht mehr funktionsfähig ist.
Ruby 1.9 und 2Ruby ist im Umbruch. Momentan wird die Sprache von dem Entwicklerteam um Matz komplett überarbeitet; die daraus entstehende Version Ruby 2 wird nicht abwärtskompatibel sein. Dies tritt bereits bei Ruby 1.9.1 heraus und wird sich wohl zu Ruby 2 hin noch verstärken, das RubyWiki-Team arbeitet an einer Liste der Veränderungen von Ruby 1.8 zu 1.9. Wie groß die Unterschiede der zwei Versionen sind, zeigt zum Beispiel, dass das Rubyforum verschiedene Rubriken für Ruby 1.8 und 1.9 besitzt. Siehe auch
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||