Rubin

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 15-én felülvizsgált verziótól ; az ellenőrzések 40 szerkesztést igényelnek .
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] .

Teremtés és fejlődés története

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.

Filozófia

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.

Szemantika

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ége

A 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-ban

A 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 ).

Ruby funkciók

  • Tömör és egyszerű szintaxisa van, részben Ada , Eiffel és Python hatásaira.
  • Lehetővé teszi a Java és Python stílusú kivételek kezelését.
  • Lehetővé teszi olyan utasítások felülbírálását , amelyek valójában metódusok .
  • Teljesen objektum-orientált programozási nyelv. A Rubyban lévő összes adat a Smalltalk értelemben vett objektum . Például az "1" szám a Integer. Az egyetlen kivételt a vezérlőkonstrukciók jelentik, amelyek a Rubyban a Smalltalkkal ellentétben nem objektumok. Azt is támogatja, hogy metódusokat adjon hozzá egy osztályhoz, sőt egy adott példányhoz futás közben.
  • Nem támogatja a többszörös öröklődést , de a " mixins " fogalma, amely ezen a nyelven a modulmechanizmuson alapul, használható helyette .
  • Automata szemétgyűjtőt tartalmaz . Minden Ruby objektumhoz működik, beleértve a külső könyvtárakat is.
  • A Ruby bővítmények létrehozása C -ben nagyon egyszerű, részben a szemétgyűjtő, részben az egyszerű és kényelmes API miatt .
  • Támogatja a teljes változó kötéssel rendelkező lezárásokat .
  • Támogatja a kódblokkokat (a kód {... }vagy do... közé van zárva end). A blokkok módszerekben használhatók, vagy lezárásokká alakíthatók.
  • A Ruby egészszámú változói értéküktől függően automatikusan konvertálódnak típusok Fixnum(32 bites) és Bignum(több mint 32 bit) között, így tetszőlegesen nagy pontossággal végezhetünk egész számmal rendelkező matematikai számításokat.
  • Nem igényli a változók előzetes deklarálását, de kívánatos, hogy az értelmező a nil üres értéket rendelje hozzá a változókhoz (az interpretátor ekkor tudja, hogy az azonosító változót jelöl, nem metódusnevet).
  • A Rubyban sok tervezési minta közvetlenül a nyelven van implementálva , így például egy „ singleton ” (singleton) megvalósítható (bár nem kötelező) úgy, hogy a szükséges metódusokat hozzáadjuk egy adott objektumhoz ( lásd alább ).
  • Dinamikusan betöltheti a bővítményeket, ha az operációs rendszer lehetővé teszi .
  • OS-független támogatással rendelkezik a nem megelőző többszálú feldolgozáshoz .
  • Portálva több platformra. Linuxra fejlesztették, de fut a Unix , DOS , Microsoft Windows ( különösen Win32 ), Mac OS , BeOS , OS/2 stb. számos verzióján.

Szintaxis

Megjegyzések

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ége

Ábécé, kulcsszavak

A 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 _

Elnevezési konvenciók

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 nagybetűvel kezdődő nevek konstansokat és osztályokat jelölnek.
  • A kisbetűvel vagy egyetlen aláhúzással kezdődő nevek az osztály helyi változóit és metódusait jelölik.

A névelőtagokat az azonosító hatókörének meghatározására is használják:

  • A @ előtag egy példányváltozót jelöl (lásd lent ).
  • A @@ előtag egy osztályváltozót jelöl (lásd alább ).
  • A $ előtag egy globális változót vagy állandót jelöl. Előre meghatározott rendszerváltozók nevében is használatos.
  • Előtag : egy szimbólumot jelöl (a Symbol osztály egy példányát, lásd alább ).

A metódusnevek utótagokat használnak a metódus céljának jelzésére:

  • Utótag ! destruktív osztálymetódus , azaz olyan metódus, amelynek hívása megváltoztatja azt az objektumot, amelyre hívják.
  • Utótag ? predikátumot jelöl, vagyis egy logikai értéket visszaadó osztálymetódust.

