rubin | |
---|---|
Nyelvóra | objektum-orientált programozási nyelv |
Megjelent | 1995 [2] |
Szerző | Matsumoto, Yukihiro |
Fájlkiterjesztés _ | .rbvagy.rbw |
Kiadás |
|
Típusrendszer | szigorú , dinamikus ( kacsa ) |
Főbb megvalósítások | Ruby MRI , JRuby , Rubinius |
Befolyásolva | Ada , Dylan , Perl [3] , Python [3] , Smalltalk , C++ , Clu , Eiffel , Lisp , Basic , Lua és Emacs [4] |
befolyásolta | Raku , Groovy |
Engedély | Ruby licenc [d] ,GNU GPL 2[5]ésBSD 2-clause licenc [6] |
Weboldal | ruby-lang.org _ |
OS | Microsoft Windows [7] , GNU/Linux [7] , BSD [7] és macOS [7] |
Médiafájlok a Wikimedia Commons oldalon |
A Ruby ( angolul ruby - ruby , ejtsd: ['ru:bɪ] - ruby ) egy dinamikus , reflektív , értelmezett magas szintű programozási nyelv [8] [9] . A nyelv rendelkezik egy operációs rendszertől független multithreading megvalósítással , erős dinamikus gépeléssel , szemétgyűjtővel és sok más szolgáltatással . Szintaxis jellemzőit tekintve közel áll a Perlhez és az Eiffelhez , az objektum-orientált megközelítésben pedig a Smalltalk -hoz . A nyelv néhány jellemzője a Python , Lisp , Dylan és Clu nyelvekből származik .
A nyelvi tolmács platformok közötti megvalósítása teljesen ingyenes [10] .
A Ruby megalkotója, Yukihiro Matsumoto (Matz) még diákként érdeklődött a programozási nyelvek iránt, de később jött az ötlet egy új nyelv fejlesztésére. A Ruby 1993. február 23-án kezdte meg a fejlesztést, és 1995-ben indult.
A nevet a Perl nyelv ihlette, amelynek szintaxisát és szemantikáját a Ruby: angol nyelvből kölcsönözték. gyöngy - "gyöngy", rubin - "rubin".
A Ruby fejlesztéséhez Matsumoto egyik ihletője a Babylon 17 című tudományos-fantasztikus regény volt , amely a Sapir-Whorf hipotézisen alapul [11] .
A tervezési cél egy "igazi objektum-orientált ", könnyen fejleszthető, értelmezhető programozási nyelv létrehozása volt . A szerző leveléből [12] :
Ruby 1993. február 24-én született. Aznap beszélgettem egy kollégámmal egy objektum-orientált szkriptnyelv lehetőségéről . Ismertem a Perl-t (Perl4, nem Perl5), de nem szerettem – volt benne egy kis játéknyelv (és még mindig van). Egy objektumorientált értelmezett nyelv pedig ígéretesnek tűnt. Akkoriban ismertem a Pythont. De nem szerettem, mert nem tartottam igazi objektum-orientált nyelvnek. OO tulajdonságai a nyelv kiegészítőjének tűntek. Nyelvmániásként és tizenöt éves objektum-orientált programozási őrültként nagyon-nagyon szerettem volna egy igazán objektum-orientált, könnyen használható nyelvet. Próbáltam ilyen nyelvet találni, de nem volt.
Aztán úgy döntöttem, hogy létrehozom. Több hónap telt el, mire a tolmács elkezdett dolgozni. Amit akartam, hozzáadtam a nyelvemhez - iterátorok , kivételkezelés , automatikus szemétgyűjtés. Ezután újrafaktoráltam a Perl tulajdonságait, és osztálykönyvtárként implementáltam . 1995 decemberében kiadtam a Ruby 0.95-öt japán hírcsoportoknak. Azóta vannak weboldalak, levelezőlisták. Heves viták folynak a levelezőlistákon. A legrégebbi lista jelenleg 14 789 betűt tartalmaz.
Japánban a Ruby 1995-ös első nyilvános kiadása óta népszerűvé vált, de a csak japánok számára készült dokumentáció hátráltatta a további elfogadását. Csak 1997-ben jelent meg a Ruby leírása angolul, és 1998-ban megnyílt a ruby-talk fórum. Ezzel kezdetét vette a nyelv előtérbe kerülése a világ többi részén. A 2000-es évek elején számos könyv jelent meg angolul, ami hozzájárult a Ruby növekvő népszerűségéhez Nyugat-Európában és Amerikában. 2003-ban megjelent a Ruby 1.8.0, 2005-ben pedig megjelent a Ruby on Rails webes keretrendszer , amely Ruby nyelven íródott, és azonnal elismertté vált, mivel egyszerű a tipikus webalkalmazások ráépítése. A Ruby nem csak magának a keretrendszernek a megvalósítási nyelve, hanem a megoldások leírásának nyelve is (különösen a beágyazott Ruby kóddal rendelkező HTML-sablonokat használják).
Abban az időben a Ruby általában és a Ruby on Rails fő problémája a teljesítmény volt: az eredeti tolmács elvesztette sebességét a versengő nyelvekkel és az alternatív megvalósításokkal szemben, és az alkalmazások méretezhetőségét korlátozta a magas memóriaigény. A nyelvfejlesztés a 2000-es évek második felében két ágra oszlott: az 1.8.* vonal támogatásával egyidejűleg megkezdődött az 1.9.* kísérleti ág fejlesztése, melyben a nyelv szerzője eltávolodott a a korábbi verziókkal való kompatibilitás fenntartásának alapelvei, és jelentős változtatásokat hajtott végre a Ruby 2.0 kiadásának előkészítése során. Ennek eredményeként a Ruby 1.9.1 2009-es és a Rails 3.0 2010-es megjelenésével a helyzet jelentősen megváltozott: az eredeti interpreter sebessége többszörösére nőtt, és szinte egyenrangú a .NET és JVM alternatív megvalósításaival. , a nyelvi módosítások megszüntettek néhány gyakran kritizált pontot. A Ruby iránti érdeklődés több mint háromszorosára nőtt 2009 és 2012 között a TIOBE és az indeed.com szerint. Oroszországban 2011-ben jelentek meg a Rubinról szóló könyvek orosz fordításainak első hivatalos kiadásai, és azóta is rendszeresen megjelentek, ami az oroszul beszélő szakemberek nyelv iránti növekvő érdeklődésének bizonyítéka.
A Ruby 2.0 stabil verziója 2013 februárjában jelent meg. 2014. február 24-én lesz 21 éve a Ruby programozási nyelv bejelentése. A fejlesztők úgy döntöttek, hogy egy ilyen eseményt a Ruby 2.1 patch kiadásával jelölnek meg, amelyet Ruby 2.1.1-nek neveztek el [13] . 2018 végén megjelent a Ruby 2.6, amely a JIT összeállítást valósította meg .
Most a Ruby a legtöbb Linux - disztribúcióban megtalálható, a Mac OS X-hez tartozik, és más operációs rendszerek felhasználói számára is elérhető . A Rubyhoz kapcsolódó egyik fő alkalmazás továbbra is a Ruby on Rails, amelyet továbbra is aktívan fejlesztenek, de a Ruby használata sokkal szélesebb - számos alkalmazást fejlesztenek rajta különféle célokra, emellett használják. mint szkriptnyelv az alkalmazások automatizálására és testreszabására, valamint adminisztrációs segédprogramok írására, különösen a Linux operációs rendszerben.
Matsumoto , az objektumorientált programozás rajongója, a Perlnél erősebb és a Pythonnál objektumorientáltabb nyelvről álmodott. A Ruby fő célja, hogy egyszerű és egyben érthető programokat hozzon létre olyan problémák megoldására, amelyekben a fejlesztési idő, az érthetőség és az egyszerűség fontosabb, mint a gyorsaság.
A Ruby tervezés és programozás alapelveit néha Ruby Way -nek is nevezik . Általában a "Ruby út"-nak nincs pontos megfogalmazása, néha kritikára használják a kifejezést. [14] Viszonylag sűrített formában a rendelkezéseit Hal Fulton "Programming in Ruby" [15] és Hal Fulton és André Arce "The Ruby Way" [16] című könyvei mutatják be .
A nyelv az embereké, nem a számítógépeké. A program fejlesztése során a programozó kényelme és munkaerőköltségének minimalizálása a prioritás, megszabadítva a programozót a rutinmunkától, amit a számítógép gyorsabban és jobban tud végrehajtani. Kiemelt figyelmet fordítanak a mindennapi rutintevékenységekre (szövegszerkesztés, adminisztráció), és ezekhez kifejezetten jól van beállítva a nyelv. A gyorsabban működő géporientált nyelvekkel ellentétben a Ruby az emberhez legközelebb álló nyelv. Bármilyen számítógéppel végzett munkát emberek és emberekért végeznek, és mindenekelőtt az emberek ráfordított erőfeszítéseiről kell gondoskodni. Egyszerű, de nem túl egyszerű. Az egyszerűsítés áldás, de nem léphet át bizonyos határokat, amelyeken túl öncélúvá válik, és árt a végeredménynek. A legkisebb meglepetés elve A programnak úgy kell viselkednie, ahogy a programozó elvárja . De a Ruby kapcsán ez jelenti a legkisebb meglepetést, nem a nyelv megismerésekor, hanem alapos tanulmányozása során. Matsumoto maga állítja, hogy a tervezés célja az volt, hogy minimálisra csökkentse a meglepetéseket, amikor neki programoz , de a nyelv elterjedése után meglepődve értesült, hogy a programozók gondolkodása hasonló, és sokuknál a „legkisebb meglepetés” elve egybeesett. elvével. Az ortogonalitás fontos, de a természetesség fontosabb. A redundancia elfogadható, ha kényelmes. Ruby örökölte a Perl programozási nyelv filozófiáját, mivel lehetőséget adott a programozónak, hogy többféleképpen is elérje ugyanazt az eredményt. Az emberek különbözőek, és a szabadsághoz szükségük van a választás lehetőségére. "Szívesebben kínálok sok utat, ha lehetséges, de bátorítom vagy irányítom a felhasználókat, hogy ha lehetséges, válasszák a legjobb utat" [17] . Ne légy a teljesítmény rabszolgája. Ha egy adott esetben elfogadhatatlanul alacsony a teljesítmény, akkor ez korrekciót igényel, és ha előre ismert, hogy ez jelentős lesz, akkor először ennek figyelembevételével kell megtervezni a programot. De előnyben kell részesíteni a hatékonyság eleganciáját olyan esetekben, amikor a hatékonyság nem túl kritikus. Ne féljen a futás közbeni változásoktól. A dinamikus eszközök jelenléte a nyelvben a program futás közbeni önmódosításáig olyan szolgáltatásokat nyújt, amelyek nagyon hasznosak a hatékony programozáshoz. A teljesítmény sláger, amelyre el kell menni értük, a legtöbb esetben teljesen elfogadható. Kövesse az egyszerű és szigorú szabályokat, de ne érje el a pedánsságot. "Amit Rubyban látunk, az nem a "pedáns következetesség", hanem egy sor egyszerű szabály szigorú betartása." Szabályokra és konvenciókra (különösen a nyelven elfogadott elnevezési konvenciókra) azért van szükség, hogy a program könnyebben érthető legyen. Ha a szabálytól való eltérés egy adott esetben logikus és érthető, akkor indokolt. – Nem kell megküzdened vele. A Ruby az, aminek tervezték. Egy programozó ne várja el Rubytól, hogy úgy viselkedjen, mint egy másik nyelv, amelyhez hozzászokott. A programozó követheti saját elképzeléseit és szokásait, amelyeket más nyelvek befolyásolnak (lásd "A legkisebb meglepetés elve" ), de ha az elvárások tévesnek bizonyulnak, ezt egyszerűen el kell fogadni és használni.A Ruby egy teljesen objektum-orientált nyelv. Ebben minden adat objektum , ellentétben sok más nyelvvel, ahol primitív típusok léteznek . Minden függvény egy módszer .
A Rubyban minden konstrukció értéket ad vissza. Például:
# A feltételes operátor a kiválasztott elágazások értékét adja vissza ( ha 5 > 3 , akkor " Egy " vagy " Egyéb " végeA Ruby hívásonkénti megosztást használ , bár a Ruby közösségben gyakran mondják, hogy hívásonkénti hivatkozást használ . A gyakori hibrid programozási nyelvekhez szokott programozó számára egy ilyen döntés bizonyos hatásai váratlannak tűnhetnek. Például:
a = "abcdefg" # => "abcdefg" - az a változó egy új karakterláncra inicializálódik. b = a # => "abcdefg" - a b változó ugyanarra a karakterláncra kap hivatkozást. a [ 3 ] = 'R' # => "abcRefg" - az a-hoz rendelt karakterlánc megváltozik. b # => "abcRefg" - egy implicit módon megváltozott b módosítása is, mivel EGY objektumra hivatkoznak. # Mindazonáltal: x = 10 # => 10 - az x változót a 10-es szám inicializálja. y = x # => 10 - az y változó ugyanarra az értékre kap hivatkozást. x += 5 # => 15 - a += művelet létrehoz egy ÚJ egész értéket 15, amelyet x-be írunk, y # => 10, így az x változása nem tükröződik y-banA hozzárendelési mechanizmus minden objektumnál ugyanúgy működik, ellentétben az olyan nyelvekkel, mint az Object Pascal , ahol a hozzárendelés jelentheti vagy egy érték másolását vagy egy értékre való hivatkozás másolását.
A Ruby nem támogatja a többszörös öröklődést , hanem egy erőteljes keverési mechanizmussal rendelkezik . Minden osztály (közvetlenül vagy más osztályokon keresztül) az osztályból származik Object, ezért bármely objektum használhatja a benne meghatározott metódusokat (például , class, to_s) nil?. Az eljárási stílus is támogatott, de minden globális eljárás implicit módon a Object.
A Ruby egy többparadigmás nyelv : támogatja a procedurális stílust (az osztályokon kívüli függvények és változók meghatározása), az objektumorientált (minden egy objektum), a funkcionális stílust ( névtelen függvények , lezárások , érték visszaadása minden utasítással, függvény visszaadása az utolsó számított érték). Támogatja a tükrözést , a metaprogramozást , a futásidejű változó típusú információkat (lásd a dinamikus adattípus azonosítást ).
A soros megjegyzések karakterrel kezdődnek #. A többsoros megjegyzések is támogatottak:
x = 10 # Egy sor megjegyzés #-vel kezdődik és az aktuális sor végéig tart =begin A =begin és =end között minden megjegyzés megjegyzés. Az ilyen megjegyzés határolóit a sor elejétől kell írni. =végeA Ruby nyelv megkülönbözteti a kis- és nagybetűket, a kis- és nagybetűk az azonosítókban eltérőek. Két kivétellel minden nyelvi kulcsszót kisbetűvel írjuk.
A 2.0-s verzió előtt a nyelv sok 7 bites ASCII karaktert használt . Mivel a 2.0 Unicode verzió támogatott , a forráskódfájlok alapértelmezés szerint UTF-8 kódolást használnak . Minden alfabetikus Unicode karakter használható az azonosítókban az angol betűkkel egyenrangúan. A Unicode karakterláncok teljes mértékben támogatottak.
Ruby kulcsszavak listája:
alias és BEGIN begin break case class def meghatározva? do else elsif END end biztos hamis for if modul next nil nem vagy újra mentés újrapróbálkozás return self szuper akkor igaz undef hacsak amíg amíg míg hozam _Az azonosítóknak hagyományosan betűkből, számokból és aláhúzásjelekből kell állniuk, és betűvel vagy aláhúzásjellel kell kezdődniük. Ruby az elnevezési konvenciót használja:
A névelőtagokat az azonosító hatókörének meghatározására is használják:
A metódusnevek utótagokat használnak a metódus céljának jelzésére:
A Ruby a „minden egy objektum” ideológiát valósítja meg, vagyis minden adategység objektum – egy bizonyos osztály példánya, amelyre az objektumokkal való munkára tervezett összes szintaktikai eszköz alkalmazható. Ebben az értelemben a nyelv nem tartalmaz beépített primitív adattípusokat. Hagyományosan ezek az értelmező és a rendszerkönyvtár által biztosított típusoknak tekinthetők, amelyeket a leggyakrabban használnak, és nem igényelnek külön az osztálynév feltüntetését a használathoz.
Egész számok. Típusok Fixnumés Bignum. Az első típust a 2 30 -at abszolút értékben nem meghaladó számokra használjuk , a második típust a 2 30 - nál nagyobb számokra . Az aritmetikai műveletekben ezek a numerikus típusok teljesen kompatibilisek és szabadon együtt használhatók, transzparens konverzió biztosított közöttük. A típus Fixnumkorlátozott bitszélességgel rendelkezik, és szabványos processzor aritmetikai utasításokat használ; a bitmélységet Bignumcsak a rendelkezésre álló RAM mennyisége korlátozza, a velük végzett műveletek pedig korlátlan pontosságú számítási algoritmusokon alapulnak. Ez lehetővé teszi a pontos számítások elvégzését tetszőleges számú számjegyből. Például a legtöbb programozási nyelvben egy százas nagyságrendű argumentumra működő egzakt faktoriális program megírása meglehetősen nehéz feladat. A Rubyban ez alapvetően megtörténik, mivel a tolmács gondoskodik a hosszú számokkal való munka problémáiról. def fact ( n ) eredmény = 1 i az 1 - ben .. n do eredmény * = i végeredmény vége puts fact ( 100 ) =begin Выведет : 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 =end A tizedes szám bevitelének (a plusz és mínusz jelek kivételével) 1 és 9 közötti számmal kell kezdődnie. A nullával kezdődő egész szám oktálisnak minősül. A „0x” előtaggal ellátott egész szám hexadecimális, a „0b” pedig bináris. Egyéb numerikus típusok. A típus Float lebegőpontos számok, amelyeket rögzített számú számjegy képvisel. A lebegő számokat természetes vagy exponenciális formában írjuk. A matematikai rendszerkönyvtár a Rational( racionális szám ) és a Complex( komplex szám ) típusokat is biztosítja. Mindkét típus automatikusan egész számokká konvertálódik, és lebeg, egy egység nevezővel, illetve nulla képzeletbeli résszel. Húrok. A string egy változtatható bájttömb, amely UTF-8 kódolású karaktereket képvisel. Ezeket a String osztály valósítja meg, amely számos módszerrel rendelkezik, amelyek elemzést, tartalomkezelést, átalakítást, keresést biztosítanak. A karakterlánc-literálokat aposztrófok, idézőjelek határolják el, vagy a %q[…] vagy %Q[…] konstrukcióba zárják. A sorhatárolók befolyásolják a speciális karakterek használatát:A Rubyban széles körben használják a tartományokat adatmintavételre és hurkolásra.
eljárási objektumok.A Ruby program egy szöveges fájl, amely utasítások sorozatát - parancsokat és leírásokat - tartalmazza. Amikor egy programfájlt elindítanak végrehajtásra, az értelmező egymás után beolvassa a fájlt, és végrehajtja az utasításokat. A Ruby nem igényli, hogy a főprogram törzsét speciális programegységként kell megszervezni (mint egy függvény main()a C-ben), az azt alkotó parancsok egyszerűen közvetlenül a programfájl szövegébe vannak írva. Mivel a programfájlt az interpreter szekvenciálisan dolgozza fel, minden függvénynek, metódusnak, leírásnak meg kell előznie az első használatukat a programszövegben.
A program több fájlra osztható. Ebben az esetben a fő programfájlnak be kell töltenie a többi fájlt a requirevagy utasítással require_relative:
igényel 'module1' # 'module1.rb' nevű programfájl vagy 'modul1' könyvtárnév betöltése szükséges 'pkgs / package2' # 'package2' programfájl betöltése a pkgs alkönyvtárbólEz az utasítás megkeresi a megadott nevű és „.rb” kiterjesztésű fájlt, és letölti. Ha nincs azonos nevű forráskódfájl, akkor az értelmező megpróbál betölteni egy azonos nevű dinamikus könyvtárat (a kiterjesztések az operációs rendszertől függenek). A fájl keresési útvonalait a betöltési utasítás requirehatározza meg: a környezeti beállítások és az értelmező indítási paraméterei által meghatározott könyvtárak készletét használja a betöltéshez, és require_relativeaz aktuális fájlhoz képest a megadott elérési úttal tölti be a fájlt (azaz a fenti példában , ha a betöltési utasításokat tartalmazó fájl a könyvtárban található /home/programmer/work/ruby/testproject, akkor a fájl package2.rbinnen töltődik /home/programmer/work/ruby/testproject/pkgsbe Programmodul betöltésekor azt az interpreter feldolgozza, vagyis minden utasítása végrehajtódik Ha a modul betöltődik több fájlt, akkor csak egyszer töltődik be.A Rubynak van olyan metódusa load, ami a forráskód fájlt vagy könyvtárat is betölti, ez némileg eltérő funkcionalitású és általában C nyelven írt bináris modulok betöltésére szolgál.
A Ruby vezérlő konstrukciók gazdag készletét tartalmazza; sok változatuk meglehetősen ritka.
A feltételes operátor ifhagyományosnak tűnik:
ha x > 0 , akkor "x pozitív szám" elsif x < 0 , akkor "x negatív szám" lesz , különben " x nulla" végeBármennyi elsifág lehet, a kulcsszó használata thenmegengedett, de nem kötelező, ágak elsifés elsehiányozhatnak. A feltételes operátor ezen „kanonikus” alakja mellett a nyelv számos mást is támogat:
# Ha-nem feltétel, hacsak nem x > 3 , akkor x -et tesz . to_s # kiírja x értékét, ha NEM nagyobb háromnál. egyébként a "túl sokat számítani" véget vetUtasításmódosítóként használhatja a feltételes operátor rövidített formáit . Ezeket egy utasítás után írják, és olyan feltételként értelmezik, amely mellett az adott utasítást végre kell hajtani. A módosítókban lévő elágazások elsenem lehetnek.
"x kisebb nullánál! " ha x < 0 # A nyomtatás csak akkor történik meg, ha x negatív , "x pozitív!" kivéve , ha x <= 0 # Ha x értéke NAGYOBB nullánál, akkor a karakterlánc ki lesz nyomtatvaKifejezésként használhat feltételes utasítást. Ennek értéke a feltételnek megfelelően kiválasztott ág értéke lesz. Ebben a használatban a then kulcsszó szükséges. Ruby a hármas feltételes operátort is örökölte ?:C -től.
# A puts metódus argumentumát a feltételes kifejezés választja ki. tesz ( ha x == 0 , akkor "null" egyébként "nem null" vége ) # Az előző utasítás analógja, háromhelyes feltételes operátorral írva. tesz ( x == 0 )? "null" : "nem null"A feleletválasztós operátor case-whentöbb alternatíva közül választhat, amelyek mindegyike megadható egyetlen értékkel, értékkészlettel vagy tartománysal:
esethónap , amikor 1 , 2 , 12 majd a "tél" szót teszi # válasszon az opciók listájából, amikor 3 .. 5 , majd a "tavasz" # válasszon egy sor opció közül, ha 6 .. 8 majd " nyár " # helyettesítheti majd kettősponttal ha 9 .. 11 # akkor kihagyható ha van újsor rakja "ősz" mást tesz "nem történik!!!" végeAz operátorban található alternatívák caseegymás után kerülnek ellenőrzésre, és az első ág kerül kiválasztásra, amelynek feltétele megegyezik az értékek listájával vagy tartományával. Ha az amikor ágak közül egyik sincs kiválasztva, akkor az else ág kerül végrehajtásra, ha létezik.
A Rubynak hétféle hurkolt konstrukciója van. A példa ciklusbeállításokat mutat be egy tömb bejárására listés az összes érték kinyomtatására.
# while ciklus i = 0 előfeltétellel while i < list . méret do print " #{ lista [ i ] } " i += 1 vége # Until ciklus ("még nem") i = 0 előfeltétellel, amíg i == lista . méret do print " #{ lista [ i ] } " i += 1 vége # while ciklus végellenőrzéssel i = 0 kezdi a nyomtatást " #{ lista [ i ] } " i += 1 vége while i < lista . méret # Until ciklus vége ellenőrzéssel i = 0 start print " #{ list [ i ] } " i += 1 end till i == lista . méret # A for ciklus számlálóval (i kikerüli a megadott tartományt) i - hez 0 .. listában . méret - 1 nyomtatja ki a " #{ list [ i ] } " végét # Végezze el az x gyűjteményt a listában : # x veszi a lista elemeinek értékeit nyomtat " # { x } " end # Végtelen hurok i = 0 n = lista . méret - 1 hurok nyomtatása " #{ lista [ i ] } " i += 1 szünet , ha i > n # Kilépés, ha vége # Loop i = 0 n = lista . méret - 1 hurok kinyomtatja " #{ lista [ i ] } " i += 1 szünet, kivéve ha i < = n # Kilépés a végfeltétel megsértésekorA Ruby támogatja a dinamikus heterogén tömböket , amelyek automatikusan átméreteződnek, és bármilyen típusú elemet tartalmazhatnak. A tömb az Array osztály egy példánya, amely hatékony eszközöket biztosít a tárolt adatokkal való munkavégzéshez.
# Egy tömb inicializálható szögletes zárójelben lévő értéklistával. a = [ 1 , ' szia ' , 3 . 14 , 1 , 2 , [ 4 , 5 ] * 3 ] a [ 2 ] # Index szerinti megfordítás # minden belső tömb „kibontása”, az azonos elemek eltávolítása a . ellaposodik . uniq # => [1, 'szia', 3.14, 2, 4, 5] # elem keresése a érték alapján . index ( 6 ) # sikertelen: nil a kerül visszaadásra . index ( 4 ) # => 5 # szinte minden függvény # egy analóggal van ellátva, amelynek ugyanaz a neve, de "!"-re végződik, # ami magát a tárolót módosítja . ellaposodik! # => [1, "szia", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]Az iterátorok a konténertípusokhoz vannak biztosítva az elemeiken való iterációhoz.
# Iterátor 'mindegyik' - a gyűjteménylista elemei felett . mindegyik do | x | nyomtatja ki a " #{ x } " végét # Iterátor 'times' - a gyűjtemény elemeinek száma szerint n = lista . n méret . alkalommal nem | én | print " #{ list [ i ] } " end # Iterátor 'legfeljebb' - az eredeti számtól a maximális n = listaig . méret - 1 O . legfeljebb ( n ) nem | én | print " #{ list [ i ] } " end # Iterátor 'each_index' lista . every_index do | x | print " #{ list [ x ] } " endMinden osztály az előre meghatározott osztály leszármazottja Object. Az osztálymetódusokat magának az osztálynak a leírása tartalmazza. Az osztályleírásban szereplő @@ előtagú változók osztályváltozók (a C++ statikus osztálytagjaihoz hasonlóan), a @ előtaggal rendelkező változók példányváltozók (osztálymezők).
class Személy < Objektum # osztály A személy az objektumból örökli az Összehasonlítható # példánymetódusokat keverje össze a Comparable modulból @ változó # példányváltozó @@count_obj = 0 # osztályváltozó a létrehozott objektumok számának megszámlálásához # def inicializál ( név , kor ) # konstruktor (név, életkor - metódus paraméterei) @name , @age = név , életkor # objektumok létrehozása @@ count_obj += 1 # növeli a számlálót 1 véggel def <=> ( személy ) # operátor felülbírálása <=> @életkor <=> személy . age # az utoljára kiértékelt kifejezést adjuk vissza a metódus végén def to_s # a formázott információhoz a következőt írja be: " # { @name } ( #{ @age } ) " # # konstrukció #{x} 2 idézőjelben a karakterláncban az x end szöveges értékre cserélődik def inspect # metódus, amelyet az értelmező használ a diagnosztikai kimenethez "< #{ @@count_obj } : #{ to_s } >" end attr_reader :name , :age # olvasási hozzáférési metódusok létrehozása a mezők végéhez # Hozzon létre egy osztálypéldányok tömbjét Person group = [ Person . új ( "János" , 20 ), Személy . új ( " Markus " , 63 ), Személy . new ( "Ash" , 16 ) ] # az inspect metódus automatikusan meghívásra kerül a # => kimenetre [<3:John (20)>, <3:Markus (63)>, <3:Ash (16)>] # egy tömb rendezése és "visszafordítása" szabványos módszerekkel # úgy működik, hogy felülbírálja az operátort <=> puts group . rendezni . fordított # Nyomtat: # Markus (63) # John (20) # Hamu (16) # metódus között implicit hozzáadva, ha tartalmazza a Comparable group [ 0 ]. között? ( csoport [ 2 ] , csoport [ 1 ] ) # => igazA Ruby egyetlen osztálya több forrásfájlban deklarálható. Ennek eredményeként lehetőség van például új metódusok hozzáadására egy már meglévő osztályhoz.
A Ruby csak az egyszeri öröklődést támogatja . Ezenkívül van egy keverési mechanizmus és modulok deklarálása, amelyek lehetővé teszik a többszörös öröklődés legtöbb funkciójának megvalósítását.
A Ruby számos eredeti megoldással rendelkezik, amelyek ritkán találhatók meg a mainstream programozási nyelvekben. Nem csak bármely osztályhoz, hanem bármely objektumhoz is hozzáadhat metódusokat. Például hozzáadhat egy tetszőleges metódust valamilyen karakterlánchoz.
# mindent a # karaktertől a sor végéig - a megjegyzés # = hozzárendelési operátor, # a """ karakterei egy str = "Hello" nyelvvel kezelhető karakterlánc # egy str változó itt jön létre, típusa String # def a függvénydeklarációk kulcsszava def str .bye # str . megadja, hogy kié a metódus (alapértelmezett objektum) # bye a metódus neve, amelyet opcionálisan követhet a függvényparaméterek zárójelben elhelyezett listája "Viszlát!" # az utolsó kiszámított érték a metódusból (itt egy karakterlánc) kerül visszaadásra end # szinte minden Ruby utasítás az end kulcsszóra végződik # puts egy metódus, # str.bye a bye metódus hívása str objektum # a bye metódusból kapott érték átkerül a puts metódusnak, # amely puts információkat jelenít meg str.bye # => Bye !Ez a példa azt is bemutatja, hogy miként használható a szingli a Rubyban . Ebben a példában a szingli egy str.
A nyelvnek 2 egyenértékű módja van a kódblokkok írására :
{ " Hello , World!" } do teszi : "Hello, World!" végeA korutinokat a legtöbb beépített módszerrel használják:
fájl . open ( 'fájl.txt' , 'w' ) { | fájl | # nyissa meg a "file.txt" fájlt ("w" - írás) fájl írásához . „ Írtam néhány szöveget”. } # A terv kiküszöböli a bizonytalanságot a fájl bezárásával: itt zár be bármilyen eredmény eseténA következő példa a korutinok és iterátorok használatát mutatja be a tömbökkel végzett munka során, ami bemutatja a Rubyban történő írás rövidségét számos meglehetősen összetett művelet (véletlenszerűen válasszon egy szám négyzetsorozatából "0" és "10" között, és nyomtassa ki a indexek):
# A futáshoz Ruby 1.9 ( 0..10 ) szükséges . gyűjteni { | v | v ** 2 } . válassza a { rand ( 2 ) lehetőséget . nulla? } . térképet . with_index { |* v | v }A kivételekraise a (vagy ) konstrukcióval dobhatók fel, opcionálisan üzenetet tartalmazó szöveg, kivételtípus és a hívásveremrefail vonatkozó információk is hozzáadhatók :
raise ArgumentError , "Érvénytelen argumentum" , a hívó # hívó egy metódus, amely visszaadja az aktuális végrehajtási veremetA kivételeket a rescue. Opcionálisan megadhatja a kezelendő kivétel típusát (alapértelmezés szerint mindegyiket kezeli), és a lekérendő információkat. Blokkokat is hozzáadhat else(fut, ha nem volt kivétel) és ensure(amúgy is fut).
bekezd # ... mentés RuntimeError => e # egy adott hibatípus kezelése elhelyez e # hibaüzenet kinyomtatása mentés # írhatod mentés => e a kivétel tárgyának lekéréséhez # minden kivétel kezelése különben # működni fog, ha van nem voltak kivételek , biztosítsa, hogy # mindenképp működni fog végeA Rubyhoz több implementáció is létezik: a hivatalos C nyelven írt interpreter , a JRuby a Java implementációja , a .NET IronRuby platform értelmezője , a Rubinius főleg Ruby nyelven íródott, és a Smalltalk - 80 VM [18] ötletein alapul. , a MagLev egy másik a Gemstone által kifejlesztett Smalltalkon alapul [19] , a Blue Ruby a Ruby implementációja az ABAP virtuális géphez [20] , a MacRuby egy olyan Mac OS implementáció, amely az operációs rendszer képességeivel való maximális integrációra összpontosít [21]. , az mruby a programokba való beágyazás megvalósítása [22] .
A hivatalos értelmezőt a legtöbb platformra portolták, beleértve a Unixot , a Microsoft Windowst (beleértve a Windows CE- t is ), a DOS -t , a Mac OS X -et , az OS/2 -t , az Amigát , a BeOS -t , a Syllable -t , az Acorn RISC OS -t és még sok mást. A Windows számára létezik egy speciális RubyInstaller, és Cygwin alatt is futtatható a Unix -szal való nagyobb kompatibilitás érdekében [23] .
A Ruby interpreter hivatalos verziója Ruby parancshéjjal ( Interactive Ruby Shell ) érkezik. irbA terminálablakban ( parancssori felület ) egy paranccsal elindítva lehetővé teszi a programkód nagyon gyors tesztelését (sorról sorra):
$ irb irb ( fő ): 001 : 0 > "Hello, World" => "Hello, World" irb ( fő ): 002 : 0 > 2 ** 256 # ** - hatványozási operátor => 115792089237316195423570985007496969696969696969693A program irba karakterek után minden sor eredményét adja ki =>. A fenti példákban az érthetőség kedvéért annotációt használunk - a programsorok eredményeit a megjegyzések után írjuk =>. A szimuláció irbközvetlenül a böngészőben futtatható .
Az 1.8.2-15-ös verziótól kezdődően a Windows One-Click Installer disztribúciós csomagja egy segédprogramot fxritartalmaz, amely egy súgórendszert ( ri) és egy interaktív értelmezőt ( irb) tartalmaz.
Számos szerkesztő ( Emacs , Bred , vim , jEdit , nano , SciTE , Kate stb.) alapvető szerkesztési lehetőségekkel bővül , itt csak a szolgáltatások gazdag készletét biztosító IDE -k szerepelnek.
Név | Engedély | Platformok | Link |
---|---|---|---|
ActiveState Komodo IDE | Szabadalmazott | Linux, Mac OS X, Solaris, Windows | [egy] |
Arachno Ruby IDE | Szabadalmazott | Windows 2000/XP, Linux | [2] Archivált 2019. december 25-én a Wayback Machine -nél |
Aptana ( Rails + RDT ) | GPL , APL+ CPL | Jáva | [3] |
EasyEclipse Ruby és Rails számára | Win 2000/XP, Linux, Mac OS X | [négy] | |
Eclipse + RDT | EPL + CPL | Jáva | [5] |
Embarcadero TurboRuby | Szabadalmazott | Windows, OSX, Linux | [6] |
Szabad vezetés | Ruby licenc | Windows, OSX, POSIX | [7] |
IntelliJ IDEA + Ruby beépülő modul | Saját (az IDEA -n ), Apache 2.0 (magán a bővítményen) | Java, Ruby | Ruby plugin |
KDevelop | GNU GPL | Linux | [nyolc] |
Komodo Edit | Szabadalmazott | A Windows Mac Linux | [9] |
Mondrian Ruby IDE fejlesztés megszűnt, elérhető a régi verzió | MIT | Ruby (+ FOX eszközkészlet ) | [tíz] |
NetBeans IDE (6.9.1 és korábbi verzió) | CDDL | Jáva | [11] Archiválva : 2008. augusztus 1. a Wayback Machine -nél |
RDE | Ruby licenc | ablakok | [12] (nem elérhető link) |
rubin acélban | Szabadalmazott | Visual Studio 2005 | [13] |
RubyMine | Saját (az IDEA alapján ) | Jáva | [tizennégy] |
Visual Studio ( IronRuby implementáció ) | Szabadalmazott | ablakok | [tizenöt] |
Xcode 3.1 | Szabadalmazott | Mac OS X 10.5 | [16] |
A nyelvbe épített hatékony funkciókon kívül a Ruby egy nagy szabványos könyvtárral is rendelkezik . Mindenekelőtt ezek könyvtárak a különféle hálózati protokollokkal való munkavégzéshez a szerver és a kliens oldalon , valamint a különféle adatmegjelenítési formátumokkal ( XML , XSLT , YAML , PDF , RSS , CSV , WSDL ) való munkavégzéshez szükséges eszközök. A nyelvbe épített hibakereső eszközökön kívül a Ruby egységtesztelésre , naplózásra és profilalkotásra szolgáló könyvtárakat is tartalmaz . Vannak könyvtárak is az archívumokkal , dátumokkal, kódolással , mátrixokkal , rendszeradminisztrációs eszközökkel, elosztott számítástechnikával, többszálú támogatással stb.
Alapvető beépített Ruby osztályokNév | Leírás | Verzió [24] |
---|---|---|
A Ruby osztály hierarchia csúcsa. | 1.0 | |
|
Dinamikus tömb tetszőleges objektumok tárolására, 0-tól indexelve. | 1.0 |
Az objektumok egy kódrészlet végrehajtási kontextusát tárolják (változók értéke, metódusok stb.). Később felhasználható számítások elvégzésére ebben az összefüggésben. | 1.2 | |
Az objektum tárolja a visszatérési címet és a végrehajtási környezetet, lehetővé téve, hogy a program bármely pontjáról a létrehozási pontra ugorjunk (úgynevezett nem helyi ugrás). | 1.4 | |
A C mutató körüli burkolólap , amelyet főleg kiterjesztések írásakor használnak. | 1.0 | |
Fájlrendszer-könyvtárak ábrázolása. Lehetővé teszi a könyvtárak és attribútumuk megtekintését. | 1.0 | |
Az összes kivétel alaposztálya (a több mint 30 kivételből álló hierarchia tetejét képezi). | 1.0 | |
|
A globális változó falseennek az osztálynak az egyetlen példánya, és a logikai érték hamis értéket képviseli a logikai kifejezésekben. | 1.0 |
Kulcs-érték párok gyűjtése; a bejárási sorrend független a beillesztési sorrendtől. | 1.0 | |
Alapvető I/O képességek. | 1.0 | |
Osztály a fájlok elérésére. | 1.0 | |
|
A reguláris kifejezés alkalmazásának eredménye. Általában nem közvetlenül, hanem speciális változókon keresztül $&, $', $`, $1, $2stb. | 1.0 |
Egy adott objektumhoz (nem osztályhoz) társított metódus. A metódus objektum jelenléte nélkül is meghívható. | 1.2 | |
Modul osztály. | 1.0 | |
|
osztályok osztálya; A Ruby osztályai objektumok, a Class pedig ezen objektumok osztálya (metaosztály). | 1.0 |
|
Az osztály egyetlen példánya egy változó nil. Csak hazugságot képviselnek a programokban nil. falseMinden más tárgy igaz. | 1.0 |
A számok absztrakt osztálya. | 1.0 | |
Egész számok absztrakt osztálya. Bitenkénti műveletekhez végtelen bitsorként kezelhető. | 1.0 | |
Az egész számokat csak a memória mennyisége korlátozza. Automatikusan konvertál, Fixnumha az érték elhelyezhető bennük, és fordítva. (2.4-es verzió előtt) | 1.0 | |
Egész számok, amelyek elférnek egy gépi szóban (32 bit a legtöbb gépen). Ha a művelet eredménye kívül esik a hatókörön, akkor automatikusan a következőre konvertálódik Bignum. (2.4-es verzió előtt) | 1.0 | |
Lebegőpontos számok. | 1.0 | |
|
Kódblokk társított kontextussal ( lezárással ), amely más kontextusokban ismételten végrehajtható. | 1.0 |
|
Intervallum: Kezdő és záró elemekkel megadott értékkészlet. | 1.0 |
Reguláris kifejezés. | 1.0 | |
Tetszőleges hosszúságú bájtok karakterlánca. | 1.0 | |
|
Egyszerű módot biztosít az attribútumok összekapcsolására anélkül, hogy közvetlenül osztálykódot kellene írni; sok változót és hozzáférési metódusokat tartalmazó speciális osztályokat generál. | 1.0 |
Egy nevet jelöl, és a következővel jön létre :name. A programban létrehozott összes megadott nevű objektum egy objektumra való hivatkozás. | 1.6 | |
Információkat tartalmaz egy szálról, beleértve a Ruby szkript főszálát is. | 1.0 | |
Módot biztosít egy szálcsoport kezeléséhez. Egy szál csak egyhez tartozhat ThreadGroup. Ha új csoporthoz ad egy szálat, az eltávolítja azt az előző csoportból. | 1.6 | |
Dátum és idő. | 1.0 | |
|
A globális változó trueaz egyetlen osztályváltozó, és a logikai igazságot képviseli a logikai kifejezésekben. | 1.0 |
Egy adott objektumhoz nem társított metódus. Objektumhoz köthető, és mint Method. | 1.6 |
A Ruby nyelv egyszerű és kényelmes mechanizmust biztosít a nyelv bővítésére C nyelven írt könyvtárakkal , megkönnyítve további könyvtárak fejlesztését [25] [26] .
Az adatbázisokhoz való egységes hozzáférés érdekében a Ruby DBI könyvtárat fejlesztették ki (támogatja az SQLite -t , Oracle Database -t , ODBC -t , MySQL -t , DB2 -t , MS SQL -t , InterBase -t , ADO -t stb.). Vannak olyan adatbázis-specifikus könyvtárak is, amelyek támogatják az adatbázis-specifikus műveleteket. Számos könyvtár létezik az ORM megvalósításához , például az ActiveRecord, a Mongoid, a DataMapper vagy a Sequel.
A grafikus könyvtárak közé tartozik az FxRuby (interfész a FOX grafikus könyvtárhoz ), a wxRuby grafikus fejlesztőcsomag (interfész a C++ cross-platform wxWidgets csomaghoz ), a QtRuby/Korundum (a Qt -hez és a KDE -hez kötődik ), grafikus könyvtárak a Tk -vel való munkához [27] és Gtk . Az OpenGL - lel való munkavégzéshez egy könyvtárat is megvalósítottak , amely lehetővé teszi a háromdimenziós grafika programozását .
Win32utils – lehetővé teszi a Win32 API bizonyos funkcióinak elérését .
Az Rmagick egy képmanipulációs könyvtár, amely több mint 90 formátumot támogat (az ImageMagick és a GraphicsMagick alapján ).
A Ruport könyvtárat (Ruby reports) úgy tervezték, hogy könnyen implementáljon jelentéseket és grafikonokat hozzon létre adatbázisból vagy közvetlenül CSV szövegfájlokból származó adatok alapján . Ezenkívül az eredmények PDF , HTML , CSV és TXT formátumban menthetők.
A RuTils egy orosz Ruby szövegfeldolgozó. Lehetővé teszi az összeg szavakban történő megadását és a számok kiválasztását. Például 231.propisju(2) => "kétszázharmincegy" vagy 341.propisju_items(1, "suitcase", "suitcase", "suitasases") => "háromszáznegyvenegy bőrönd". Valamint az átírásra való fordítás és a dátumokkal való munka.
A RubyGems csomagkezelő rendszert úgy tervezték, hogy a Ruby könyvtárakat és programokat önálló csomagként kezelje .
Világszerte létezik egy Ruby RAA (Ruby Application Archive) szoftvertár . Az adattár 2007. szeptemberi állapotában több mint másfél ezer projektet tartalmaz. A Ruby nyelven írt szoftverek nagy részét a RubyForge projekt üzemelteti , amelyet kifejezetten erre a célra hoztak létre. A RubyForge 2014. május 15-én zárva tart, míg a programarchívum továbbra is letölthető lesz.
A legtöbb kiterjesztést ingyenes licencek ( LGPL , Ruby licenc) alatt terjesztik, és szinte korlátozás nélkül használhatók bármilyen projektben.
Az RDoc rendszer a forráskódok és a Ruby programok dokumentációjának automatikus kinyerésére és további feldolgozására szolgál . Ez a de facto szabvány a Ruby nyelven írt szoftverek dokumentációjának elkészítéséhez.
A Ruby dokumentáció Unix parancssorból való eléréséhez egy programot fejlesztettek ki ri. Segítségével információkat kaphat a Ruby modulokról, osztályokról és metódusokról.
A Ruby egyik leggyakrabban kritizált aspektusa a teljesítmény. Az eredeti tolmács az első verziókban a tesztek során háromszor-ötször alacsonyabb munka sebességet mutatott, mint az akkor aktívan használt tolmácsolt nyelvek (PHP, JavaScript, Python). Jelenleg ez az állítás nagymértékben elvesztette relevanciáját: a tolmácsok modern verzióinak (az eredeti és az alternatív változatok) teljesítménye körülbelül ugyanabban a sorrendben van (a pontos becslések tesztenként változnak), a céljukhoz közel álló tolmácsolt nyelvekkel. , és általában elég magas, hogy a tipikus feladatokban a tolmács ne váljon " szűk keresztmetszetté ". A JIT-összeállítás bevezetése a 2.6-os verzióban összhangban van a tolmácsok általános teljesítménytrendjével.
A Ruby lényegesen lassabb, mint a statikusan beírt kötelező nyelvek, amelyek olyan objektumkódra fordítódnak, mint a C , Pascal vagy Go , de ez a hátrány a legtöbb dinamikus nyelvre jellemző. Azokban az esetekben, amikor az egyes programrészletek teljesítménye kritikussá válik, az egyetlen módja annak, hogy ezeket a töredékeket gyorsabb nyelveken írjuk le (általában C nyelven ).
A kritikusok a Ruby jelenlegi implementációiban, valamint magában a nyelv- és rendszerfejlesztési folyamatban hiányosságokra is rámutatnak.
A Rubyt a NASA , a NOAA (National Oceanic and Atmospheric Administration), a Motorola és más nagy szervezetek használják [28] . A következő programok a Ruby-t használják szkriptnyelvként a program képességeinek bővítésére, vagy (részben vagy teljesen) azzal íródnak.
Az alábbi lista csak a főbb frissítéseket tartalmazza [31] .
Verzió neve | kiadási dátum | Megjegyzések |
---|---|---|
0,06 | 1994. január 7 | Az első verzió a Changelogs-ban szerepel |
1,0-961225 | 1996. december 25 | Ez a verzió közvetlenül követte az előző napon megjelent 0.99.4-961224-es verziót. Az 1.0 utáni szám a verzió megjelenési dátuma. Az 1.0-s sorozat új verziói még egy évig megjelentek (1.0-971225-ig). |
1.1 alfa0 | 1997. augusztus 13 | Az alfa verziók 1997. október 7-ig jelentek meg (1.1 alpha9) |
1.1b0 | 1997. december 4 | Következő verzió az 1.1 alpha9 után. 1998. február 27-én megjelent az 1.1b9 verzió, majd 1998 közepéig léteztek kísérleti kiadások 1.1b9_31 jelöléssel (az 1.1b9_31 verzió megjelent, de a dokumentációban nem szerepel). |
1.1c0 | 1998. július 17 | Ez a verzió az 1.1b9_31 verziót követte. Ennek a verziónak a módosításait 1998. november 26-ig adták ki (1.1c9). |
1.1d0 (1.2 előtti) | 1998. december 16 | Ez a verzió az 1.1c9 verziót követte. 1998. december 22-én megjelent az 1.1d1 kísérleti verzió, amely ezt a sort kiegészítette. |
1,2 (stabil) | 1998. december 25 | A verzió további módosításait az 1999. április 13-án kiadott 1.2.5-ös verzióig adták ki. 1999. június 21-én megjelent az 1.2.6-os verzió, amelyet a végleges 1.2-es verzióként (1.2 final) jelentettek be. 1999. július 15-én megjelent egy újracsomagolt 1.2.6-os verzió. |
1.3 (fejlesztés) | 1998. december 24 | A módosítások külön ága, az 1.2-es sortól függetlenül (hasonlóan a Linux kernelhez). Az első verziót fejlesztői verzióként jelentették be, majd az 1.1d1 verziót követte. Sok köztes módosítás következett: rubin-1.3.1-990215 - rubin-1.3.4-990625, ami után elhagyták a dátumot a számban, és kiadták az 1.3.5 - 1.4 alpha (1999. július 15.), 1.3.6 - 1.4 alfa (1999. július 28.), 1.3.7 - 1.4 béta (1999. augusztus 6.). |
1.4.0 (stabil) | 1999. augusztus 13 | Ez a verzió néhány nappal az 1.3.7 - 1.4 béta megjelenése után jelent meg. Ezt követően új módosításokat adtak ki az 1.4.6-os verzióig, amely 2000. augusztus 16-án jelent meg. |
1.5.0 (fejlesztés) | 1999. november 20 | Ezt a vonalat kizárólag a fejlesztés során felmerülő különféle innovációk tesztelésére szánták. Ennek a sornak a módosításai kizárólag a projekttárban érhetők el, és ennek megfelelően ennek a verziónak az összeállításait nem töltötték fel a hivatalos szerverre. |
1.6.0 (stabil) | 2000. szeptember 19 | A jövőben ennek a verziónak a módosításait az 1.6.8-as verzióig (2002. december 24.) adták ki. 2005. szeptember 21-én megjelent egy javítás az 1.6.8-as verzióhoz. |
1.7.0 (fejlesztés) | 2001. február 24 | Ezt a vonalat kizárólag a fejlesztés során felmerülő különféle innovációk tesztelésére szánták. Ennek a sornak a módosításai kizárólag a projekttárban érhetők el, és ennek megfelelően ennek a verziónak az összeállításait nem töltötték fel a hivatalos szerverre. |
1.8.0 (stabil) | 2003. augusztus 4 | Ezt követte nagyszámú, jelenleg is megjelenő módosítás (2011. január 1.), például 2010. december 24-én jelent meg az 1.8.7-p330 köztes verzió. |
1.9.0 (fejlesztés) | 2007. december 25 | Kezdetben kísérleti ág, amelyet számos innováció gyakorlati tesztelésére hoztak létre. |
1.9.3 (stabil) | 2011. október 31 | Az 1.9.2-től való eltérések jelentősek. |
2.0.0 (stabil) | 2013. február 24 | |
2.1.0 (stabil) | 2013. december 25 | |
2.2.0 (stabil) | 2014. december 25 | A Unicode 7.0 támogatása, hozzáadott szemétgyűjtés a Symbol típusú objektumokhoz. |
2.3.0 (stabil) | 2015. december 25 | Új „&” operátor hozzáadva. hogy megkönnyítse a nulla értékek kezelését az objektumok elérésekor. Egy új kísérleti fagyasztott karakterlánc-literális pragmát valósítottak meg, amely lehetővé teszi a karakterlánc-literálok állapotának lefagyasztását a forrásszövegekben. |
2.4.0 (stabil) | 2016. december 25 | Fixnum és Bignum egyesítése egész számra. Támogatás a Unicode karakterek kis- és nagybetűinek megváltoztatásához a String esetében. Hash tábla fejlesztések (st_table). Interaktív ülések kötése.irb. Regexp#match? metódus hozzáadva. Tömb#max, Tömb#min optimalizálás. |
2.5.0 (stabil) | 2017. december 25 | A do/end blokkokban immár legális a mentési, else, and biztos szakaszok közvetlen használata.
A hozam_self metódus úgy van definiálva, hogy hozamműveletet hajtson végre egy blokkon a környezetében. A tap-tól eltérően a metódus a blokkvégrehajtás eredményét adja vissza. Támogatás az ágak és módszerek tesztkód lefedettségének méréséhez. Új Hash#slice és Hash#transform_keys metódusok hozzáadva. Engedélyezte a pp.rb könyvtár automatikus betöltését anélkül, hogy a kódban meg kellene adni a „require „pp”” értéket. A nyomkövetési és hibaüzenetek kimenete fordított sorrendre módosult (az elején vannak hívások, a régiekkel kezdődően és frissekkel végződve, a végén hibaüzenet jelenik meg). [32] |
2.6.0 (stabil) | 2018. december 25 | Vlagyimir Makarov JIT-összeállításának támogatása;
Új RubyVM::AbstractSyntaxTree modul hozzáadva; Új álnév a kernelben, Kernel#majd a Kernel#yield_self álneve; Hozzáadott végtelen intervallumok (1..); |
2.7.0 (stabil) | 2019. december 25 | Kísérleti támogatás a mintaillesztéshez
Hozzáadott kompakt szemétgyűjtő GC.compact Lehetőség alapértelmezett számozott változónevek használatára a blokkparaméterekhez. Kísérleti támogatás a végérték nélküli tartományokhoz. |
3.0.0 (stabil) | 2020. december 25 | Hozzáadtuk a statikus elemzés lehetőségét |
Elektronikus formában:
Elektronikus formában:
rubin | |
---|---|
Emberek | |
IDE |
|
Megvalósítások |
|
Alkalmazások |
|
Könyvtárak és keretrendszerek |
|
Szerver szoftver | |
Egyéb |
|
|
Programozási nyelvek | |
---|---|
|