Ruby (programovací jazyk) - Ruby (programming language)
![]() | |
Paradigma | Multi-paradigma: funkční, rozkazovací způsob, objektově orientovaný, reflexní |
---|---|
Navrhl | Yukihiro Matsumoto |
Vývojář | Yukihiro Matsumoto a kol. |
Poprvé se objevil | 1995 |
Stabilní uvolnění | 2.7.2[1] (2. října 2020 ) [±] |
Psací disciplína | Kachna, dynamický, silný |
Rozsah | Lexikální, někdy dynamická |
Jazyk implementace | C |
OS | Cross-platform |
Licence | Ruby licence, GPLv2 nebo 2-klauzule BSD licence[2][3][4] |
Přípony názvu souboru | .rb |
webová stránka | www |
Hlavní, důležitý implementace | |
Ruby MRI, YARV, Rubinius, MagLev, JRuby, MacRuby, RubyMotion, Mruby, IronRuby | |
Ovlivněno | |
Ada,[5] Základní,[6] C ++,[5] CLU,[7] Dylan,[7] Eiffelova,[5] Lisp,[7] Lua, Perl,[7] Krajta,[7] Pokec[7] | |
Ovlivněno | |
Clojure, CoffeeScript, Krystal, D, Elixír, Báječný, Vtip,[8] Julie,[9] Mirah, Nu,[10] Prsten,[11] Rez,[12] Rychlý[13] | |
|
Rubín je interpretován, vysoká úroveň, univerzální programovací jazyk. Byl navržen a vyvinut v polovině 90. let 20. století Yukihiro "Matz" Matsumoto v Japonsko.
Ruby je dynamicky zadáno a použití odvoz odpadu. Podporuje více paradigmata programování, počítaje v to procesní, objektově orientovaný, a Funkcionální programování. Podle tvůrce byla Ruby ovlivněna Perl, Pokec, Eiffelova, Ada, ZÁKLADNÍ, a Lisp.[14][15]
Dějiny
Časný koncept
Matsumoto uvedl, že Ruby byla koncipována v roce 1993. V roce 1999 pracoval v ruby-talk mailing list, popisuje některé ze svých raných představ o jazyce:[16]
Mluvil jsem s kolegou o možnosti objektově orientovaného skriptovacího jazyka. Znal jsem Perl (Perl4, ne Perl5), ale moc se mi to nelíbilo, protože to mělo vůni jazyk hraček (stále má). Objektově orientovaný jazyk vypadal velmi slibně. věděl jsem Krajta pak. Ale nelíbilo se mi to, protože jsem si nemyslel, že je to skutečný objektově orientovaný jazyk - funkce OO se zdály být doplňkem jazyka. Jako jazykový maniak a fanoušek OO po 15 let jsem opravdu chtěl skutečný objektově orientovaný a snadno použitelný skriptovací jazyk. Hledal jsem, ale nenašel jsem. Takže jsem se rozhodl to zvládnout.
Matsumoto popisuje design Ruby jako jednoduchý Lisp jazyk v jeho jádru, s objektovým systémem, jako je Smalltalk, bloky inspirované funkce vyššího řádu a praktická užitečnost jako v Perlu.[17]
Jméno „Ruby“
Jméno „Ruby“ vzniklo během online chatu mezi Matsumotem a Keiju Ishitsukou 24. února 1993, než byl pro jazyk napsán jakýkoli kód.[18] Původně byla navržena dvě jména: „Korál " a "Rubín Matsumoto si vybral druhou možnost v pozdějším e-mailu Ishitsuce.[19] Matsumoto později poznamenal faktor při výběru názvu „Ruby“ - to byl kámen jednoho z jeho kolegů.[20][21]
První publikace
První veřejné vydání Ruby 0.95 bylo oznámeno na japonských domácích produktech diskusní skupiny 21. prosince 1995.[22][23] Následně byly za dva dny vydány další tři verze Ruby.[18] Uvolnění se shodovalo se zahájením Japonština rubínový seznam mailing list, což byl první mailing list pro nový jazyk.
V této fázi vývoje již bylo přítomno mnoho funkcí známých v pozdějších vydáních Ruby, včetně objektově orientovaný design, třídy s dědictvím, mixiny, iterátory, uzávěry, zpracování výjimek a odvoz odpadu.[24]
První vydání
Po vydání Ruby 0.95 v roce 1995 bylo v následujících letech vydáno několik stabilních verzí Ruby:
- Ruby 1.0: 25. prosince 1996[18]
- Ruby 1.2: prosinec 1998
- Ruby 1.4: srpen 1999
- Ruby 1.6: září 2000
V roce 1997 byl na webu publikován první článek o Ruby. Ve stejném roce byl Matsumoto najat společností netlab.jp, aby pracoval na Ruby jako vývojář na plný úvazek.[18]
V roce 1998 spustil Matsumoto Archiv aplikací Ruby spolu s jednoduchou domovskou stránkou pro Ruby v angličtině.[18]
V roce 1999 první adresář v anglickém jazyce ruby-talk začalo, což signalizovalo rostoucí zájem o jazyk mimo Japonsko.[25] Ve stejném roce Matsumoto a Keiju Ishitsuka napsali první knihu o Ruby, Objektově orientovaný skriptovací jazyk Ruby (オ ブ ジ ェ ク ト 指向 ス ク リ プ ト 言語 Ruby), která vyšla v Japonsku v říjnu 1999. Na počátku dvacátých let by na ni mělo navazovat zhruba 20 knih o Ruby vydaných v japonštině.[18]
Do roku 2000 byla Ruby v Japonsku populárnější než Python.[26] V září 2000 první kniha v anglickém jazyce Programování Ruby byl vytištěn, který byl později volně propuštěn pro veřejnost, což dále rozšiřovalo přijetí Ruby mezi mluvčími angličtiny. Na začátku roku 2002 v anglickém jazyce ruby-talk e-mailový seznam přijímal více zpráv než v japonštině rubínový seznam, což dokazuje rostoucí popularitu Ruby v jiném než japonském světě.
Ruby 1.8
Ruby 1.8 byl původně vydán v srpnu 2003, byl dlouhodobě stabilní a v červnu 2013 byl vyřazen.[27] Přestože je zastaralý, stále na něm existuje kód. Ruby 1.8 je s Ruby 1.9 kompatibilní pouze částečně.
Ruby 1.8 byl předmětem několika průmyslových standardů. Jazykové specifikace pro Ruby byly vyvinuty v Centru pro podporu otevřených standardů Agentury pro podporu informačních technologií (a Japonská vláda agentura) pro podání do Japonský výbor pro průmyslové normy (JISC) a poté do Mezinárodní organizace pro normalizaci (ISO). V roce 2011 byl přijat jako japonský průmyslový standard (JIS X 3017)[28] a mezinárodní standard (ISO / IEC 30170 ) v roce 2012.[29][30]
Kolem roku 2005 vzrostl zájem o jazyk Ruby společně s Ruby on Rails, a webový rámec napsáno v Ruby. Rails je často připočítán se zvyšujícím se povědomím o Ruby.[31]
Ruby 1.9
Ruby 1.9 byl vydán dne Štědrý den v roce 2007. Účinné s Ruby 1.9.3, vydané 31. října 2011,[32] Ruby přešla z dvojí licence na základě Ruby licence a GPL na dvojí licenci na základě Ruby licence a dvoučlenné licence BSD.[33] Přijetí 1,9 bylo zpomaleno změnami od 1,8, které vyžadovaly mnoho populárních třetích stran drahokamy přepsat.
Ruby 1.9 přináší u řady 1.8 mnoho významných změn.[34] Příklady:
- blokovat místní proměnné (proměnné, které jsou lokální pro blok ve kterém jsou deklarovány)
- další lambda syntax:
F = ->(A,b) { uvádí A + b }
- další Hash doslovná syntaxe používající dvojtečky pro klíče symbolů:
{symbol_key: "hodnota"} == {: symbol_key => "hodnota"}
- na řetězec kódování znaků jsou podporovány
- nové socket API (IPv6 Podpěra, podpora)
require_relative
zabezpečení importu
Ruby 1.9 je zastaralá od 23. února 2015,[35] a již nebude dostávat opravy chyb a zabezpečení. Uživatelům se doporučuje upgradovat na novější verzi.
Ruby 2.0
Ruby 2.0 přidal několik nových funkcí, včetně:
- argumenty klíčových slov metody,
- nová metoda,
Předplaťte modul #
, za rozšíření třídy, - nový doslovný text pro vytvoření řady symbolů,
- nové API pro líné hodnocení z Enumerables a
- nová konvence použití #to_h k převodu objektů na hash.[36]
Ruby 2.0 měl být plně zpětně kompatibilní s Ruby 1.9.3. K oficiálnímu vydání 2.0.0 24. února 2013 bylo známo pouze pět (drobných) nekompatibilit.[37]
Ruby 2.0 je zastaralá od 24. února 2016,[38] a již nebude dostávat opravy chyb a zabezpečení. Uživatelům se doporučuje upgradovat na novější verzi.
Ruby 2.1
Ruby 2.1.0 vyšlo na Štědrý den v roce 2013.[39] Tato verze obsahuje zrychlení, opravy chyb a aktualizace knihoven.
Počínaje verzí 2.1.0 se zásady správy verzí Ruby podobají sémantické verze.[40] Ačkoli je podobná, zásady správy verzí Ruby nejsou kompatibilní se sémantickými verzemi:
Rubín | Sémantické verze |
---|---|
HLAVNÍ, DŮLEŽITÝ: Zvýšeno, když je nekompatibilní změna, kterou nelze vydat za MINOR. Vyhrazeno pro speciální akce. | HLAVNÍ, DŮLEŽITÝ: Zvýšeno, když provedete nekompatibilní změny API. |
MÉNĚ DŮLEŽITÝ: zvýšeno každé Vánoce, možná API nekompatibilní. | MÉNĚ DŮLEŽITÝ: zvýšeno, když přidáte funkce do a zpětně kompatibilní způsob. |
MALINKÝ: zabezpečení nebo oprava chyby, která udržuje kompatibilitu API. Může být zvýšeno o více než 10 (například 2.1.11) a bude vydáváno každé 2–3 měsíce. | NÁPLAST: zvýšeno při provádění zpětně kompatibilních oprav chyb. |
NÁPLAST: počet závazků od posledního MINOR vydání (bude resetován na 0 při uvolnění MINOR). | - |
Sémantické verzování také poskytuje další štítky pro předběžná vydání a metadata sestavení jsou k dispozici jako rozšíření formátu MAJOR.MINOR.PATCH, která nejsou k dispozici v Ruby.
Ruby 2.1 je zastaralá od 1. dubna 2017,[41] a již nebude dostávat opravy chyb a zabezpečení. Uživatelům se doporučuje upgradovat na novější verzi.
Ruby 2.2
Ruby 2.2.0 byl vydán na Štědrý den v roce 2014.[42] Tato verze obsahuje zrychlení, opravy chyb a aktualizace knihoven a odstraňuje některá zastaralá rozhraní API. Nejvýznamnější je, že Ruby 2.2.0 zavádí změny v manipulaci s pamětí - přírůstkový garbage collector, podpora garbage collectoru symbolů a možnost kompilace přímo proti jemalloc. Obsahuje také experimentální podporu pro používání vfork (2) se systémem () a spawn () a přidána podpora pro Unicode Specifikace 7.0.
Mezi funkce, které byly zastaralé nebo odstraněné, patří callcc, knihovna DL, Digest :: HMAC, lib / rational.rb, lib / complex.rb, GServer, Logger :: Application a také různé funkce C API.[43]
Ruby 2.2 je zastaralá od 1. dubna 2018,[44] a již nebude dostávat opravy chyb a zabezpečení. Uživatelům se doporučuje upgradovat na novější verzi.
Ruby 2.3
Ruby 2.3.0 byl vydán na Štědrý den v roce 2015. Mezi významné změny patří:
- Schopnost označit vše řetězcové literály jako zmrazené ve výchozím nastavení s následně velkým zvýšením výkonu v řetězcových operacích.[49]
- Porovnání hash, které umožňuje přímou kontrolu párů klíč / hodnota namísto pouze klíčů.
- Nový operátor bezpečné navigace
&.
které mohou usnadnit nulovou manipulaci (např. místo-li obj && obj.foo && obj.foo.bar
, můžeme použítpokud obj & .foo & .bar
). - The myslel jsi klenot je nyní ve výchozím nastavení dodáván a je vyžadován při spuštění, aby automaticky navrhoval podobné shody názvů na Chyba názvu nebo NoMethodError.
- Hash # dig a Pole # kopat snadno extrahovat hluboce vnořené hodnoty (např. dané
profil = { sociální: { wikipedia: { název: 'Foo Baz' } } }
, hodnota Foo Baz nyní lze načíst pomocíprofile.dig (: social,: wikipedia,: name)
). .grep_v (regulární výraz)
který bude kromě dalších nových funkcí odpovídat všem negativním příkladům daného regulárního výrazu.
Větev 2.3 také zahrnuje mnoho vylepšení výkonu, aktualizací a oprav chyb, včetně změn volání Proc #, použití Socket a IO klíčových slov výjimky, zpracování názvu # vlákna, výchozí pasivní připojení Net :: FTP a odebrání Rake ze stdlib.[50]
Ruby 2.4
Ruby 2.4.0 byl vydán na Štědrý den v roce 2016. Mezi několik významných změn patří:
- Vazba # irb: Spusťte relaci REPL podobně jako binding.pry
- Sjednotit Fixnum a Bignum do Celé číslo třída
- Řetězec podporuje mapování případů Unicode, nejen ASCII
- Nová metoda, Regexp # match ?, což je rychlejší booleovská verze Regexp # match
- Detekce zablokování vlákna nyní zobrazuje vlákna s jejich zpětným chodem a závislostí
Větev 2.4 zahrnuje také vylepšení výkonu pro hashovací tabulku, Array # max, Array # min a přístup k proměnným instance.[51]
Ruby 2.5
Ruby 2.5.0 byl vydán na Štědrý den v roce 2017.[52] Mezi několik významných změn patří:
- zachránit a zajistit příkazy automaticky používají okolní konec blok (menší potřeba navíc začátek-konec bloky)
- Metoda řetězení s výtěžek
- Podpora měření pokrytí větví a metod
- Snadnější transformace hash s Hash # plátek a Hash # transform_keys
Kromě toho přichází spousta vylepšení výkonu, jako je rychlejší předávání bloků (třikrát rychlejší), rychlejší Mutexes, rychlejší šablony ERB a vylepšení některých metod zřetězení.
Ruby 2.6
Ruby 2.6.0 vyšlo na Štědrý den v roce 2018.[53] Mezi několik významných změn patří:
- JIT (experimentální)
- RubyVM :: AbstractSyntaxTree (experimentální)
Ruby 2.7
Ruby 2.7.0 byl vydán na Štědrý den v roce 2019.[54] Mezi několik významných změn patří:
- Porovnávání vzorů (experimentální)
- Zlepšení REPL
- Zhutnění GC
- Oddělení pozičních argumentů a argumentů klíčových slov
Tabulka verzí
Verze | Poslední malinká verze | Počáteční datum vydání | Konec fáze podpory | Konec fáze údržby zabezpečení |
---|---|---|---|---|
1.0 | NA | 1996-12-25[55] | NA | NA |
1.8 | 1.8.7-p375[56] | 2003-08-04[57] | 2012-06[58] | 2014-07-01[59] |
1.9 | 1.9.3-p551[60] | 2007-12-25[61] | 2014-02-23[62] | 2015-02-23[63] |
2.0 | 2.0.0-p648[64] | 2013-02-24[65] | 2015-02-24[64] | 2016-02-24[64] |
2.1 | 2.1.10[66] | 2013-12-25[67] | 2016-03-30[68][69] | 2017-03-31[70][71] |
2.2 | 2.2.10[72] | 2014-12-25[73] | 2017-03-28[74] | 2018-03-31[71] |
2.3 | 2.3.8[75] | 2015-12-25[76] | 2018-06-20[77] | 2019-03-31[77] |
2.4 | 2.4.10[78] | 2016-12-25[79] | 2019-04-01[80] | 2020-04-01[80] |
2.5 | 2.5.8[81] | 2017-12-25[82] | TBA | TBA |
2.6 | 2.6.6[83] | 2018-12-25[84] | TBA | TBA |
2.7 | 2.7.2[85] | 2019-12-25[86] | TBA | TBA |
3.0 | 2020[87][88] | TBA | TBA | |
Legenda: Stará verze Starší verze, stále udržovaná Nejnovější verze Budoucí vydání |
Filozofie
Matsumoto uvedl, že Ruby je navržen pro programátorskou produktivitu a zábavu podle zásad dobrého uživatelské rozhraní design.[89] Na konferenci Google Tech Talk v roce 2008 Matsumoto dále uvedl: „Doufám, že Ruby pomůže každému programátorovi na světě být produktivní, užívat si programování a být šťastný. To je hlavním účelem jazyka Ruby.“[90] Zdůrazňuje, že návrh systémů musí zdůrazňovat lidské, nikoli počítačové potřeby:[91]
Lidé, zejména počítačoví inženýři, se často zaměřují na stroje. Myslí si: "Tímto způsobem bude stroj běžet rychle. Tímto způsobem bude stroj fungovat efektivněji. Tímto způsobem bude stroj něčím něco něčím." Zaměřují se na stroje. Ve skutečnosti se ale musíme zaměřit na lidi, na to, jak se lidé starají o programování nebo ovládání aplikací strojů. Jsme pánové. Jsou to otroci.
Ruby prý následuje zásada nejmenšího úžasu (POLA), což znamená, že jazyk by se měl chovat tak, aby minimalizoval zmatek pro zkušené uživatele. Matsumoto uvedl, že jeho primárním designovým cílem bylo vytvořit jazyk, který sám rád používal, minimalizací práce programátora a možného zmatku. Řekl, že na design Ruby nepoužil princip nejmenšího úžasu,[91] ale přesto se tato fráze začala úzce spojovat s programovacím jazykem Ruby. Samotná fráze byla zdrojem překvapení, protože začínající uživatelé to mohou chápat tak, že Rubyho chování se snaží úzce odpovídat chování známému z jiných jazyků. V diskusi v květnu 2005 o diskusní skupině comp.lang.ruby se Matsumoto pokusil distancovat Ruby od POLA s vysvětlením, že protože jakákoli volba designu bude pro někoho překvapivá, používá při hodnocení překvapení osobní standard. Pokud tato osobní norma zůstane konzistentní, pro ty, kdo znají tuto normu, by bylo několik překvapení.[92]
Matsumoto to definoval takto v rozhovoru:[91]
Každý má své individuální zázemí. Někdo může pocházet z Pythonu, někdo jiný z Perlu a může být překvapen různými aspekty jazyka. Pak za mnou přijdou a řeknou: „Byl jsem překvapen touto vlastností jazyka, takže Ruby porušuje zásadu nejmenšího překvapení.“ Počkejte. Počkejte. Princip nejmenšího překvapení není jen pro vás. Princip nejméně překvapení znamená princip nejméně můj překvapení. A to znamená zásadu nejmenšího překvapení poté, co se Ruby naučíte velmi dobře. Například jsem byl programátor v C ++, než jsem začal navrhovat Ruby. Programoval jsem v C ++ výhradně na dva nebo tři roky. A po dvou letech programování v C ++ mě to stále překvapuje.
Funkce
- Důkladně objektově orientovaný s dědictví, mixiny a metaclasses[93]
- Dynamické psaní a kachní psaní
- Všechno je výraz (dokonce prohlášení ) a vše je provedeno imperativně (dokonce prohlášení )
- Stručná a flexibilní syntaxe[94] který minimalizuje syntaktický šum a slouží jako základ pro jazyky specifické pro doménu[95]
- Dynamický odraz a změna předmětů k usnadnění metaprogramování[96]
- Lexikální uzávěry, iterátory a generátory, s syntaxe bloku[97]
- Doslovný zápis pro pole, hash, regulární výrazy a symboly
- Vkládání kódu do řetězců (interpolace )
- Výchozí argumenty
- Čtyři úrovně variabilního rozsahu (globální, třída, instance, a místní ) označeno sigily nebo jejich nedostatek
- Sběr odpadu
- Pokračování první třídy
- Přísný booleovský donucování pravidla (všechno je skutečný až na
Nepravdivé
anula
) - Zpracování výjimek
- Přetížení obsluhy
- Integrovaná podpora pro racionální čísla, komplexní čísla a aritmetika s libovolnou přesností
- Vlastní chování při odesílání (prostřednictvím
method_missing
akonstantní
) - Rodák vlákna a kooperativní vlákna (vlákna jsou 1,9 /YARV Vlastnosti)
- Podpora pro Unicode a více kódování znaků.
- Rodák zapojit API v C
- Interaktivní Ruby Shell (A REPL )
- Centralizovaná správa balíků prostřednictvím RubyGems
- Implementováno na všech hlavních platformách
- Velká standardní knihovna, včetně modulů pro YAML, JSON, XML, CGI, OpenSSL, HTTP, FTP, RSS, kletby, zlib a Tk[98]
Sémantika
Ruby je objektově orientovaný: každá hodnota je objekt, včetně tříd a instancí typů, které mnoho dalších jazyků označuje jako primitivní (například celá čísla, booleans a "nula "). Proměnné vždy obsahují odkazy na objekty. Každý funkce je metoda a metody jsou vždy volány na objektu. Metody definované v oboru nejvyšší úrovně se stávají metodami třídy Object. Protože tato třída je předkem každé jiné třídy, lze takové metody volat na libovolném objektu. Jsou také viditelné ve všech oborech a účinně slouží jako „globální“ postupy. Ruby podporuje dědictví s dynamické odesílání, mixiny a singletonové metody (patřící k jedné a definované pro jednu instance spíše než definován ve třídě). Ačkoli Ruby nepodporuje vícenásobné dědictví, třídy mohou importovat moduly jako mixiny.
Ruby byla popsána jako programovací jazyk pro více paradigmat: umožňuje procedurální programování (definování funkcí / proměnných mimo třídy je činí součástí kořene, „self“ Object), s orientací na objekt (vše je objekt) nebo Funkcionální programování (má to anonymní funkce, uzávěry, a pokračování; všechny příkazy mají hodnoty a funkce vrátí poslední vyhodnocení). Má podporu pro introspekce, odraz a metaprogramování, stejně jako podpora pro tlumočníka[99] vlákna. Ruby funkce dynamické psaní a podporuje parametrický polymorfismus.
Podle Ruby FAQ je syntaxe podobná Perl a sémantika je podobná Pokec, ale výrazně se liší od Krajta.[100]
Syntax
Syntaxe Ruby je velmi podobná syntaxi Perl a Krajta. Definice tříd a metod jsou signalizovány klíčovými slovy, zatímco bloky kódu lze definovat buď klíčovými slovy, nebo složenými závorkami. Na rozdíl od Perlu nejsou proměnné povinně předponou a sigil. Při použití sigil mění sémantiku rozsahu proměnné. Z praktických důvodů se nerozlišuje výrazy a prohlášení.[101][102] Konce řádků jsou významné a berou se jako konec výpisu; může být ekvivalentně použit středník. Na rozdíl od Pythonu není odsazení významné.
Jedním z rozdílů od Pythonu a Perlu je, že Ruby udržuje všechny své instance proměnných zcela soukromé pro třídu a vystavuje je pouze prostřednictvím přístupových metod (attr_writer
, attr_reader
, atd.). Na rozdíl od metod „getter“ a „setter“ jiných jazyků, jako je C ++ nebo Jáva, přístupové metody v Ruby lze vytvořit pomocí jediného řádku kódu pomocí metaprogramování; přístupové metody však lze také vytvořit tradičním způsobem v C ++ a Javě. Protože vyvolání těchto metod nevyžaduje použití závorek, je triviální změnit proměnnou instance na plnou funkci, aniž byste museli měnit jeden řádek volajícího kódu nebo museli dělat jakékoli refaktorování dosahující podobné funkce jako C# a VB.NET členové majetku.
Deskriptory vlastností Pythonu jsou podobné, ale přicházejí s kompromisem v procesu vývoje. Pokud jeden začíná v Pythonu pomocí veřejně exponované proměnné instance a později změní implementaci tak, aby používala proměnnou soukromé instance vystavenou prostřednictvím deskriptoru vlastnosti, bude pravděpodobně nutné upravit interní kód třídy tak, aby používal soukromou proměnnou místo veřejné vlastnosti . Rubyho design nutí všechny proměnné instance být soukromé, ale také poskytuje jednoduchý způsob deklarace soubor
a dostat
metody. To je v souladu s myšlenkou, že v Ruby člověk nikdy nepřistupuje přímo k interním členům třídy zvenčí třídy; spíše jeden předá zprávu třídě a obdrží odpověď.
Viz Příklady část níže pro ukázky kódu demonstrující syntaxi Ruby.
Interakce
Oficiální distribuce Ruby také obsahuje irb
, interaktivní interpret příkazového řádku, který lze použít k rychlému testování kódu. Následující fragment kódu představuje ukázkovou relaci pomocí irb
:
$ irbirb (hlavní): 001: 0>uvádí 'Ahoj světe'Ahoj světe => nulairb (hlavní): 002: 0>1+2 => 3
Příklady
Následující příklady lze spustit v prostředí Ruby, například Interaktivní Ruby Shell nebo uloženy do souboru a spuštěny z příkazového řádku zadáním rubín <filename>
.
Klasický Ahoj světe příklad:
uvádí 'Ahoj světe!'
Některé základní Ruby kód:
# Všechno, včetně literálu, je objekt, takže to funguje:-199.břišní svaly # => 199„led je pěkný“.délka # => 11"rubín je v pohodě.".index('u') # => 1„Pěkný den, že?“.downcase.rozdělit('').uniq.třídit.připojit se # => "'? acdeinsty"
Vstup:
tisk 'Prosím zadejte jméno>'název = dostane.žvýkatuvádí "Ahoj #{název}."
Převody:
uvádí ‚Dejte mi číslo 'číslo = dostane.žvýkatuvádí číslo.to_ioutput_number = číslo.to_i + 1uvádí output_number.do_s + „je větší číslo.“
Struny
Existuje celá řada způsobů, jak definovat řetězce v Ruby.
Následující úkoly jsou ekvivalentní:
A = "Toto je řetězec s dvojitou uvozovkou"A = % Q {Toto je řetězec s dvojitou uvozovkou}A = %{Toto je řetězec s dvojitou uvozovkou}A = % / Toto je řetězec s dvojitou uvozovkou /A = <<-BLOKToto je řetězec s dvojitou uvozovkouBLOK
Podpora strun variabilní interpolace:
var = 3.14159„pí je #{var}"=> „pi je 3,14159“
Následující úkoly jsou rovnocenné a produkují syrové struny:
A = „Toto je řetězec s jednou uvozovkou“A = % q {Toto je řetězec s jednou uvozovkou}
Sbírky
Konstrukce a používání pole:
A = [1, 'Ahoj', 3.14, 1, 2, [4, 5]]A[2] # => 3.14A.[](2) # => 3.14A.zvrátit # => [[4, 5], 2, 1, 3,14, 'ahoj', 1]A.zploštit.uniq # => [1, 'ahoj', 3,14, 2, 4, 5]
Konstrukce a používání asociativní pole (v Ruby, zvané a hash):
hash = Hash.Nový # ekvivalent hash = {}hash = { :voda => 'mokrý', :oheň => 'horký' } # dělá předchozí řádek nadbytečným, jako jsme nyní # přiřazení hodnoty hash k novému samostatnému objektu hodnoty hashuvádí hash[:oheň] # tisků „horké“hash.každý pár dělat |klíč, hodnota| # nebo: hash.each do | klíč, hodnota | uvádí "#{klíč} je #{hodnota}"konec# returns {: water => "wet",: fire => "hot"} a vytiskne:# voda je mokrá# oheň je horkýhash.vymazat :voda # smaže dvojici: voda => „mokrá“ a vrátí „mokrá“hash.delete_if {|klíč,hodnota| hodnota == 'horký'} # smaže dvojici: fire => 'hot' a vrátí {}
Kontrolní struktury
Pokud prohlášení:
# Vygenerujte náhodné číslo a vytiskněte, zda je sudé nebo liché.-li rand(100).dokonce? uvádí "Je to dokonce"jiný uvádí "Je to divné"konec
Bloky a iterátory
Dvě syntaxe pro vytvoření bloku kódu:
{ uvádí 'Ahoj světe!' } # poznamenejte rovnátka# nebo:dělat uvádí 'Ahoj světe!'konec
Blok kódu lze předat metodě jako volitelný argument bloku. Mnoho vestavěných metod má takové argumenty:
Soubor.otevřeno('file.txt', 'w') dělat |soubor| # 'w' označuje "režim zápisu" soubor.uvádí "Napsal nějaký text."konec # soubor se zde automaticky uzavřeSoubor.readlines('file.txt').každý dělat |čára| uvádí čárakonec# => Napsal nějaký text.
Předávání parametrů bloku za a uzavření:
# V proměnné instance objektu (označené znakem „@“) si zapamatujte blok.def Pamatuj si(&překážka) @blok = překážkakonec# Vyvolejte předchozí metodu a dejte jí blok, který si vezme jméno.Pamatuj si {|název| uvádí "Ahoj, #{název}!"}# Zavolejte uzávěrku (všimněte si, že k tomu nedochází k uzavírání nad volnými proměnnými):@blok.volání(‚Jon ') # => „Ahoj, Jone!“
Vytváření anonymní funkce:
proc {|arg| uvádí arg}Proc.Nový {|arg| uvádí arg}lambda {|arg| uvádí arg}->(arg) {uvádí arg} # představen v Ruby 1.9
Vracející se uzávěry z metody:
def create_set_and_get(počáteční hodnota=0) # poznamenejte si výchozí hodnotu 0 hodnota uzavření = počáteční hodnota [ Proc.Nový {|X| hodnota uzavření = X}, Proc.Nový { hodnota uzavření } ]konecseřizovač, kariérista = create_set_and_get # vrací dvě hodnotyseřizovač.volání(21)kariérista.volání # => 21# Proměnné parametrů lze také použít jako vazbu pro uzavření,# takže předchozí lze přepsat jako:def create_set_and_get(hodnota uzavření=0) [ proc {|X| hodnota uzavření = X } , proc { hodnota uzavření } ]konec
Přenesení toku řízení programu do bloku, který byl poskytnut v době volání:
def use_hello výtěžek "Ahoj"konec# Vyvolejte předchozí metodu a předejte jí blok.use_hello {|tětiva| uvádí tětiva} # => „ahoj“
Iterace nad výčty a poli pomocí bloků:
pole = [1, 'Ahoj', 3.14]pole.každý {|položka| uvádí položka }# tisků:# 1# 'ahoj'# 3.14pole.each_index {|index| uvádí "#{index}: #{pole[index]}" }# tisků:# 0: 1# 1: „ahoj“# 2: 3.14# Následující text používá rozsah (a..b)(3..6).každý {|počet| uvádí počet }# tisků:# 3# 4# 5# 6# Následující text používá rozsah (a ... b)(3...6).každý {|počet| uvádí počet }# tisků:# 3# 4# 5
Metoda, jako je vstříknout
může přijmout parametr i blok. The vstříknout
metoda iteruje nad každým členem seznamu, provádí na něm nějakou funkci při zachování agregátu. To je analogické s složit
funkce v funkční programovací jazyky. Například:
[1,3,5].vstříknout(10) {|součet, živel| součet + živel} # => 19
Při prvním průchodu blok obdrží 10 (argument k vložení) jako součet
a 1 (první prvek pole) jako živel
. To vrátí 11, které se pak stanou součet
při dalším průchodu. Přidá se k 3, aby se získalo 14, které se pak přidá k 5 při třetím průchodu, aby se nakonec vrátilo 19.
Pomocí výčtu a bloku umocníme čísla 1 na 10 (pomocí a rozsah):
(1..10).sbírat {|X| X*X} # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Nebo vyvolat metodu pro každou položku (mapa
je synonymem pro sbírat
):
(1..5).mapa(&: to_f) # => [1.0, 2.0, 3.0, 4.0, 5.0]
Třídy
Následující kód definuje třídu s názvem Osoba
. Navíc inicializovat
, obvyklý konstruktor pro vytváření nových objektů, má dvě metody: jednu pro přepsání <=>
operátor porovnání (tak Pole # seřadit
lze třídit podle věku) a druhý přepsat do_s
metoda (tak Vkládá jádro #
může formátovat jeho výstup). Tady, attr_reader
je příklad metaprogramování v Ruby: attr_accessor
definuje metody getter a setter proměnných instance, ale attr_reader
pouze metody getru. Posledním vyhodnoceným příkazem v metodě je jeho návratová hodnota, která umožňuje vynechání explicitního vrátit se
prohlášení.
třída Osoba attr_reader :název, :stáří def inicializovat(název, stáří) @název, @stáří = název, stáří konec def <=>(osoba) # operátor porovnání pro třídění @stáří <=> osoba.stáří konec def do_s "#{@název} (#{@stáří})" koneckonecskupina = [ Osoba.Nový(„Bob“, 33), Osoba.Nový("Chris", 16), Osoba.Nový("Popel", 23)]uvádí skupina.třídit.zvrátit
Předchozí kód vytiskne tři jména v opačném pořadí podle věku:
Bob (33) Ash (23) Chris (16)
Osoba
je konstanta a je odkazem na a Třída
objekt.
Otevřené třídy
V Ruby nejsou třídy nikdy uzavřeny: metody lze vždy přidat do existující třídy. To platí pro Všechno třídy, včetně standardních předdefinovaných tříd. Vše, co je třeba udělat, je otevřít definici třídy pro existující třídu a nový zadaný obsah bude přidán do existujícího obsahu. Jednoduchý příklad přidání nové metody do standardní knihovny Čas
třída:
# znovu otevřete třídu Ruby's Timetřída Čas def včera já - 86400 koneckonecdnes = Čas.Nyní # => 2013-09-03 16:09:37 +0300včera = dnes.včera # => 2013-09-02 16:09:37 +0300
Přidávání metod k dříve definovaným třídám se často nazývá oprava opic. Pokud je provedeno bezohledně, může praxe vést ke kolizím chování s následnými neočekávanými výsledky a problémům se škálovatelností kódu.
Od verze Ruby 2.0 je možné ji používat upřesnění omezit potenciálně negativní důsledky opičího záplatování omezením rozsahu opravy na konkrétní oblasti kódové základny.
# znovu otevřete třídu Ruby's Timemodul RelativeTimeExtensions vylepšit Čas dělat def half_a_day_ago já - 43200 konec koneckonecmodul MyModule třída Moje třída # Povolit použití upřesnění použitím RelativeTimeExtensions def okno Čas.Nyní.half_a_day_ago konec koneckonec
Výjimky
Výjimka je vyvolána pomocí vyzdvihnout
volání:
vyzdvihnout
K výjimce lze přidat volitelnou zprávu:
vyzdvihnout „Toto je zpráva“
Výjimky může také určit programátor:
vyzdvihnout ArgumentError, „Protiprávní argumenty!“
Alternativně lze instanci výjimky předat vyzdvihnout
metoda:
vyzdvihnout ArgumentError.Nový(„Protiprávní argumenty!“)
Tento poslední konstrukt je užitečný, když vyvoláte instanci vlastní třídy výjimek s konstruktorem, který trvá více než jeden argument:
třída ParseError < Výjimka def inicializovat(vstup, čára, poz) super „Nelze analyzovat“#{vstup}„na řádku #{čára}, pozice #{poz}" koneckonecvyzdvihnout ParseError.Nový("Foo", 3, 9)
Výjimky zpracovává zachránit
doložka. Taková klauzule může zachytit výjimky, které zdědí Standardní chyba
. Další klíčová slova pro řízení toku, která lze použít při zpracování výjimek, jsou jiný
a zajistit
:
začít # dělej něcozachránit # zpracovat výjimkujiný # udělejte to, pokud nebyla vyvolána žádná výjimkazajistit # to bez ohledu na to, zda byla vyvolána výjimkakonec
Je běžnou chybou pokusit se zachytit všechny výjimky pomocí jednoduché záchranné klauzule. Chcete-li zachytit všechny výjimky, musíte napsat:
začít # dělej něcozachránit Výjimka # Kód pro zpracování výjimek zde. # Nepište pouze „záchranný“; který zachytí pouze StandardError, podtřídu výjimky.konec
Nebo zachytit konkrétní výjimky:
začít # dělej něcozachránit Chyba za běhu # zpracovat pouze RuntimeError a jeho podtřídykonec
Je také možné určit, aby byl objekt výjimky zpřístupněn klauzuli obslužné rutiny:
začít # dělej něcozachránit Chyba za běhu => E # zpracování, případně zahrnující e, například „vloží e.to_s“konec
Alternativně je nejnovější výjimka uložena v magickém globálu $!
.
Lze také zachytit několik výjimek:
začít # dělej něcozachránit Chyba za běhu, Časový limit::Chyba => E # manipulace, případně zahrnující ekonec
Metaprogramování
![]() | Tato sekce potřebuje další citace pro ověření.Leden 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Rubínový kód lze programově upravit na adrese runtime, aspekty jeho vlastní struktury, které by byly opraveny v přísnějších jazycích, jako jsou definice tříd a metod. Takhle metaprogramování lze použít k napsání výstižnějšího kódu a efektivnímu rozšíření jazyka.
Například následující kód Ruby generuje nové metody pro vestavěný Tětiva
třídy, na základě seznamu barev. Metody zabalí obsah řetězce tagem HTML stylizovaným příslušnou barvou.
BARVY = { Černá: "000", Červené: "f00", zelená: „0f0“, žlutá: „ff0“, modrý: „00f“, purpurová: "f0f", tyrkysová: „0ff“, bílý: "fff" }třída Tětiva BARVY.každý dělat |barva,kód| definovat_metoda "v_#{barva}" dělat ""barva: ##{kód}">#{já} " konec koneckonec
Vygenerované metody by pak mohly být použity takto:
"Ahoj světe!".v modré => ""barva: # 00f"> Ahoj, svět! "
Aby mohl program implementovat ekvivalent v mnoha dalších jazycích, musel by napsat každou metodu (v černé
, v červené
, in_green
atd.) samostatně.
Některá další možná použití metaprogramování Ruby zahrnují:
- zachycení a úprava volání metody
- implementace nových modelů dědičnosti
- dynamicky generující třídy z parametrů
- automatická serializace objektu
- interaktivní nápověda a ladění
Implementace
Matzův Ruby tlumočník
Původní Ruby tlumočník se často označuje jako Matzův rubínový tlumočník nebo MRI. Tato implementace je napsána v jazyce C a používá vlastní Ruby-specific virtuální stroj.
Standardizovaný a vyřazený Ruby 1.8 implementace byl napsán v C, jako jednoprůchodový tlumočený jazyk.[27]
Počínaje verzí Ruby 1.9 a pokračující verzí Ruby 2.xa výše byl oficiální tlumočník Ruby YARV („Yet Another Ruby VM“) a tato implementace nahradila pomalejší virtuální stroj používaný v předchozích verzích MRI.
Alternativní implementace
Od roku 2018[Aktualizace], existuje celá řada alternativních implementací Ruby, včetně JRuby, Rubinius, a mruby. Každý má jiný přístup, JRuby a Rubinius poskytují just-in-time kompilace a také mruby předběžná kompilace.
Ruby má tři hlavní alternativní implementace:
- JRuby, smíšený Jáva a implementace Ruby, která běží na Windows Virtuální stroj Java. JRuby aktuálně cílí na Ruby 2.5.
- TruffleRuby, implementace Java pomocí rámce implementace jazyka Truffle s GraalVM
- Rubinius, a C ++ virtuální stroj bytecode, který používá LLVM zkompilovat do strojového kódu za běhu. Překladač bytecode a většina základních tříd jsou psány čistě Ruby. Rubinius v současné době cílí na Ruby 2.3.1.
Mezi další implementace Ruby patří:
- MagLev, a Pokec implementace, která běží dál Systémy GemTalk ' GemStone / S VM
- mruby, implementace navržená k zabudování do kódu C, v podobném duchu jako Lua. V současné době jej vyvíjí společnost Yukihiro Matsumoto a další
- RGSS nebo Ruby Game Scripting System, a proprietární implementace, kterou používá RPG Maker série softwaru pro herní design a úpravy enginu RPG Maker
- A transportér (částečné) z Ruby do Julie, julializátor je k dispozici. Může být použit pro velké zrychlení např. Ruby nebo JRuby implementace (mohou být užitečné pouze pro číselný kód).[103]
- Topas, implementace Ruby napsaná v Krajta
- Opál, webový tlumočník, do kterého Ruby kompiluje JavaScript
Jiné nyní zaniklé implementace Ruby byly:
- MacRuby, a Mac OS X implementace na Cíl-C runtime. Jeho protějšek iOS se nazývá RubyMotion
- IronRuby implementace na .NET Framework
- Kardinál, implementace pro Virtuální stroj papouška
- Ruby Enterprise Edition, často zkráceno na Ree, implementace optimalizovaná pro zpracování ve velkém měřítku Ruby on Rails projekty
- HotRuby, a JavaScript a ActionScript provádění Programovací jazyk Ruby
Zralost implementací Ruby má tendenci být měřena podle jejich schopnosti spouštět Ruby on Rails (Rails) framework, protože jeho implementace je složitá a využívá mnoho funkcí specifických pro Ruby. Bod, kdy konkrétní implementace dosáhne tohoto cíle, se nazývá „singularita Rails“. Referenční implementace, JRuby a Rubinius[104] jsou všichni schopni provozovat Rails beze změny ve výrobním prostředí.
Podpora platformy
Matsumoto původně vyvíjel Ruby na 4,3BSD -na základě Sony NEWS-OS 3.x, ale později migroval svou práci do SunOS 4.xa nakonec Linux.[105][106]
V roce 1999 bylo známo, že Ruby pracuje v mnoha různých oblastech operační systémy, včetně NEWS-OS, SunOS, AIX, SVR4, Solaris, NEC UP-UX, Další krok, BSD, Linux, Operační Systém Mac, DOS, Okna, a BeOS.[107]
Moderní verze a implementace Ruby jsou k dispozici na mnoha operačních systémech, jako jsou Linux, BSD, Solaris, AIX, Operační Systém Mac, Okna, Windows Phone,[108] Windows CE, Symbian OS, BeOS a IBM i.
Programovací jazyk Ruby je podporován napříč celou řadou cloudových hostingových platforem Jelastic, Heroku, Google Cloud Platform a další.
Úložiště a knihovny
RubyGems je správce balíčků Ruby. Balíček Ruby se nazývá „klenot“ a lze jej snadno nainstalovat pomocí příkazového řádku. Většina drahokamů jsou knihovny, i když existuje několik aplikací, jako jsou IDE.[109] Hostuje více než 10 000 drahokamů Ruby RubyGems.org.
Mnoho nových i stávajících knihoven Ruby je hostováno na GitHub, služba, která nabízí ovládání verze hosting úložiště pro Git.
Archiv aplikací Ruby, který hostoval aplikace, dokumentaci a knihovny pro programování Ruby, byl udržován až do roku 2013, kdy byla jeho funkce přenesena do RubyGems.[110]
Viz také
- Porovnání programovacích jazyků
- Projekt Metasploit - největší projekt Ruby na světě s více než 700 000 řádky kódu
- Proč je (uštěpačný) průvodce Ruby - online učebnice Ruby ve formátu grafického románu
- XRuby - statický překladač Ruby to Java
- Krystal - programovací jazyk inspirovaný Ruby
Reference
- ^ „Ruby 2.7.2 Vydáno“. Programovací jazyk Ruby. 2. října 2020. Citováno 2. října 2020.
- ^ „[ruby] Obsah / kufru / KOPÍROVÁNÍ“. Citováno 2. května 2015.
- ^ „[ruby] Obsah / kufru / GPL“. Citováno 2. května 2015.
- ^ „[ruby] Obsah / kufru / BSDL“. Citováno 2. května 2015.
- ^ A b C Cooper, Peter (2009). Beginning Ruby: From Novice to Professional. Počínaje od nováčka po profesionála (2. vydání). Berkeley: APress. p. 101. ISBN 1-4302-2363-4.
V menší míře ovlivnily Ruby také Python, LISP, Eiffel, Ada a C ++.
- ^ "Confreaks TV | Důvody za Ruby - Ruby Conference 2008". confreaks.tv. Citováno 2019-06-25.
- ^ A b C d E F Bini, Ola (2007). Praktické projekty JRuby on Rails Web 2.0: Přináší Ruby on Rails do Javy. Berkeley: APress. p.3. ISBN 1-59059-881-4.
Čerpá primárně na funkcích Perl, Smalltalk, Python, Lisp, Dylan a CLU.
- ^ Bini, Ola. "Joke". Ioke.org. Archivovány od originál dne 21. 7. 2011. Citováno 2011-07-21.
inspirovaný Io, Smalltalk, Lisp a Ruby
- ^ „Dokumentace Julia 1.0: Úvod“. Citováno 6. října 2018.
- ^ Burks, Tim. „About Nu ™“. Programování Nu ™. Neon Design Technology, Inc.. Citováno 2011-07-21.
- ^ Ring Team (3. prosince 2017). „Ring and other languages“. ring-lang.net. ring-lang.
- ^ "The Rust Reference". Citováno 16. listopadu 2019.
- ^ Lattner, Chris (06.06.2014). „Domovská stránka Chrisa Lattnera“. Chris Lattner. Citováno 2014-06-03.
Jazyk Swift je výsledkem neúnavného úsilí týmu jazykových odborníků, guru dokumentace, ninjů pro optimalizaci kompilátoru a neuvěřitelně důležité interní skupiny pro interní testování, kteří poskytli zpětnou vazbu, která pomohla vylepšit a vyzkoušet nápady. Samozřejmě také velmi těžilo ze zkušeností, které těžko získaly mnoho dalších jazyků v oboru, čerpání nápadů z Objective-C, Rust, Haskell, Ruby, Python, C #, CLU a příliš mnoho dalších na seznam.
- ^ „About Ruby“. Citováno 15. února 2020.
- ^ "Confreaks TV | Důvody za Ruby - Ruby Conference 2008". confreaks.tv. Citováno 2019-06-25.
- ^ Shugo Maeda (17. prosince 2002). „Ruby Language FAQ“. Citováno 2. března 2014.
- ^ Matsumoto, Yukihiro (13. února 2006). "Re: Ruby's lisp features". Citováno 15. února 2020.
- ^ A b C d E F "Historie Ruby".
- ^ „[FYI: historical] The rozhodující okamžik názvu jazyka Ruby. (Re: [ANN] ruby 1.8.1)“ (E-mail od Hiroshi Sugihary do ruby-talk).
- ^ „Nejčastější dotazy k jazyku Ruby - 1.3 Proč název„ Ruby “?“. Ruby-Doc.org. Citováno 10. dubna 2012.
- ^ Yukihiro Matsumoto (11. června 1999). „Re: jméno Ruby?“. Ruby-Talk (Poštovní seznam). Citováno 10. dubna 2012.
- ^ „Další archeolingvistika: odkrývání proto-Ruby“. Archivovány od originál dne 6. listopadu 2015. Citováno 2. května 2015.
- ^ „[ruby-talk: 00382] Re: historie ruby“. Citováno 2. května 2015.
- ^ „[ruby-list: 124] TUTORIAL - funkce ruby“. Citováno 2. května 2015.
- ^ „Rozhovor se Stvořitelem Ruby“.
- ^ Yukihiro Matsumoto (říjen 2000). „Programování Ruby: Forward“. Citováno 5. března 2014.
- ^ A b „Odcházíme do důchodu Ruby 1.8.7“. Citováno 2. května 2015.
- ^ „IPA 独立 行政 法人 情報 処理 推進 機構 : プ レ ス 発 表 プ ロ グ ラ ム 言語 Ruby の JIS 規格 (JIS X 3017) 制定 に つ い て“. Citováno 2. května 2015.
- ^ „IPA 独立 行政 法人 情報 処理 推進 機構 : プ レ ス 発 表 プ ロ グ ラ ム 言語 Ruby 、 国際 規格 と し て 承認“. Citováno 2. května 2015.
- ^ „ISO / IEC 30170: 2012“. Citováno 2017-03-10.
- ^ Vývoj webu: Ruby on Rails. Devarticles.com (2007-03-22). Citováno 2013-07-17.
- ^ „Je vydán Ruby 1.9.3 p0“. ruby-lang.org. 31. října 2011. Citováno 20. února 2013.
- ^ „v1_9_3_0 / NOVINKY“. Rubín Podvracení zdrojové úložiště. ruby-lang.org. 17. září 2011. Citováno 20. února 2013.
- ^ Ruby 1.9: Co očekávat. slideshow.rubyforge.org. Citováno 2013-07-17.
- ^ „Podpora pro Ruby 1.9.3 skončila“. Citováno 2. května 2015.
- ^ Endoh, Yusuke. (2013-02-24) Vychází Ruby 2.0.0-p0. Ruby-lang.org. Citováno 2013-07-17.
- ^ Endoh, Yusuke. (2013-02-24) Vychází Ruby 2.0.0-p0. Ruby-lang.org. Citováno 2013-07-17.
- ^ USA (2016-02-24). „Plány podpory pro Ruby 2.0.0 a Ruby 2.1“. Ruby-lang.org. Citováno 2017-04-18.
- ^ „Je vydán Ruby 2.1.0“. 25. prosince 2013. Citováno 26. prosince 2013.
- ^ "Semantic Versioning starting with Ruby 2.1.0". 21. prosince 2013. Citováno 27. prosince 2013.
- ^ "Support for Ruby 2.1 has ended". Citováno 4. dubna 2017.
- ^ "Ruby 2.2.0 Released". December 25, 2014. Citováno 4. ledna 2015.
- ^ "ruby/NEWS at v2_2_0 · ruby/ruby · GitHub". GitHub. Citováno 2. května 2015.
- ^ "Support of Ruby 2.2 has ended". Citováno 29. prosince 2019.
- ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "Ruby 2.2.1 Released". Citováno 12. července 2016.CS1 maint: více jmen: seznam autorů (odkaz)
- ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "v2.2.1 ChangeLog". Citováno 12. července 2016.CS1 maint: více jmen: seznam autorů (odkaz)
- ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying non volatile registers for increase performance in ppc64". Citováno 12. července 2016.CS1 maint: více jmen: seznam autorů (odkaz)
- ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying MACRO for increase performance in ppc64". Citováno 12. července 2016.CS1 maint: více jmen: seznam autorů (odkaz)
- ^ "Ruby 2.3.0 changes and features - Running with Ruby". dev.mensfeld.pl.
- ^ "Ruby/NEWS at v.2_3_0 - ruby/ruby - Github". GitHub. Citováno 25. prosince 2015.
- ^ "Ruby 2.4.0 Released". www.ruby-lang.org. Citováno 2016-12-30.
- ^ "Ruby 2.5.0 Released". Citováno 2018-05-02.
- ^ "Ruby 2.6.0 Released". Ruby Programming Language. 2018-12-25. Citováno 2018-12-25.
- ^ "Ruby 2.7.0 Released". Ruby Programming Language. 2019-12-25. Citováno 2019-12-25.
- ^ "The Ruby Community's Christmas Releases". www.rubyinside.com.
- ^ "A Patch in Time: Securing Ruby".
- ^ "ruby-1.8.0 released!". www.ruby-lang.org.
- ^ "Plans for 1.8.7". www.ruby-lang.org.
- ^ "EOL for Ruby 1.8.7 and 1.9.2". www.ruby-lang.org.
- ^ "Ruby 1.9.3-p551 Released". www.ruby-lang.org.
- ^ "Ruby 1.9.0 Released". www.ruby-lang.org.
- ^ "Support for Ruby version 1.9.3 will end on February 23, 2015". www.ruby-lang.org.
- ^ "Support for Ruby 1.9.3 has ended". www.ruby-lang.org.
- ^ A b C "Ruby 2.0.0-p648 Released". www.ruby-lang.org.
- ^ "Ruby 2.0.0-p0 is released". www.ruby-lang.org.
- ^ "Ruby 2.1.10 Released". www.ruby-lang.org.
- ^ "Ruby 2.1.0 is released". www.ruby-lang.org.
- ^ "Support plans for Ruby 2.0.0 and Ruby 2.1". www.ruby-lang.org.
- ^ "Ruby 2.1.9 Released". www.ruby-lang.org.
- ^ "ReleaseEngineering - Ruby - Ruby Issue Tracking System". bugs.ruby-lang.org.
- ^ A b "Support of Ruby 2.1 has ended". www.ruby-lang.org.
- ^ "Ruby 2.2.10 Released". www.ruby-lang.org.
- ^ "Ruby 2.2.0 Released". www.ruby-lang.org.
- ^ "Ruby 2.2.7 Released". www.ruby-lang.org.
- ^ "Ruby 2.3.8 Released". www.ruby-lang.org.
- ^ "Ruby 2.3.0 Released". www.ruby-lang.org.
- ^ A b "Support of Ruby 2.2 has ended". www.ruby-lang.org.
- ^ "Ruby 2.4.10 Released". Ruby Programming Language. 2020-03-31. Citováno 2020-04-01.
- ^ "Ruby 2.4.0 Released". www.ruby-lang.org.
- ^ A b "Support of Ruby 2.4 has ended". www.ruby-lang.org.
- ^ "Ruby 2.5.8 Released". Ruby Programming Language. 2020-03-31. Citováno 2020-04-01.
- ^ "Ruby 2.5.0 Released". www.ruby-lang.org.
- ^ "Ruby 2.6.6 Released". Ruby Programming Language. 2020-03-31. Citováno 2020-04-01.
- ^ "Ruby 2.6.0 Released". www.ruby-lang.org.
- ^ "Ruby 2.7.2 Released". Ruby Programming Language. 2020-10-02. Citováno 2020-10-02.
- ^ "Ruby 2.7.0 Released". www.ruby-lang.org.
- ^ "Ruby 3x3: Matz, Koichi, and Tenderlove on the future of Ruby Performance".
- ^ "What's coming in Ruby 3 and Rails 5 - Mangrove". www.mangrove.com.
- ^ "The Ruby Programming Language". Citováno 2. května 2015.
- ^ Google Tech Talks – Ruby 1.9 na Youtube
- ^ A b C Bill Venners. "The Philosophy of Ruby". Citováno 2. května 2015.
- ^ "Welcome to RUBYWEEKLYNEWS.ORG". 4 July 2017. Archived from the original on 4 July 2017.CS1 maint: BOT: stav původní adresy URL neznámý (odkaz)
- ^ Bruce Stewart (29 November 2001). "An Interview with the Creator of Ruby - O'Reilly Media". Citováno 2. května 2015.
- ^ Bill Venners. "Dynamic Productivity with Ruby". Citováno 2. května 2015.
- ^ "Language Workbenches: The Killer-App for Domain Specific Languages?". martinfowler.com. Citováno 2. května 2015.
- ^ "Ruby – Add class methods at runtime".
- ^ Bill Venners. "Blocks and Closures in Ruby". Citováno 2. května 2015.
- ^ Britt, James. "Ruby 2.0.0 Standard Library Documentation". Citováno 2013-12-09.
- ^ Green threads
- ^ "The Ruby Language FAQ: How Does Ruby Stack Up Against...?". Citováno 2. května 2015.
- ^ "[ruby-talk:01120] Re: The value of while..."
In Ruby's syntax, statement is just a special case of an expression that cannot appear as an argument (e.g. multiple assignment).
- ^ "[ruby-talk:02460] Re: Precedence question".
statement [...] can not be part of expression unless grouped within parentheses.
- ^ "GitHub - remove/virtual_module: Born to make your Ruby Code more than 3x faster. Hopefully".
- ^ Peter Cooper (2010-05-18). "The Why, What, and How of Rubinius 1.0's Release".
- ^ Maya Stodte (February 2000). "IBM developerWorks – Ruby: a new language". Archivovány od originál 18. srpna 2000. Citováno 3. března 2014.
- ^ Yukihiro Matsumoto (August 2002). "lang-ruby-general: Re: question about Ruby initial development". Citováno 3. března 2014.
- ^ Yukihiro Matsumoto (5 January 1999). "ruby-talk: Re: hah, check these errors". Citováno 3. března 2014.
- ^ "Iron Ruby on Windows Phone 7".
- ^ "The Ruby Toolbox". Citováno 2015-04-04.
- ^ "We retire raa.ruby-lang.org". 2013-08-08. Citováno 2016-01-03.
Další čtení
- Black, David; Leo, Joseph (March 15, 2019), The Well-Grounded Rubyist (Third ed.), Manning Publications, str. 584, ISBN 978-1617295218
- Metz, Sandi (August 22, 2018), Practical Object-Oriented Design: An Agile Primer Using Ruby (Druhé vydání), Addison-Wesley Professional, str. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (July 12, 2016), Beginning Ruby: From Novice to Professional (Third ed.), Apress, str. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (April 3, 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (Druhé vydání), O'Reilly Media, str. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (March 2, 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Third ed.), Addison-Wesley Professional, str. 816, ISBN 978-0-321-71463-3
- Thomas, Dave; Fowler, Chad; Hunt, Andy (July 7, 2013), Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (Fourth ed.), Pragmatická knihovna, str. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (March 28, 2009), Ruby in Practice (První vydání), Manning Publications, str. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (January 25, 2008), The Ruby Programming Language (První vydání), O'Reilly Media, str.446, ISBN 0-596-51617-7
- Baird, Kevin (June 8, 2007), Ruby by Example: Concepts and Code (První vydání), Žádný lis na škrob, str. 326, ISBN 978-1593271480
- Fitzgerald, Michael (May 14, 2007), Learning Ruby (První vydání), O'Reilly Media, str.255, ISBN 978-0-596-52986-4
externí odkazy
- Oficiální webové stránky
- Ruby documentation
- Rubín na Curlie
- Madhadron.com A critical analysis of Ruby