Alap adattípusok

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:
  • Ha egy karakterláncot aposztrófok határolnak, akkor csak a „\\” és „\'” speciális sorozatokat ismeri fel a rendszer, amelyek egy fordított perjelet, illetve egy aposztrófot jelölnek.
  • Ha a karakterláncot dupla idézőjelek választják el, akkor a „\t” (tabulátor karakter), „\n” (sortörés), „\010” (bármely karakter oktális kódolásban) és más vezérlőkaraktereket is felismeri benne.
  • Az elválasztójelek %q[…]vagy %Q[…](használhat zárójeleket, szögletes zárójeleket, göndör zárójeleket és szögletes zárójeleket) lehetővé teszik, hogy karakterláncokat írjon aposztrófokkal és idézőjelekkel anélkül, hogy kihagyná őket. Az űrlap %q[…]az escape szekvenciák közvetlen kimenetét is biztosítja:
# Három azonos sor kerül kiadásra: %q[karakterlánc "\t" tabulátorral és '\n' törőkarakterrel] behelyezi a "karakterláncot \"\\ t \" karakterrel, a ' \\ n'" törőkarakter pedig " Karakterlánc " \ t " tabulátorral és kötőjellel \'\n\' ' A többsoros szöveg megjelenítéséhez létezik egy másik sztringábrázolási forma: helyez << EOF Ebben a szövegben minden , beleértve az újsorokat, az idézőjeleket és a behúzást, „ahogy van”. EOF Az "EOF" helyett tetszőleges szó vagy szám használható, fontos, hogy a végzárót a sor elejétől írják, és közvetlenül utána egy újsort. Többsoros szövegekben működik a speciális karakterek kiadása, valamint a dupla idézőjelekkel határolt karakterláncokban. A Ruby támogatja a karakterláncszeletelést, a korlátozást, az összevonást, a középső beszúrást, a részkarakterláncok vagy reguláris kifejezések keresését stb. Kényelmes szolgáltatás a kiszámított kifejezések karakterláncba dupla idézőjelbe történő beszúrásának támogatása: ha a karakterlánc tartalmaz egy konstrukciót #{ }, akkor a kapcsos zárójelben lévő mindent az értelmező kiszámít, karakterlánc formátumra konvertál, és a létrehozott karakterlánc adott helyére helyezi . for i in ( 1 .. 7 ) . reverse_each do " #{ i } seconds left #{ case i when 2 .. 4 then "s" when 1 then "a" else "" end } ..." sleep ( 1 ) end a "Kész!" =begin Kimenet: 7 másodperc van hátra... 6 másodperc van hátra... 5 másodperc maradt... 4 másodperc van hátra... 3 másodperc van hátra... 2 másodperc van hátra... 1 másodperc van hátra... Kész! =vége Egy fontos részlet: a betét használatakor a göndör kapcsos zárójelben minden normál rubinkód, különösen ott nem kell az idézőjeleket elkerülni. Szimbólumok. A karakter egy megváltoztathatatlan karakterlánc. :A karakterliterálokat " " (kettőspont) előtaggal írjuk . sym = :hétfő # :hétfő egy karaktert tesz sym # ==> monday puts :sunday # ==> sunday und = :"Ismeretlen \t nap a hét" # Az idézett karakter tartalmazhat szóközöket és speciális karaktereket # a karakterek munkája szeletek puts und [ 8 , 6 ] # ==> day of und [ 7 ] = ' ' # HIBA! A szimbólumok változhatatlanok. Tartományok. A tartomány a Range osztály egy példánya, és egész számok folyamatos sorozata a kezdettől a végéig. A tartományt két vagy három ponttal elválasztott egész számpárként adjuk meg. d1 = 1 .. 10 # Két pont - 1-től 10-ig. d2 = 1 ... 10 # Három pont - 1-től 9-ig. A felső határ nem szerepel ebben a tartományban!

A Rubyban széles körben használják a tartományokat adatmintavételre és hurkolásra.

eljárási objektumok.

Leírások, inicializálás

Programstruktúra

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ól

Ez 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.

Vezérlési struktúrák

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ége

Bá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 vet

Utasí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 nyomtatva

Kifejezé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ége

Az 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ésekor

Konténerek

A 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 ] } " end

Objektumprogramozás Rubyban

Osztályok

Minden 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 ] ) # => igaz

A 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.

Szennyeződések

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.

Példák

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.

Eljárási objektumok és iterátorok

A nyelvnek 2 egyenértékű módja van a kódblokkok írására :

{ " Hello , World!" } do teszi : "Hello, World!" vége

A 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én

A 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 }

Kivételek

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 veremet

A 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ége

Megvalósítás

A 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] .

Interaktív Ruby

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 ( ): 001 : 0 > "Hello, World" => "Hello, World" irb ( ): 002 : 0 > 2 ** 256 # ** - hatványozási operátor => 115792089237316195423570985007496969696969696969693

