Ruby (Programmiersprache)
Paradigma | Multi-Paradigma: funktional, Imperativ, objektorientierter, reflektierend |
---|---|
Entworfen von | Yukihiro Matsumoto |
Entwickler | Yukihiro Matsumoto et al. |
Erstmals erschienen | 1995 |
Stabile Version | 3.1.2[1] / 12. April 2022 |
Disziplin tippen | Ente, dynamisch, stark |
Zielfernrohr | Lexikalisch, manchmal dynamisch |
Implementierungssprache | C |
OS | Plattformübergreifend |
Lizenz | Rubinlizenz |
Dateiname -Erweiterungen | .rb |
Webseite | www |
Haupt Implementierungen | |
Ruby MRT, Truffleruby, Yarv, Rubinius, Maglev, Jruby, Makruby, Rubymotion, MRUBY, Ironruby | |
Beeinflusst von | |
Ada,[2] Basic,[3] C ++,[2] Clu,[4] Dylan,[4] Eiffel,[2] Lispeln,[4] Lua, Perl,[4] Python,[4] Smalltalk[4] | |
Beeinflusst | |
Clojure, CoffeeScript, Kristall, D, Elixier, Groovig, Ioke,[5] Julia,[6] Mirah, Nu,[7] Ring,[8] Rost,[9] Schnell[10] | |
|
Rubin ist ein interpretiert, hohes Level, Allzweckprogrammiersprache das unterstützt mehrere Programmierparadigmen. Es wurde mit Schwerpunkt auf Programmierproduktivität und Einfachheit entwickelt. In Ruby ist alles ein Objekt, einschließlich Primitive Datentypen. Es wurde Mitte der neunziger Jahre von entwickelt Yukihiro "Matz" Matsumoto in Japan.
Ruby ist dynamisch getippt und verwendet Müllsammlung und Just-in-Time-Zusammenstellung. Es unterstützt mehrere Programmierparadigmen, einschließlich prozedural, objektorientierter, und Funktionelle Programmierung. Laut dem Schöpfer wurde Ruby von beeinflusst von Perl, Smalltalk, Eiffel, Ada, BASIC, und Lispeln.[11][3]
Geschichte
Frühes Konzept
Matsumoto hat gesagt, Ruby sei 1993 konzipiert worden Ruby-Talk Mailingliste beschreibt er einige seiner frühen Ideen zur Sprache:[12]
Ich sprach mit meinem Kollegen über die Möglichkeit einer objektorientierten Skriptsprache. Ich kannte Perl (Perl4, nicht Perl5), aber es mochte es nicht wirklich, weil es den Geruch von a hatte Spielzeugsprache (Es hat immer noch). Die objektorientierte Sprache schien sehr vielversprechend zu sein. ich wusste Python dann. Aber es hat mir nicht gefallen, weil ich nicht glaubte, es sei eine echte objektorientierte Sprache-OO-Funktionen schienen der Sprache erweitert zu sein. Als Sprachver mankte und OO-Fan 15 Jahre lang wollte ich wirklich eine echte objektorientierte, benutzerfreundliche Skriptsprache. Ich suchte danach, konnte aber keinen finden. Also habe ich beschlossen, es zu schaffen.
Matsumoto beschreibt das Design von Ruby als ein einfacher Lispeln Sprache im Kern, mit einem Objektsystem wie dem von SmallTalk, Blöcke inspiriert von Funktionen höherer Ordnungund praktischer Nutzen wie das von Perl.[13]
Der Name "Ruby" entstand am 24. Februar 1993 während einer Online -Chat -Sitzung zwischen Matsumoto und Keiju Ishitsuka, bevor ein Code für die Sprache geschrieben wurde.[14] Anfangs wurden zwei Namen vorgeschlagen: "Koralle" und "Rubin"Matsumoto wählte letztere in einer späteren E-Mail an Ishitsuka.[15] Matsumoto bemerkte später einen Faktor bei der Auswahl des Namens "Ruby" - es war das Geburtsstein eines seiner Kollegen.[16][17]
Frühe Veröffentlichungen
Die erste Veröffentlichung von Ruby 0,95 wurde für japanische Inland angekündigt Newsgroups am 21. Dezember 1995.[18][19] Anschließend wurden drei weitere Versionen von Ruby in zwei Tagen freigesetzt.[14] Die Veröffentlichung fiel mit dem Start der Japanische Sprache Rubinliste Mailingliste, die die erste Mailingliste für die neue Sprache war.
Bereits in dieser Entwicklungsphase waren viele der Merkmale, die in späteren Veröffentlichungen von Ruby bekannt waren, einschließlich objektorientierter Entwurf, Klassen mit Vererbung, Mischungen, Iteratoren, Schließungen, Ausnahmebehandlung und Müllsammlung.[20]
Nach der Veröffentlichung von Ruby 0,95 im Jahr 1995 wurden in den folgenden Jahren mehrere stabile Versionen von Ruby veröffentlicht:
- Ruby 1.0: 25. Dezember 1996[14]
- Ruby 1.2: Dezember 1998
- Ruby 1.4: August 1999
- Ruby 1.6: September 2000
1997 wurde der erste Artikel über Ruby im Web veröffentlicht. Im selben Jahr wurde Matsumoto von netlab.jp eingestellt, um als Vollzeitentwickler an Ruby zu arbeiten.[14]
1998 wurde das Ruby Application Archiv von Matsumoto zusammen mit einer einfachen englischsprachigen Homepage für Ruby auf den Markt gebracht.[14]
1999 die erste englischsprachige Mailingliste Ruby-Talk begann, was ein wachsendes Interesse an der Sprache außerhalb Japans signalisierte.[21] Im selben Jahr schrieben Matsumoto und Keiju Ishitsuka das erste Buch über Ruby, Die objektorientierte Skriptsprache Rubin (オブジェクト 指向 スクリプト 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語 言語) Japan im Oktober 1999. Es wurde in den frühen 2000er Jahren von rund 20 Büchern über Ruby auf Japanisch verfolgt.[14]
Bis 2000 war Ruby in Japan beliebter als Python.[22] Im September 2000 das erste englischsprachige Buch Programmieren von Rubin wurde gedruckt, das später frei für die Öffentlichkeit freigegeben wurde und die Einführung von Ruby unter englischen Sprechern weiter erweiterte. Anfang 2002 die englische Sprache Ruby-Talk Die Mailingliste erhielt mehr Nachrichten als die japanische Sprache RubinlisteRubys zunehmende Popularität in der nicht japanisch sprechenden Welt.
Ruby 1.8 und 1.9
Ruby 1.8 wurde ursprünglich August 2003 veröffentlicht, war lange Zeit stabil und wurde im Juni 2013 in den Ruhestand gebracht.[23] Obwohl veraltet, gibt es immer noch Code, die darauf basieren. Ruby 1.8 ist nur teilweise kompatibel mit Ruby 1.9.
Ruby 1.8 war Gegenstand mehrerer Branchenstandards. Die Sprachspezifikationen für Ruby wurden vom Open Standards Promotion Center der Information-Technology Promotion Agency (a) entwickelt Japanische Regierung Agentur) zur Einreichung bei der Japanische Industriestandardskomitee (Jisc) und dann zum Internationale Standardisierungsorganisation (ISO). Es wurde 2011 als japanischer Industriestandard (JIS X 3017) akzeptiert[24] und ein internationaler Standard (ISO/IEC 30170) im Jahr 2012.[25][26]
Um 2005 stieg das Interesse an der Ruby -Sprache zusammen mit Rubin auf Schienen, a Web Framework Geschrieben in Ruby. Rails wird häufig mit zunehmendem Bewusstsein von Ruby zugeschrieben.[27]
Wirksam mit Ruby 1.9.3, veröffentlicht am 31. Oktober 2011,[28] Ruby wechselte von der Dual-Lizenz unter der Ruby-Lizenz und der GPL zu einer Dual-Licen-unter der Ruby-Lizenz und der Zweiklausel-BSD-Lizenz.[29] Die Annahme von 1,9 wurde durch Änderungen von 1,8 verlangsamt, bei denen viele beliebte Dritte erforderlich waren Edelsteine umgeschrieben werden. Ruby 1.9 führt viele signifikante Änderungen gegenüber der 1,8 -Serie vor. Beispiele beinhalten:[30]
- Lokal blockieren Variablen (Variablen, die lokal zur Block in dem sie deklariert werden)
- ein zusätzliches Lambda Syntax:
f = ->(a,b) { puts a + b }
- ein zusätzliches Hash Die wörtliche Syntax mit Colons für Symbolschlüssel:
{symbol_key: "value"} == {:symbol_key => "value"}
- pro Sait Charaktercodierungen sind unterstützt
- neue Socket -API (IPv6 Unterstützung)
-
require_relative
Sicherheit importieren
Ruby 2
Ruby 2.0 sollte mit Ruby 1.9.3 vollständig rückwärtskompatibel sein. Zum offiziellen Veröffentlichung von 2.0.0 am 24. Februar 2013 gab es nur fünf bekannte (Neben-) Inkompatibilitäten.[31] Ruby 2.0 fügte mehrere neue Funktionen hinzu, darunter:
- Methode Keyword -Argumente,
- eine neue Methode,
Modul#vorbereiten
für die Erweiterung einer Klasse, - ein neues wörtliches Literal zum Erstellen einer Reihe von Symbolen,
- neue API für die faule Bewertung von aufzähligen nachkommen, und
- Eine neue Konvention von #to_h, um Objekte in Hashes umzuwandeln.[32]
Ab 2.1.0 änderte sich Rubys Versionsrichtlinie, um ähnlicher zu sein Semantische Versionierung.[33]
Ruby 2.2.0 enthält Geschwindigkeiten, Bugfixes und Bibliotheksaktualisierungen und entfernt einige veraltete APIs. Vor allem Ruby 2.2.0 führt Änderungen der Speicherhandhabung vor - einen inkrementellen Müllsammler, Unterstützung für die Müllsammlung von Symbolen und die Option, direkt gegen Jemalloc zu kompilieren. Es enthält auch experimentelle Unterstützung für die Verwendung Vfork(2) mit System () und Spawn () und fügte Unterstützung für die hinzu Unicode 7.0 Spezifikation. Seit Version 2.2.1,[34] Ruby MRT -Leistung auf Powerpc64 wurde verbessert.[35][36][37] Zu den Merkmalen, die veraltet oder entfernt gemacht wurden, gehören CALLCC, DL Library, Digest :: HMAC, Lib/Rational.RB, Lib/Komplex.RB, GSERVER, Logger :: Anwendung sowie verschiedene C -API -Funktionen.[38]
Ruby 2.3.0 enthält viele Leistungsverbesserungen, Updates und Bugfixe, einschließlich Änderungen an Proc#Call, Socket und IO -Verwendung von Schlüsselwörtern, Thread#Namensbearbeitung, Standard -passives Netz :: FTP -Verbindungen und Rake, das von STDLIB entfernt wird.[39] Weitere bemerkenswerte Änderungen sind:
- Die Fähigkeit, alle zu markieren String -Literale standardmäßig gefroren mit einer erheblichen Leistungssteigerung der String -Operationen.[40]
- Hash -Vergleich mit einer direkten Überprüfung von Schlüssel-/Wertpaaren anstelle von Tasten.
- Ein neuer Sicherer Navigationsbetreiber
&.
das kann das nil -Handling erleichtern (z. B. anstelle vonif obj && obj.foo && obj.foo.bar
, wir können benutzenWenn obj & .foo & .bar
). - Das Meinten Sie GEM ist jetzt standardmäßig gebündelt und beim Start erforderlich, um automatisch ähnliche Namensübereinstimmungen auf a vorzuschlagen NameError oder Nomethoderror.
- Hash#Dig und Array#Dig leicht zu tief verschachtelte Werte zu extrahieren (z. B. gegeben
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
, der Wert Foo Baz kann jetzt von abgerufen werden durchProfil.dig (: sozial ,: Wikipedia ,: Name)
). -
.grep_v (regexp)
Dies entspricht allen negativen Beispielen eines bestimmten regulären Ausdrucks zusätzlich zu anderen neuen Funktionen.
Ruby 2.4.0 enthält Leistungsverbesserungen an der Hash -Tabelle, Array#Max, Array#min und Instanzvariablenzugriff.[41] Weitere bemerkenswerte Änderungen sind:
- Bindung#IRB: Starten Sie eine Repl -Sitzung ähnlich wie binding.ry
- Vereinheitlichen Fixnum und Bignum hinein Ganze Zahl Klasse
- String unterstützt Unicode -Fallzuordnungen, nicht nur ASCII
- Eine neue Methode, Regexp#Match ?, Welches ist eine schnellere boolesche Version von Regexp#Match
- Die Erkennung von Thread -Deadlock -Erkennung zeigt jetzt Fäden mit Backtrace und Abhängigkeit
Einige bemerkenswerte Änderungen in Ruby 2.5.0 umfassen Rettung und dafür sorgen Aussagen verwenden automatisch eine Umgebung Do-End Block (weniger zusätzliche Notwendigkeit Beginn Blöcke), Methodenketten mit Rendite_self, Unterstützung für die Abdeckung der Zweigabdeckung und die Messung der Methodenabdeckung und einfachere Hash -Transformationen mit Hash#Slice und Hash#transform_keys Darüber hinaus sind viele Leistungsverbesserungen wie schnelleres Blockablauf (dreimal schneller), schnellere Mutexes, schnellere ERB -Vorlagen und Verbesserungen einiger Verkettungsmethoden vorhanden.
Einige bemerkenswerte Änderungen in Ruby 2.6.0 umfassen ein experimentell Just-in-Time-Compiler (JIT) und Rubyvm :: AbstractSyntaxtree (Experimental).
Einige bemerkenswerte Änderungen in Ruby 2.7.0 umfassen Musteranpassungen (experimentell), Replementverbesserungen, eine Verdichtungs -GC und die Trennung von Positions- und Schlüsselwortargumenten.
Ruby 3
Ruby 3.0.0 wurde am Weihnachtstag im Jahr 2020 veröffentlicht.[42] Es ist als Ruby 3x3 bekannt, was bedeutet, dass Programme in Ruby 3.0 dreimal schneller laufen würden, verglichen mit Ruby 2.0.[43] und einige hatten bereits in Zwischenveröffentlichungen auf der Straße von 2 bis 3 implementiert standardmäßig deaktiviert (zur Laufzeit durch Flags aktiviert).
Ein weiteres Ziel von Ruby 3.0 ist die Verbesserung Parallelität und zwei weitere Faserplaner für Versorgungsunternehmen und experimenteller Raktor erleichtern das Ziel.[42] Raktor ist leicht und fadensicher, da er durch den Austausch von Nachrichten und nicht durch gemeinsame Objekte erreicht wird.
Ruby 3.0 führt die RBS -Sprache ein, um die Arten von Ruby -Programmen für zu beschreiben Statische Analyse.[42] Es ist von allgemeinen Ruby -Programmen getrennt.
Es gibt auch einige Syntaxverbesserungen und Bibliotheksänderungen in Ruby 3.0.[42]
Ruby 3.1 wurde am Weihnachtstag im Jahr 2021 freigelassen.[44] Es umfasst Yjit, einen neuen Just-in-Time-Compiler von entwickelt von von Shopify, um die Leistung von Wirtschaftsanwendungen im realen Welt zu verbessern. Ein neuer Debugger ist auch enthalten. In dieser Veröffentlichung gibt es einige Syntaxverbesserungen und andere Verbesserungen. Netzwerkbibliotheken für Ftp, SMTP, IMAP, und POP werden von Standard -Edelsteinen zu gebündelten Edelsteinen verschoben. [45]
Tabelle der Versionen
Ausführung | Neueste Teeny -Version | Erstes Erscheinungsdatum | Ende der Unterstützungsphase | Ende der Sicherheitserhaltungsphase |
---|---|---|---|---|
1.0 | N / A | 1996-12-25[46] | N / A | N / A |
1.8 | 1.8.7-p375[47] | 2003-08-04[48] | 2012-06[49] | 2014-07-01[50] |
1.9 | 1.9.3-p551[51] | 2007-12-25[52] | 2014-02-23[53] | 2015-02-23[54] |
2.0 | 2.0.0-p648[55] | 2013-02-24[56] | 2015-02-24[55] | 2016-02-24[55] |
2.1 | 2.1.10[57] | 2013-12-25[58] | 2016-03-30[59][60] | 2017-03-31[61][62] |
2.2 | 2.2.10[63] | 2014-12-25[64] | 2017-03-28[65] | 2018-03-31[62] |
2.3 | 2.3.8[66] | 2015-12-25[67] | 2018-06-20[68] | 2019-03-31[68] |
2.4 | 2.4.10[69] | 2016-12-25[70] | 2019-04-01[71] | 2020-04-01[71] |
2.5 | 2.5.9[72] | 2017-12-25[73] | 2021-04-05[72] | 2021-04-05[72] |
2.6 | 2.6.10[74] | 2018-12-25[75] | 2021-04-05[76] | 2022-04-05[76] |
2.7 | 2.7.6[77] | 2019-12-25[78] | Tba | Tba |
3.0 | 3.0.4[79] | 2020-12-25[80] | Tba | Tba |
3.1 | 3.1.2[81] | 2021-12-25[44] | Tba | Tba |
Legende: Alte Version Ältere Version, noch gepflegt Letzte Version Zukünftige Veröffentlichung |
Semantik und Philosophie
Matsumoto hat gesagt, dass Ruby für die Produktivität und den Spaß der Programmierer konzipiert ist, der den Prinzipien des Guten folgt Benutzeroberfläche Entwurf.[82] Bei einem Google Tech -Vortrag im Jahr 2008 erklärte Matsumoto weiter: "Ich hoffe, dass Ruby jedem Programmierer auf der Welt hilft, produktiv zu sein und Programme zu genießen und glücklich zu sein. Das ist der Hauptzweck der Ruby -Sprache."[83] Er betont, dass das Systemdesign eher menschlich als Computer betonen muss: Bedürfnisse:[84]
Oft konzentrieren sich Menschen, insbesondere Computeringenieure, auf die Maschinen. Sie denken: "Auf diese Weise läuft die Maschine schnell. Auf diese Weise wird die Maschine effektiver laufen. Auf diese Weise wird die Maschine etwas etwas etwas." Sie konzentrieren sich auf Maschinen. Tatsächlich müssen wir uns jedoch auf Menschen konzentrieren, wie Menschen die Programmierung oder den Betrieb der Maschinen durchführen oder betreiben. Wir sind die Meister. Sie sind die Sklaven.
Matsumoto sagte, sein primäres Designziel sei es, eine Sprache zu machen, die er selbst genoss, indem er die Arbeitsprogrammierer und mögliche Verwirrung minimierte. Er hat gesagt, er habe das nicht angewendet Prinzip der geringsten Erstaunen (Pola) zum Design von Rubin;[84] In einer Diskussion im Mai 2005 über die Newsgroup Comp.lang.Ruby versuchte Matsumoto, Ruby von Pola zu distanzieren, und erklärte, dass er für jemanden überraschend ist, da er einen persönlichen Standard für die Bewertung der Überraschung verwendet. Wenn dieser persönliche Standard konsistent bleibt, gäbe es nur wenige Überraschungen für diejenigen, die mit dem Standard vertraut sind.[85]
Matsumoto hat es in einem Interview so definiert:[84]
Jeder hat einen individuellen Hintergrund. Jemand kann aus Python kommen, jemand anderes kann aus Perl kommen, und er kann von verschiedenen Aspekten der Sprache überrascht sein. Dann kommen sie auf mich zu und sagen: "Ich war von diesem Merkmal der Sprache überrascht, also verstößt Ruby gegen das Prinzip der geringsten Überraschung." Warte ab. Warte ab. Das Prinzip der geringsten Überraschung ist nicht nur für Sie. Das Prinzip der geringsten Überraschung bedeutet das Prinzip der geringsten mein Überraschung. Und es bedeutet das Prinzip der geringsten Überraschung, nachdem Sie Ruby sehr gut gelernt haben. Zum Beispiel war ich C ++ - Programmierer, bevor ich mit dem Entwerfen von Ruby begann. Ich habe zwei oder drei Jahre ausschließlich in C ++ programmiert. Und nach zwei Jahren C ++ - Programmierung überrascht es mich immer noch.
Ruby ist objektorientierter: Jeder Wert ist ein Objekt, einschließlich Klassen und Instanzen von Typen, die viele andere Sprachen als Primitive bezeichnen (wie z. Ganzzahlen, booleans und "Null"). Variablen halten immer Verweise auf Objekte. Jeder Funktion ist ein Methode und Methoden werden immer ein Objekt aufgerufen. Methoden, die auf der obersten Ebene definiert sind, werden Methoden der Objektklasse. Da diese Klasse ein Vorfahr jeder anderen Klasse ist, können solche Methoden jedes Objekt aufgerufen werden. Sie sind auch in allen Bereichen sichtbar und dienen effektiv als "globale" Verfahren. Rubinstützen Nachlass mit Dynamischer Versand, Mischungen und Singleton -Methoden (Zugehörigkeit und definiert für eine einzige Beispiel anstatt in der Klasse definiert zu werden). Obwohl Ruby nicht unterstützt Mehrfacherbe, Klassen können importieren Module als Mixins.
Ruby wurde als als beschrieben Multi-Paradigm-Programmiersprache: Es ermöglicht die prozedurale Programmierung (Definieren von Funktionen/Variablen außerhalb des Klassen Funktionelle Programmierung (es hat Anonyme Funktionen, Schließungen, und Kontinuationen; Aussagen alle haben Werte und Funktionen geben die letzte Bewertung zurück). Es hat Unterstützung für Selbstbeobachtung, Betrachtung und Metaprogrammierungsowie Unterstützung für Interpreter-basierte Basis Themen. Ruby -Merkmale Dynamisches Typingund unterstützt parametrischer Polymorphismus.
Nach den Ruby -FAQ ist die Syntax ähnlich wie Perl's und die Semantik ähneln dem Smalltalk, aber die Designphilosophie unterscheidet sich stark von Python.[86]
Merkmale
- Gründlich objektorientierter mit Nachlass, Mischungen und Metaklasse[87]
- Dynamisches Typing und Ententypisierung
- Alles ist ein Ausdruck (eben Aussagen) und alles wird ausgeführt unbedingt (eben Erklärungen)
- Prägnante und flexible Syntax[88] das minimiert syntaktisches Rauschen und dient als Grundlage für Domänenspezifische Sprachen[89]
- Dynamisch Betrachtung und Änderung von Objekten zu erleichtern Metaprogrammierung[90]
- Lexikalische Schließungen, Iteratoren und Generatoren, mit einer Blocksyntax[91]
- Wörtliche Notation für Arrays, Hashes, Reguläre Ausdrücke und Symbole
- Einbettungscode in Strings (Interpolation)
- Standardargumente
- Vier Ebenen variabler Umfang (global, Klasse, Beispiel, und lokal) bezeichnet durch Sigils oder das Fehlen davon
- Müllsammlung
- Erstklassige Kontinuationen
- Strenger Booleschen Zwang Regeln (alles ist Stimmt außer
FALSCH
undNull
) - Ausnahmebehandlung
- Bedienerüberlastung[92]
- Integrierte Unterstützung für Rationale Zahlen, komplexe Zahlen und willkürliche Präzisionsarithmetik
- Benutzerdefiniertes Versandverhalten (durch
method_ming
undconst_miss
) - Einheimisch Themen und kooperativ Fasern (Fasern sind 1,9/Yarv Besonderheit)
- Unterstützung für Unicode und mehrere Charaktercodierungen.
- Einheimisch Plug-In API in C
- Interaktive Rubinschale, ein interaktiver Befehlszeilen-Interpreter, mit dem Code schnell testen kann (Wiederholung)
- Zentrales Paketmanagement durch Rubygemems
- Auf allen wichtigen Plattformen implementiert
- Große Standardbibliothek, einschließlich Module für Yaml, JSON, Xml, CGI, OpenSSL, Http, Ftp, RSS, Flüche, Zlib und Tk[93]
- Just-in-Time-Zusammenstellung
Syntax
Die Syntax von Ruby ähnelt weitgehend der von Perl und Python. Klassen- und Methodendefinitionen werden nach Schlüsselwörtern signalisiert, während Codeblöcke entweder durch Schlüsselwörter oder Klammern definiert werden können. Im Gegensatz zu Perl werden Variablen nicht verpflichtet mit a Sigil. Bei Verwendung ändert das Sigil die Semantik des Umfangs der Variablen. Für praktische Zwecke gibt es keine Unterscheidung zwischen Ausdrücke und Aussagen.[94][95] Linienbrüche sind signifikant und als Ende einer Aussage genommen; Ein Semikolon kann äquivalent verwendet werden. Im Gegensatz zu Python ist die Eindrücke nicht signifikant.
Einer der Unterschiede zu Python und Perl besteht darin, dass Ruby alle seine Instanzvariablen für die Klasse vollständig privat hält und sie nur durch Accessor -Methoden freilegt (Attr_writer
, Attr_reader
, etc.). Im Gegensatz zu den "Getter" und "Setter" -Methoden anderer Sprachen wie wie C ++ oder Java, Accessor -Methoden in Ruby können mit einer einzelnen Codezeile über erstellt werden Metaprogrammierung; Accessor -Methoden können jedoch auch auf die traditionelle Weise von C ++ und Java erstellt werden. Da die Aufruf dieser Methoden nicht die Verwendung von Klammern erfordert, ist es trivial, eine Instanzvariable in eine vollständige Funktion zu ändern, ohne eine einzelne Zeile des Aufrufs von Code zu ändern oder eine Wiederaufnahme von ähnlichen Funktionen zu erreichen wie C# und Vb.net Immobilienmitglieder.
Pythons Immobiliendeskriptoren sind ähnlich, sind jedoch mit einem Kompromiss im Entwicklungsprozess ausgestattet. Wenn man in Python mit einer öffentlich freiliegenden Instanzvariablen beginnt und später die Implementierung so ändert, dass eine private Instanzvariable über einen Eigenschaftsdeskriptor freigelegt wird . Rubys Design zwingt alle Instanzvariablen, privat zu sein, bietet aber auch eine einfache Möglichkeit zum Deklarieren einstellen
und erhalten
Methoden. Dies entspricht der Idee, dass man in Ruby niemals direkt auf die internen Mitglieder einer Klasse von außerhalb der Klasse zugreift. Vielmehr gibt man eine Nachricht an die Klasse und erhält eine Antwort.
Implementierungen
Matz 'Ruby Interpreter
Der ursprüngliche Rubin Dolmetscher wird oft als als bezeichnet als Matz 'Ruby Interpreter oder MRT. Diese Implementierung ist in C geschrieben und verwendet einen eigenen Rubinspezifischen virtuelle Maschine.
Der standardisierte und pensionierte Ruby 1.8 Implementierung wurde geschrieben Cals Einzelpass Interpretierte Sprache.[23]
Beginnend mit Ruby 1.9 und fortgesetzt mit Ruby 2.x und höher, war der offizielle Ruby -Dolmetscher Yarv ("Ein weiterer Ruby VM"), und diese Implementierung hat die langsamere virtuelle Maschine ersetzt, die in früheren MRT -Veröffentlichungen verwendet wurde.
Alternative Implementierungen
Ab 2018[aktualisieren]Es gibt eine Reihe alternativer Implementierungen von Ruby, einschließlich Jruby, Rubinius, und MRUBY. Jeder verfolgt einen anderen Ansatz, wobei Jruby und Rubinius sorgen Just-in-Time-Zusammenstellung und Mruby auch zur Verfügung stellt Vorzeit Zusammenstellung.
Ruby hat drei wichtige alternative Implementierungen:
- Jruby, ein gemischt Java und Ruby -Implementierung, die auf dem ausgeführt wird Java virtuelle Maschine. JRUBY zielt derzeit auf Ruby 2.5 ab.
- Truffleruby, eine Java -Implementierung unter Verwendung des Trüffelsprachen -Implementierungsrahmens mit Graalvm
- Rubinius, a C ++ Bytecode virtuelle Maschine, die verwendet Llvm Zur Laufzeit zum Maschinencode kompilieren. Der Bytecode -Compiler und die meisten Kernklassen sind in reinem Rubin geschrieben. Rubinius zielt derzeit auf Ruby 2.3.1 ab.
Weitere Ruby -Implementierungen umfassen:
- Maglev, a Smalltalk Implementierung, die auf Gemtalk -Systemen ausgeführt wird ' Edelstein/s VM
- MRUBY, eine Implementierung, die in einem ähnlichen Hinweis in C -Code eingebettet werden soll Lua. Es wird derzeit von entwickelt von Yukihiro Matsumoto und andere
- RGSSoder Ruby Game Scripting System, a proprietär Implementierung, die von der verwendet wird RPG -Hersteller Serie von Software für Spieldesign und Änderung der RPG Maker -Engine
- Julializer, a Transpiler (teilweise) von Ruby nach Julia. Es kann für eine große Beschleunigung über z. Ruby- oder Jruby -Implementierungen (dürfen nur für den numerischen Code nützlich sein).[96]
- Topaz, eine Ruby -Implementierung geschrieben in Python
- Opal, ein webbasierter Dolmetscher, der Ruby zu kompiliert JavaScript
Andere jetzt verstorbene Ruby -Implementierungen waren:
- Makruby, a Mac OS X Implementierung auf der Ziel c Laufzeit. Das iOS -Gegenstück heißt Rubymotion
- Ironruby eine Implementierung auf der .NET Framework
- Kardinal, eine Implementierung für die Virtuelle Papageienmaschine
- Ruby Enterprise Editionoft verkürzt zu Ree, eine Implementierung, die für den Umgang mit großem Maßstab optimiert ist Rubin auf Schienen Projekte
- Hotruby, a JavaScript und Aktionen Implementierung der Ruby -Programmiersprache
Die Reife von Ruby -Implementierungen wird in der Regel an ihrer Fähigkeit gemessen, die zu führen Rubin auf Schienen (Rails) Framework, da es komplex ist, viele rubinspezifische Funktionen zu implementieren und verwendet. Der Punkt, an dem eine bestimmte Implementierung dieses Ziel erreicht, heißt "The Rails Singularity". Die Referenzimplementierung, Jruby und Rubinius[97] sind alle in der Lage, Schienen in einer Produktionsumgebung unmodifiziert zu betreiben.
Plattformunterstützung
Matsumoto entwickelte ursprünglich Ruby auf der 4.3bsd-basierend Sony News-Os 3.x, wanderte aber später seine Arbeit auf Sonnenos 4.x und schließlich zu Linux.[98][99] Bis 1999 arbeitete Ruby dafür, dass Ruby über viele verschiedene arbeitete Betriebssysteme. Moderne Ruby-Versionen und -implementierungen sind auf allen wichtigen Desktop-, Mobil- und Serverbasis-Betriebssystemen verfügbar. Ruby wird auch auf einer Reihe von Cloud -Hosting -Plattformen wie unterstützt Jelastic, Heroku, Google Cloud -Plattform und andere.
Werkzeuge wie RVM und RBENV erleichtern die Installation und Partitionierung mehrerer Ruby -Versionen und mehrere 'Edelstoffe' auf einer Maschine.
Repositories und Bibliotheken
Rubygemems ist Rubys Paketmanager. Ein Ruby -Paket wird als "Edelstein" bezeichnet und kann über die Befehlszeile installiert werden. Die meisten Edelsteine sind Bibliotheken, obwohl einige vorhanden sind, die Anwendungen sind, wie z. Ides.[100] Es werden über 100.000 Ruby -Edelsteine veranstaltet Rubygemems.org.[101]
Viele neue und vorhandene Ruby -Bibliotheken werden veranstaltet GitHub, ein Service, der anbietet Versionskontrolle Repository -Hosting für Git.
Das Ruby Application Archiv, in dem Anwendungen, Dokumentationen und Bibliotheken für Ruby -Programmierung gehostet wurden, wurde bis 2013 aufrechterhalten, als seine Funktion auf Rubygems übertragen wurde.[102]
Siehe auch
- Vergleich der Programmiersprachen
- Metasploit -Projekt
- Warum ist der (ergreifende) Leitfaden zu Ruby
- Xruby
- Kristall (Programmiersprache)
Verweise
- ^ https://www.ruby-lang.org/en/news/2022/04/12/ruby-3-1-2-releierte/.
- ^ a b c Cooper, Peter (2009). Anfang Ruby: Vom Anfänger zum Profi. Beginnend vom Anfänger bis zum Profi (2. Aufl.). Berkeley: Apress. p. 101. ISBN 978-1-4302-2363-4.
In geringerem Maße haben Python, Lisp, Eiffel, ADA und C ++ auch Ruby beeinflusst.
- ^ a b "Gründe für Ruby". Ruby Conference 2008. Konfreps TV. Abgerufen 2019-06-25.
- ^ a b c d e f Bini, Ola (2007). Praktische Jruby on Rails Web 2.0 Projekte: Ruby auf Rails nach Java bringen. Berkeley: Apress. p.3. ISBN 978-1-59059-881-8.
Es stützt sich hauptsächlich auf Merkmale von Perl, SmallTalk, Python, Lisp, Dylan und Clu.
- ^ Bini, Ola. "Ioke". Ioke.org. Archiviert von das Original Am 2011-07-21. Abgerufen 2011-07-21.
Inspiriert von IO, SmallTalk, Lisp und Ruby
- ^ "Julia 1.0 Dokumentation: Einführung". Abgerufen 6. Oktober 2018.
- ^ Burks, Tim. "Über Nu ™". Programmierung nu ™. Neon Design Technology, Inc.. Abgerufen 2011-07-21.
- ^ Ringteam (3. Dezember 2017). "Ring und andere Sprachen". Ring-Lang.net. Ring-Lang.
- ^ "Die Rostreferenz". Abgerufen 16. November 2019.
- ^ Lattner, Chris (2014-06-03). "Chris Lattners Homepage". Chris Lattner. Abgerufen 2014-06-03.
Die schnelle Sprache ist das Produkt unermüdlicher Anstrengungen eines Teams von Sprachenexperten, Dokumentations-Gurus, Compiler-Optimierung Ninjas und einer unglaublich wichtigen internen Dogfooding-Gruppe, die Feedback zur Verfeinerung und den Schlachtstest-Ideen gab. Natürlich profitierte es auch stark von den Erlebnissen, die viele andere Sprachen auf diesem Gebiet hart erkannt haben und Ideen von Objective-C, Rost, Haskell, Ruby, Python, C#, CLU und viel zu vielen anderen zeichnen, um aufzulisten.
- ^ "Über Ruby". Abgerufen 15. Februar 2020.
- ^ Shugo Maeda (17. Dezember 2002). "Die Ruby Language FAQ". Abgerufen 2. März 2014.
- ^ Matsumoto, Yukihiro (13. Februar 2006). "Re: Rubys Lisp -Funktionen". Abgerufen 15. Februar 2020.
- ^ a b c d e f "Geschichte von Ruby".
- ^ "[FYI: Historisch] Der entscheidende Moment des Sprachnamens Ruby. (Re: [Ann] Ruby 1.8.1)" (E-Mail von Hiroshi Sugihara bis Ruby-Talk).
- ^ "1.3 Warum der Name 'Ruby'?". Die Ruby Language FAQ. Ruby-doc.org. Abgerufen 10. April, 2012.
- ^ Yukihiro Matsumoto (11. Juni 1999). "Re: Der Name von Ruby?". Ruby-Talk (Mailingliste). Abgerufen 10. April, 2012.
- ^ "Mehr Archaeolinguistik: Entdeckung von Proto-Ruby". Archiviert von das Original am 6. November 2015. Abgerufen 2. Mai 2015.
- ^ "[Ruby-Talk: 00382] Re: Geschichte von Ruby". Abgerufen 2. Mai 2015.
- ^ "[Ruby-List: 124] Tutorial-Rubys Merkmale". Abgerufen 2. Mai 2015.
- ^ "Ein Interview mit dem Schöpfer von Ruby".
- ^ Yukihiro Matsumoto (Oktober 2000). "Programmieren Ruby: Vorwärts". Abgerufen 5. März 2014.
- ^ a b "Wir ziehen Ruby 1.8.7 zurück". Abgerufen 2. Mai 2015.
- ^ "Ipa 独立 行政 法人 情報 推進 機構 : : 発表 プログラム 言語 言語 の の jis 規格 jis x 3017) について について について について について について について について について について について について について について について について の の の の について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 法人 について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について について. Abgerufen 2. Mai 2015.
- ^ "Ipa 独立 行政 法人 情報 推進 機構 : : 発表 プログラム 言語 言語 言語 、 国際 規格 として 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 発表 発表 発表 承認 承認 承認 承認 : : : : : : : : : : : : : : : : : : : : 承認 承認 承認 承認 承認 承認 承認 承認 情報 情報 情報 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認 承認. Abgerufen 2. Mai 2015.
- ^ "ISO/IEC 30170: 2012". Abgerufen 2017-03-10.
- ^ Webentwicklung: Ruby on Rails. Devarticles.com (2007-03-22). Abgerufen am 2013-07-17.
- ^ "Ruby 1.9.3 p0 wird freigegeben". Ruby-Lang.org. 31. Oktober 2011. Abgerufen 20. Februar, 2013.
- ^ "v1_9_3_0/news". Rubin Subversion Quell -Repository. Ruby-Lang.org. 17. September 2011. Abgerufen 20. Februar, 2013.
- ^ Ruby 1.9: Was zu erwarten ist. Diashow.rubyforge.org. Abgerufen am 2013-07-17.
- ^ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-P0 wird freigegeben. Ruby-Lang.org. Abgerufen am 2013-07-17.
- ^ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-P0 wird freigegeben. Ruby-Lang.org. Abgerufen am 2013-07-17.
- ^ "Semantische Versioning beginnend mit Ruby 2.1.0". 21. Dezember 2013. Abgerufen 27. Dezember, 2013.
- ^ Gustavo Frederico Tempel Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "Ruby 2.2.1 freigegeben". Abgerufen 12. Juli 2016.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Gustavo Frederico Tempel Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "V2.2.1 Changelog". Abgerufen 12. Juli 2016.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Gustavo Frederico Tempel Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Angabe nicht volatiler Register für die Erhöhung der Leistung in PPC64". Abgerufen 12. Juli 2016.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Gustavo Frederico Tempel Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Makro zur Erhöhung der Leistung in PPC64 angeben". Abgerufen 12. Juli 2016.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ "Ruby/News bei v2_2_0 · Ruby/Ruby · GitHub". GitHub. Abgerufen 2. Mai 2015.
- ^ "Ruby/News unter v.2_3_0 - Ruby/Ruby". GitHub. Abgerufen 25. Dezember 2015.
- ^ "Ruby 2.3.0 Änderungen und Funktionen". Mit Ruby laufen. dev.mensfeld.pl. 14. November 2015.
- ^ "Ruby 2.4.0 freigegeben". www.rubylang.org. Abgerufen 2016-12-30.
- ^ a b c d "Ruby 3.0.0 veröffentlicht". Ruby -Programmiersprache. 2020-12-25. Abgerufen 2020-12-25.
- ^ "Ruby 3x3: Matz, Koichi und Tenderlove über die Zukunft von Ruby Performance".
- ^ a b "Ruby 3.1.0 freigegeben". Ruby-Lang.org. Abgerufen 25. Dezember 2021.
- ^ "Ruby 3.1.0 freigegeben".
- ^ "Die Weihnachtsveröffentlichungen der Ruby Community". www.rubyinside.com.
- ^ "Ein Patch in der Zeit: Rubin zu sichern".
- ^ "Ruby-1.8.0 veröffentlicht!". www.rubylang.org.
- ^ "Pläne für 1.8.7". www.rubylang.org.
- ^ "EOL für Ruby 1.8.7 und 1.9.2". www.rubylang.org.
- ^ "Ruby 1.9.3-p551 veröffentlicht". www.rubylang.org.
- ^ "Ruby 1.9.0 freigegeben". www.rubylang.org.
- ^ "Die Unterstützung für Ruby Version 1.9.3 endet am 23. Februar 2015". www.rubylang.org.
- ^ "Die Unterstützung für Ruby 1.9.3 ist beendet". www.rubylang.org.
- ^ a b c "Ruby 2.0.0-p648 veröffentlicht". www.rubylang.org.
- ^ "Ruby 2.0.0-P0 wird freigegeben". www.rubylang.org.
- ^ "Ruby 2.1.10 freigegeben". www.rubylang.org.
- ^ "Ruby 2.1.0 wird freigegeben". www.rubylang.org.
- ^ "Supportpläne für Ruby 2.0.0 und Ruby 2.1". www.rubylang.org.
- ^ "Ruby 2.1.9 veröffentlicht". www.rubylang.org.
- ^ "Ruby Problem Tracking System". Bugs.Ruby-Lang.org.
- ^ a b "Die Unterstützung von Ruby 2.1 ist beendet". www.rubylang.org.
- ^ "Ruby 2.2.10 freigegeben". www.rubylang.org.
- ^ "Ruby 2.2.0 freigegeben". www.rubylang.org.
- ^ "Ruby 2.2.7 veröffentlicht". www.rubylang.org.
- ^ "Ruby 2.3.8 freigelassen". www.rubylang.org.
- ^ "Ruby 2.3.0 freigegeben". www.rubylang.org.
- ^ a b "Die Unterstützung von Ruby 2.2 ist beendet". www.rubylang.org.
- ^ "Ruby 2.4.10 freigegeben". Ruby -Programmiersprache. 2020-03-31. Abgerufen 2020-04-01.
- ^ "Ruby 2.4.0 freigegeben". www.rubylang.org.
- ^ a b "Die Unterstützung von Ruby 2.4 ist beendet". www.rubylang.org.
- ^ a b c "Ruby 2.5.9 veröffentlicht". Ruby -Programmiersprache. 2021-04-05. Abgerufen 2021-04-05.
- ^ "Ruby 2.5.0 freigegeben". www.rubylang.org.
- ^ "Ruby 2.6.9 veröffentlicht". Ruby -Programmiersprache. 2021-11-24. Abgerufen 2021-12-14.
- ^ "Ruby 2.6.0 freigegeben". www.rubylang.org.
- ^ a b "Ruby 2.6.10 freigegeben". Ruby -Programmiersprache. 2022-04-12. Abgerufen 2022-04-28.
- ^ "Ruby 2.7.6 veröffentlicht". Ruby -Programmiersprache. 2022-04-12. Abgerufen 2022-04-28.
- ^ "Ruby 2.7.0 freigegeben". www.rubylang.org.
- ^ "Ruby 3.0.4 veröffentlicht". Ruby -Programmiersprache. 2022-04-12. Abgerufen 2022-04-28.
- ^ "Ruby 3.0.0 veröffentlicht". www.rubylang.org.
- ^ "Ruby 3.1.2 freigegeben". Ruby-Lang.org. Abgerufen 28. April 2022.
- ^ "Die Ruby -Programmiersprache". Abgerufen 2. Mai 2015.
- ^ Google Tech Talks - Ruby 1.9 an Youtube
- ^ a b c Bill Venners. "Die Philosophie von Ruby". Abgerufen 2. Mai 2015.
- ^ "Willkommen bei RubyweeklyNews.org". 4. Juli 2017. Archiviert vom Original am 4. Juli 2017.
{{}}
: CS1 Wartung: Bot: Original -URL -Status unbekannt (Link) - ^ "Die FAQ der Ruby Language: Wie stapelt sich Ruby gegen ...?". Abgerufen 2. Mai 2015.
- ^ Bruce Stewart (29. November 2001). "Ein Interview mit dem Schöpfer von Ruby". O'Reilly Media. Abgerufen 2. Mai 2015.
- ^ Bill Venners. "Dynamische Produktivität mit Ruby". Abgerufen 2. Mai 2015.
- ^ "Spracharbeitbank: Die Killer-App für domänenspezifische Sprachen?". Martinfowler.com. Abgerufen 2. Mai 2015.
- ^ "Ruby - zur Laufzeit Klassenmethoden hinzufügen".
- ^ Bill Venners. "Blöcke und Schließungen in Ruby". Abgerufen 2. Mai 2015.
- ^ "Methoden". Offizielle Rubin -FAQ.
- ^ Britt, James. "Ruby 2.0.0 Standardbibliotheksdokumentation". Abgerufen 2013-12-09.
- ^ "[Ruby-Talk: 01120] Re: Der Wert von while ..."
In Rubys Syntax ist die Anweisung nur ein Sonderfall eines Ausdrucks, der nicht als Argument erscheinen kann (z. B. multiple Zuordnung).
- ^ "[Ruby-Talk: 02460] Re: Priornece Frage".
Aussage [...] kann nicht Teil des Ausdrucks sein, es sei denn, sie gruppiert innerhalb von Klammern.
- ^ "Entfernen/virtual_module: geboren, um Ihren Ruby -Code mehr als 3x schneller zu machen. Hoffentlich". GitHub. 21. Februar 2020.
- ^ Peter Cooper (2010-05-18). "Das Warum, was und wie von Rubinius 1.0er Freigabe".
- ^ Maya Stodte (Februar 2000). "IBM Developerworks - Ruby: Eine neue Sprache". Archiviert von das Original am 18. August 2000. Abgerufen 3. März 2014.
- ^ Yukihiro Matsumoto (August 2002). "Lang-Ruby-General: Re: Frage zu Ruby Initial Development". Abgerufen 3. März 2014.
- ^ "Die Ruby Toolbox". Abgerufen 2015-04-04.
- ^ "Statistiken Rubygems.org Ihr Community -Edelstein -Host". Rubygemems.org. Abgerufen 10. Dezember 2021.
- ^ "Wir ziehen raa.ruby-Lang.org zurück". 2013-08-08. Abgerufen 2016-01-03.
Weitere Lektüre
- Schwarz, David; Leo, Joseph (15. März 2019), Der fundierte Rubyist (Dritter Ed.), Manning Publications, p. 584, ISBN 978-1617295218
- Metz, Sandi (22. August 2018), Praktisches objektorientiertes Design: Ein agiler Primer mit Ruby (Zweite Ed.), Addison-Wesley Professional, p. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (12. Juli 2016), Anfang Ruby: Vom Anfänger zum Profi (Dritter Ed.), Apress, p. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (3. April 2015), Ruby-Kochbuch: Rezepte für objektorientierte Skripten (Zweite Ed.), O'Reilly Media, p. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2. März 2015), Der Ruby Way: Lösungen und Techniken in der Ruby -Programmierung (Dritter Ed.), Addison-Wesley Professional, p.816, ISBN 978-0-321-71463-3
- Thomas, Dave;Fowler, Chad;Hunt, Andy (7. Juli 2013), Programmieren von Ruby 1.9 & 2.0: Der Leitfaden für pragmatische Programmierer (Viertes Ausgabe),, Pragmatischer Bücherregal, p.888, ISBN 978-1937785499
- McAanally, Jeremy;Arkin, Assaf (28. März 2009), Ruby in der Praxis (First Ed.), Manning Publications, p.360, ISBN 978-1933988474
- Flanagan, David;Matsumoto, Yukihiro (25. Januar 2008), Die Ruby -Programmiersprache (First Ed.), O'Reilly Media, p.446, ISBN 978-0-596-51617-8
- Baird, Kevin (8. Juni 2007), Ruby mit Beispiel: Konzepte und Code (First Ed.), Keine Stärkepresse, p.326, ISBN 978-1593271480
- Fitzgerald, Michael (14. Mai 2007), Rubin lernen (First Ed.), O'Reilly Media, p.255, ISBN 978-0-596-52986-4