A 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.

IDE-k támogatása

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]

Könyvtárak

Standard Library

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ályok
Név Leírás Verzió [24]
A Ruby osztály hierarchia csúcsa. 1.0
  • Array
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
  • FalseClass
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
  • Class
osztályok osztálya; A Ruby osztályai objektumok, a Class pedig ezen objektumok osztálya (metaosztály). 1.0
  • NilClass
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
  • Proc
Kódblokk társított kontextussal ( lezárással ), amely más kontextusokban ismételten végrehajtható. 1.0
  • Range
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
  • Struct
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
  • TrueClass
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

Kiterjesztések

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.

Dokumentáció

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.

Kritika

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 tolmács nagy mérete és a versengő nyelvekhez képest nagy memóriaköltségek, amelyek nagyrészt magának a nyelvnek a dinamizmusából és összetettségéből adódnak, megnehezítik a Ruby alkalmazásokba való beágyazását és alacsony fogyasztású, többek között mobil platformokon történő használatát.
  • Formálisan többplatformos, a Ruby eredeti megvalósítása valójában hordozhatósági problémákkal küzd. A problémák jelentős része azonban nem magával az értelmezővel vagy a rendszerkönyvtárral, hanem a független fejlesztők által kiadott, különösen a külső C kódot használó könyvtárak nem hordozhatóságával függ össze.
  • A szintaktikai többszálú nyelvi támogatással valójában a tolmács a GIL ( Global Interpreter Lock ) mechanizmust használja a szál biztonságának biztosítására, amely nem teszi lehetővé egynél több Ruby-kódszál egyidejű végrehajtását egy értelmezői folyamatban, még akkor sem, ha vannak ilyenek. ingyenes processzormagok. Ez a korlát a nyelv létrehozásakor még nem volt jelentős, de a 2010-es évek végén, amikor a felhasználói számítógépek 4-8 ​​processzorral, a szerverek pedig több tíz vagy akár több száz maggal is rendelkezhetnek, az erőforrások teljes kihasználásának hiánya jelentős korlátozás. Természetesen ez csak azokban a programokban nyilvánul meg, amelyek aktívan használnak nagyszámú adatfeldolgozási szálat. Egyes alternatív megvalósítások, mint például az IronRuby ( .NET -hez ) és a JRuby ( JVM -hez) mentesek ettől a hiányosságtól, de mivel az adott virtuális gépek szálas implementációit használják, ebből a szempontból nem teljesen kompatibilisek. a referenciatolmács segítségével.
  • A Ruby 1.8 megjelenése után a szerző elvetette a korábbi verziókkal való kompatibilitás fenntartásának elvét, inkább a radikális javítások lehetőségét részesítette előnyben. Ez oda vezetett, hogy még a rendszer szomszédos „kisebb” verziói közötti váltáskor sem garantált a működőképesség és az összes érintett könyvtár változtatás nélküli használatának képessége. A független megvalósítások sem felelnek meg teljesen az eredetinek és egymásnak.

Használat

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.

  • RPG Maker ( RPG Maker XP ) – RGSS (Ruby Game Scripting System).
  • Az Amarok  egy audiolejátszó a KDE környezethez .
  • A SketchUp  egy 3D modellező és vizualizációs rendszer.
  • Inkscape  - szkriptek vektoros képek feldolgozásához.
  • A Metasploit  a számítógépes rendszerek sebezhetőségeinek felkutatására és tesztelésére szolgáló környezet.
  • Chef , Puppet  - konfigurációkezelő rendszerek.
  • A Redmine  egy projektmenedzsment rendszer, amely hibakövetőt és wikimotort tartalmaz.
  • Az XChat  egy többplatformos IRC-kliens.
  • A KOffice számára a Kross projekt  fejlesztés alatt áll, egy szkriptmotor, amely tartalmazza a Rubyt is.
  • A WATIR ( Web Application Testing in Ruby ) egy ingyenes eszköz a webes alkalmazások böngészőben történő automatikus tesztelésére . 
  • A Ruby a Toptal-t használja a mikroszolgáltatási architektúra létrehozásához [29]
  • A Vagrant  egy virtuális környezetkezelő rendszer.
  • A Travis CI  egy elosztott webszolgáltatás szoftverek készítésére és tesztelésére
  •  A Github egy webalapú rendszer a Git verzióvezérlő környezetben tárolt projektek kezelésére.
  • Discourse  - Internetes fórum és levelezőlista-kezelő szoftver
  • A GitLab  egy kódtár-kezelő rendszer a Git számára
  • A Homebrew  egy csomagkezelő segédprogram a macOS számára
  • A YaST  egy operációs rendszer konfigurációs és csomagtelepítő segédprogram a SUSE Linux számára.
  • TaskJuggler  - projektmenedzsment szoftver

Mobilalkalmazások fejlesztése

  • Titanium Studio – HTML5, CSS3, Javascript, Ruby, Rails, Python, PHP mobilalkalmazás-fejlesztő környezet
  • A Ruboto egy fejlesztői környezet az Android alkalmazásokhoz Ruby nyelven
  • A RubyMotion egy fejlesztői környezet iOS-alkalmazásokhoz Rubyban
  • A MobiRuby egy fejlesztőeszköz az Android és iOS alkalmazásokhoz Rubyban
  • Rodosz – keretrendszer az okostelefonokhoz és Motorola-eszközökhöz való Enterprise Mobility alkalmazások fejlesztéséhez [30]

A verzió megjelenésének ütemezése

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

Lásd még

Jegyzetek

  1. https://www.ruby-lang.org/en/news/2022/04/12/ruby-3-1-2-released/
  2. https://www.ruby-lang.org/en/about/
  3. 1 2 Interjú a Ruby alkotójával O'Reilly Media , 2001.
  4. https://www.slideshare.net/yukihiro_matz/how-emacs-changed-my-life
  5. https://www.ruby-lang.org/ja/news/2013/06/30/we-retire-1-8-7/
  6. https://www.ruby-lang.org/ja/news/2011/10/31/ruby-1-9-3-p0-is-released/
  7. 1 2 3 4 Ingyenes szoftverek könyvtára
  8. E. A. Roganov, N. A. Roganova. Programozás Rubyban. Oktatóanyag (PDF, 425 KB) . — M .: MGIU , 2008. — 56 p. - ISBN 978-5-2760-1495-1 .
  9. Bruce Tate a sínek gyakorlati használata: 4. rész. Tesztelési stratégiák Ruby on Railsben. Archiválva : 2011. július 28. a Wayback Machine -nél, 2008.07.01.
  10. Ruby License  ( TXT). Letöltve: 2006. augusztus 14. Az eredetiből archiválva : 2011. augusztus 22.. A Ruby licenc fordítása a Wikiforrásban .
  11. "A Ruby ereje és filozófiája (vagy hogyan hozzuk létre a Babel-17-et" (holt link) . Hozzáférés dátuma: 2019. március 6. Az eredetiből archiválva : 2019. január 3. 
  12. Yukihiro Matsumoto levele ruby-talk ruby-talk:00382 archiválva 2011. július 16-án a Wayback Machine -nél 1999. június 4-én. A teljes levélnek van egy orosz nyelvű fordítása. Archiválva : 2007. január 19. a Wayback Machine -nél
  13. Megjelent a Ruby 2.1.1 . Letöltve: 2014. február 25. Az eredetiből archiválva : 2014. február 28..
  14. 5 dolog, amit utálok Rubyban  ( 2005. október 25.). Letöltve: 2007. július 30. Az eredetiből archiválva : 2011. augusztus 22..
  15. Hal Fulton. Programozás Rubyban. - 2. kiadás - M. : DMK Press, 2007. - S. 24-27.
  16. Hal Fulton, Andre Arco. A Rubin út. - 3. kiadás - M. : DMK Press, 2016. - S. 33-38.
  17. Yukihiro Matsumoto interjú Archivált : 2008. január 18. a Wayback Machine -nél 
  18. Rubinius Home . Letöltve: 2009. április 14. Az eredetiből archiválva : 2015. december 13..
  19. MagLev /măg-lĕv/ (lefelé irányuló kapcsolat) . Letöltve: 2009. április 14. Az eredetiből archiválva : 2009. április 27.. 
  20. Blue Ruby – Új feltáró kutatás  (lefelé irányuló kapcsolat)
  21. MacRuby . Letöltve: 2009. április 14. Az eredetiből archiválva : 2012. december 24..
  22. mruby github adattár . Letöltve: 2012. július 18. Az eredetiből archiválva : 2013. augusztus 28..
  23. Cygwin és Ruby Windows (downlink) . Letöltve: 2011. március 15. Az eredetiből archiválva : 2011. március 1.. 
  24. A Ruby korábbi verzióinak gyenge dokumentációja miatt az információkat közvetlenül a forrásokból szereztük be ( helium.ruby-lang.org/ftp://ruby  (eng.)  (hozzáférhetetlen link) . Hozzáférés dátuma: augusztus 16. 2006. Archiválva : 2016. április 8. ). Csak a stabil (egyenletes) verziók vannak felsorolva.
  25. Thomas, Dave. Ruby kiterjesztése  (angol)  (downlink) . Programozás Ruby - A pragmatikus programozói útmutató . Addison Wesley Longman Inc. Letöltve: 2006. október 30. Az eredetiből archiválva : 2006. március 19.
  26. Rooney, Garrett. Ruby kiterjesztése C-vel  . O'Reilly Media (2004. november 18.). Letöltve: 2006. október 30. Az eredetiből archiválva : 2011. augusztus 22..
  27. Ruby/Tk bemutató (lefelé mutató link) . Letöltve: 2014. április 8. Az eredetiből archiválva : 2017. október 21.. 
  28. Hal Fulton. Programozás Rubyban. - 2. kiadás — M. : DMK Press, 2007. — S. 21.
  29. Mikroszolgáltatás-architektúra beállítása Rubyban: lépésről lépésre útmutató , Toptal  (2017. március 2.).
  30. Rhodes a Motorola honlapján . Letöltve: 2012. október 31. Az eredetiből archiválva : 2012. október 25..
  31. A kísérő Changelog szöveges fájlokból vett információ. A különböző verziójú dokumentumok eltérnek egymástól, esetenként csak a jelen dokumentummal kísért sorhoz kapcsolódó változatokat veszik figyelembe.
  32. Megjelent a Ruby 2.5.0 . www.ruby-lang.org (2017. december 25.). Letöltve: 2018. április 5. Az eredetiből archiválva : 2017. december 30.

Irodalom

Oroszul
  • D. Flanagan, Y. Matsumoto . Ruby programozási nyelv = The Ruby Programming Language / per. angolról. N. Vilchinsky. - 1. kiadás - Szentpétervár. : Piter , 2011. - 496 p. – ( O'Reilly bestsellerek ). - ISBN 978-5-459-00562-2 .
  • H. Fulton. Programozás Rubyban = The Ruby Way / per. angolról. A. Slinkin. - 2. kiadás - M. : DMK Press, 2007. - 688 p. - (Programozási nyelvek). — ISBN 5-94074-357-9 .
  • M. Fitzgerald. Learning Ruby = Learning Ruby / per. angolról. N. Gavrilova. - 1. kiadás - Szentpétervár. : BHV-Petersburg , 2008. - 336 p. - ISBN 978-5-9775-0225-2 .
  • D. H. Spolsky. A legjobb szoftverfejlesztési példák = The Best Software Writing / per. angolról. E. Matvejev. - Szentpétervár. : Péter , 2007. - 208 p. — (Programozói könyvtár). — ISBN 5-469-01291-3 .

Elektronikus formában:

Angolul
  • David Thomas, Chad Fowler, Andrew Hunt. Programozás Ruby: The Pragmatic Programmer's Guide, második kiadás. - Boston: Addison-Wesley, 2004. - 864 p. - ISBN 978-0-9745-1405-5 .
  • Dave Thomas, Chad Fowler, Andy Hunt. Programozás Ruby 1.9: A pragmatikus programozói útmutató. - Dallas: Pragmatikus könyvespolc, 2009. - 944 p. - ISBN 978-1-93435-608-1 .
  • Yukihiro Matsumoto . Ruby dióhéjban. - Sebastopol, CA: O'Reilly , 2001. - 224 p. - ISBN 978-0-596-00214-5 .
  • Peter Cooper. Kezdő Ruby. - 3. kiadás - New York : Apress , 2016. - 476 p. — ISBN 978-1484212790 . — ISBN 1484212797 .
  • maláj mandal. Rubinreceptek: problémamegoldó megközelítés. - 1. kiadás - Apress , 2016. - 226 p. — ISBN 978-1484224687 . — ISBN 148422468X .
  • Leonard Richardson, Lucas Carlson. Ruby Cookbook: Receptek az objektum-orientált szkriptekhez. - 2. kiadás - Sebastopol, CA: O'Reilly_Media , 2015. - 992 p. — ISBN 978-1449373719 . — ISBN 1449373712 .

Elektronikus formában:

Linkek