Ruby (programmeringsspråk)
Paradigm | Multiparadigm : funktionell , imperativ , objektorienterad , reflekterande |
---|---|
Designad av | Yukihiro Matsumoto |
Utvecklare | Yukihiro Matsumoto, et al. |
Dök först upp | 1995 |
Stabil frisättning | |
Maskinskrivningsdisciplin | Anka , dynamisk , stark |
Omfattning | Lexikal, ibland dynamisk |
Implementeringsspråk | C |
OS | Cross-plattform |
Licens | Ruby-licens |
Filnamnstillägg | .rb |
Hemsida | ruby-lang.org |
Stora implementeringar | |
Ruby MRI , Truffleruby , Yarv , Rubinius , Maglev , Jruby , MacRuby , Rubymotion , Mruby , Ironruby | |
påverkad cloJure , Coffeascript , kappinskript Crystal , D , Elixir , Groovy , Ioke, Julia , Mirah , Nu , Ring , Rust , Swift | |
av | |
Ada , Basic , C ++ , Clu , Dylan , Eiffel , Lisp , Lua , Perl , Python , SmallTalK | |
påverkar | |
|
Ruby är ett tolkat , högnivå , allmänt programmeringsspråk som stöder flera programmeringsparadigm . Den designades med tonvikt på programmeringsproduktivitet och enkelhet. I Ruby är allt ett objekt, inklusive primitiva datatyper . Den utvecklades i mitten av 1990-talet av Yukihiro "Matz" Matsumoto i Japan .
Ruby är dynamiskt maskinskriven och använder sophämtning och just-in-time kompilering . Den stöder flera programmeringsparadigm, inklusive procedur- , objektorienterad och funktionell programmering . Enligt skaparen var Ruby influerad av Perl , Smalltalk , Eiffel , Ada , BASIC , Java och Lisp .
Historia
Tidigt koncept
Matsumoto har sagt att Ruby föddes 1993. I ett inlägg från 1999 på ruby-talk- postlistan beskriver han några av sina tidiga idéer om språket:
Jag pratade med min kollega om möjligheten till ett objektorienterat skriptspråk. Jag kände Perl (Perl4, inte Perl5), men jag gillade det inte riktigt, eftersom det luktade ett leksaksspråk (det har det fortfarande). Det objektorienterade språket verkade mycket lovande. Jag kände Python då. Men jag gillade det inte, för jag trodde inte att det var ett riktigt objektorienterat språk – OO-funktioner verkade vara tillägg till språket. Som språkgalning och OO-fan i 15 år ville jag verkligen ha ett äkta objektorienterat, lättanvänt skriptspråk. Jag letade men hittade ingen. Så jag bestämde mig för att göra det.
Matsumoto beskriver designen av Ruby som att vara som ett enkelt Lisp- språk i sin kärna, med ett objektsystem som det hos Smalltalk, block inspirerade av högre ordningsfunktioner och praktisk nytta som Perl.
Namnet "Ruby" uppstod under en chattsession online mellan Matsumoto och Keiju Ishitsuka den 24 februari 1993, innan någon kod hade skrivits för språket. Inledningsvis föreslogs två namn: " Coral " och " Ruby ". Matsumoto valde det senare i ett senare e-postmeddelande till Ishitsuka. Matsumoto noterade senare en faktor vid valet av namnet "Ruby" - det var en av hans kollegors födelsesten .
Tidiga släpp
Den första offentliga utgåvan av Ruby 0.95 tillkännagavs på japanska inhemska nyhetsgrupper den 21 december 1995. Därefter släpptes ytterligare tre versioner av Ruby på två dagar. Utgivningen sammanföll med lanseringen av den japanska rubinlistans e- postlista, som var den första sändlistan för det nya språket.
Redan närvarande i detta utvecklingsstadium fanns många av de funktioner som är bekanta i senare utgåvor av Ruby, inklusive objektorienterad design, klasser med arv, mixins , iteratorer , stängningar , undantagshantering och sophämtning .
Efter lanseringen av Ruby 0.95 1995 släpptes flera stabila versioner av Ruby under de följande åren:
- Ruby 1.0: 25 december 1996
- Ruby 1.2: December 1998
- Ruby 1.4: Augusti 1999
- Ruby 1.6: September 2000
1997 publicerades den första artikeln om Ruby på webben. Samma år anställdes Matsumoto av netlab.jp för att arbeta på Ruby som heltidsutvecklare.
1998 lanserades Ruby Application Archive av Matsumoto, tillsammans med en enkel engelskspråkig hemsida för Ruby.
ruby-talken på engelska, vilket signalerade ett växande intresse för språket utanför Japan. Samma år skrev Matsumoto och Keiju Ishitsuka den första boken om Ruby, The Object-oriented Scripting Language Ruby (オブジェクト指向スクリプト言語 Ruby), som publicerades i Japan i början av oktober 1990. Den skulle följas upp i början av oktober 1900. 20 böcker om Ruby publicerade på japanska.
År 2000 var Ruby mer populär än Python i Japan. I september 2000 trycktes den första engelskspråkiga boken Programmering Ruby , som senare släpptes fritt för allmänheten, vilket ytterligare vidgade antagandet av Ruby bland engelsktalande. I början av 2002 fick den engelskspråkiga ruby-talk- sändlistan fler meddelanden än den japanska ruby-listan , vilket visar Rubys ökande popularitet i den icke-japansktalande världen.
Ruby 1.8 och 1.9
Ruby 1.8 släpptes ursprungligen i augusti 2003, var stabil under lång tid och togs bort i juni 2013. Även om det föråldrades finns det fortfarande kod baserad på det. Ruby 1.8 är endast delvis kompatibel med Ruby 1.9.
Ruby 1.8 har varit föremål för flera industristandarder. Språkspecifikationerna för Ruby har utvecklats av Open Standards Promotion Center vid Information-Technology Promotion Agency (en japansk statlig myndighet) för inlämning till Japanese Industrial Standards Committee (JISC) och sedan till International Organization for Standardization (ISO). Den accepterades som en japansk industristandard (JIS X 3017) 2011 och en internationell standard (ISO/IEC 30170) 2012.
Runt 2005 ökade intresset för Ruby-språket i takt med Ruby on Rails , ett webbramverk skrivet i Ruby. Rails krediteras ofta med ökad medvetenhet om Ruby.
Med Ruby 1.9.3, släppt den 31 oktober 2011, bytte Ruby från att vara dubbellicensierad under Ruby-licensen och GPL till att vara dubbellicensierad under Ruby-licensen och BSD-licensen med två klausuler. Antagandet av 1.9 bromsades av förändringar från 1.8 som krävde att många populära tredje parts pärlor skrevs om. Ruby 1.9 introducerar många betydande förändringar jämfört med 1.8-serien. Exempel inkluderar:
- blockera lokala variabler (variabler som är lokala för blocket där de deklareras)
- en extra lambda- syntax:
f = -> ( a , b ) { sätter a + b }
- en extra bokstavlig hashsyntax med kolon för symbolnycklar:
{ symbol_key : "value" } == { :symbol_key => "value" }
- teckenkodningar per sträng stöds
- nytt socket API ( IPv6- stöd)
-
require_relative
importsäkerhet
Ruby 2
Ruby 2.0 var tänkt att vara helt bakåtkompatibel med Ruby 1.9.3. Från och med den officiella 2.0.0-versionen den 24 februari 2013 fanns det bara fem kända (mindre) inkompatibiliteter. Ruby 2.0 har lagt till flera nya funktioner, inklusive:
- metod sökordsargument,
- en ny metod,
Module#prepend
, för att utöka en klass, - en ny bokstavlig för att skapa en rad symboler,
- nytt API för lat utvärdering av Enumerables, och
- en ny konvention för att använda #to_h för att konvertera objekt till hashes.
Från och med 2.1.0 ändrades Rubys versionspolicy för att vara mer lik semantisk versionering .
Ruby 2.2.0 innehåller snabbare, buggfixar och biblioteksuppdateringar och tar bort några föråldrade API:er. Mest anmärkningsvärt är att Ruby 2.2.0 introducerar ändringar i minneshanteringen – en inkrementell sopsamlare, stöd för skräpinsamling av symboler och möjligheten att kompilera direkt mot jemalloc. Den innehåller också experimentellt stöd för att använda vfork (2) med system() och spawn(), och tillagt stöd för Unicode 7.0-specifikationen. Sedan version 2.2.1 har Ruby MRI-prestanda på PowerPC64 förbättrats. Funktioner som gjordes föråldrade eller togs bort inkluderar callcc, DL-biblioteket, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application samt olika C API-funktioner.
Ruby 2.3.0 innehåller många prestandaförbättringar, uppdateringar och buggfixar inklusive ändringar av Proc#call, Socket och IO-användning av undantagsnyckelord, Thread#name-hantering, passiva standardnät::FTP-anslutningar och Rake som tas bort från stdlib. Andra anmärkningsvärda förändringar inkluderar:
- Möjligheten att markera alla strängliteraler som frysta som standard med en följaktligen stor prestandaökning i strängoperationer.
- Hash-jämförelse för att möjliggöra direkt kontroll av nyckel/värdepar istället för bara nycklar.
- En ny säker navigationsoperatör
&.
som kan underlätta nollhantering (t.ex. istället förif obj && obj . foo && obj . foo . bar
, vi kan användaif obj&.foo&.bar
). - Did_you_mean pärlan är nu buntad som standard och krävs vid start för att automatiskt föreslå liknande namnmatchningar på en NameError eller NoMethodError .
-
Hash#dig och Array#dig för att enkelt extrahera djupt kapslade värden (t.ex. given
social profile = { social : { wikipedia : { name : 'Foo Baz' } } }
, värdet Foo Baz kan nu hämtas avprofile.dig(:
, :wikipedia, :namn)
). -
.grep_v(regexp)
som matchar alla negativa exempel på ett givet reguljärt uttryck förutom andra nya funktioner.
Ruby 2.4.0 innehåller prestandaförbättringar för hashtabell, Array#max, Array#min och instansvariabel åtkomst. Andra anmärkningsvärda förändringar inkluderar:
- Binding#irb: Starta en REPL-session som liknar binding.pry
- Förena Fixnum och Bignum till heltalsklass _
- String stöder Unicode-case-mappningar, inte bara ASCII
- En ny metod, Regexp#match?, som är en snabbare boolesk version av Regexp#match
- Detektering av dödläge för tråd visar nu trådar med deras bakåtspårning och beroende
Några anmärkningsvärda förändringar i Ruby 2.5.0 inkluderar räddning och säkerställande av att uttalanden automatiskt använder ett omgivande slutblock (mindre behov av extra startslutblock ), metodkedja med yield_self , stöd för grentäckning och metodtäckningsmätning och enklare Hash-transformationer med Hash#slice och Hash#transform_keys Utöver det kommer många prestandaförbättringar som snabbare blockpassering (3 gånger snabbare), snabbare Mutexes, snabbare ERB-mallar och förbättringar av vissa sammanlänkningsmetoder.
Några anmärkningsvärda ändringar i Ruby 2.6.0 inkluderar en experimentell just-in-time kompilator (JIT) och RubyVM::AbstractSyntaxTree (experimentell).
Några anmärkningsvärda ändringar i Ruby 2.7.0 inkluderar mönstermatchning (experimentell), REPL-förbättringar, en komprimerings-GC och separation av positions- och nyckelordsargument.
Ruby 3
Ruby 3.0.0 släpptes på juldagen 2020. Det är känt som Ruby 3x3 vilket innebär att program skulle köras tre gånger snabbare i Ruby 3.0 jämfört med Ruby 2.0. och några hade redan implementerat i mellanutgåvor på vägen från 2 till 3. För att uppnå 3x3 kommer Ruby 3 med MJIT, och senare YJIT, Just-In-Time Compilers, för att göra program snabbare, även om de beskrivs som experimentella och förblir inaktiverad som standard (aktiverad av flaggor vid körning).
Ett annat mål med Ruby 3.0 är att förbättra samtidighet och ytterligare två verktyg Fiber Scheduler, och experimentell Ractor underlättar målet. Ractor är lätt och trådsäker eftersom det uppnås genom att utbyta meddelanden snarare än delade föremål.
Ruby 3.0 introducerar RBS-språk för att beskriva typerna av Ruby-program för statisk analys . Det är skilt från allmänna Ruby-program.
Det finns några syntaxförbättringar och biblioteksändringar i Ruby 3.0 också.
Ruby 3.1 släpptes på juldagen 2021. Den innehåller YJIT, en ny, experimentell Just-In-Time-kompilator utvecklad av Shopify , för att förbättra prestandan för verkliga affärsapplikationer. En ny debugger ingår också. Det finns några syntaxförbättringar och andra förbättringar i den här utgåvan. Nätverksbibliotek för FTP , SMTP , IMAP och POP flyttas från standardädelstenar till buntade ädelstenar.
Ruby 3.2 släpptes på juldagen 2022. Det ger stöd för att köras inuti en WebAssembly- miljö via ett WASI-gränssnitt. Reguljära uttryck får också vissa förbättringar, inklusive en snabbare, memoiserad matchningsalgoritm för att skydda mot vissa ReDoS- attacker, och konfigurerbara tidsgränser för matchning av reguljära uttryck. Ytterligare felsöknings- och syntaxfunktioner ingår också i den här utgåvan, som inkluderar syntaxförslag samt felmarkering. MJIT-kompilatorn har återimplementerats som en standardbiblioteksmodul, medan YJIT, en Rust -baserad JIT- kompilator nu stöder fler arkitekturer på Linux.
Tabell över versioner
Version | Senaste teeny version | Inledande releasedatum | Slut på stödfasen | Slut på säkerhetsunderhållsfasen |
---|---|---|---|---|
1.0 | — | 1996-12-25 | — | — |
1.8 | 1.8.7-p375 | 2003-08-04 | 2012-06 | 2014-07-01 |
1.9 | 1.9.3-p551 | 2007-12-25 | 2014-02-23 | 2015-02-23 |
2.0 | 2.0.0-p648 | 2013-02-24 | 2015-02-24 | 2016-02-24 |
2.1 | 2.1.10 | 2013-12-25 | 2016-03-30 | 2017-03-31 |
2.2 | 2.2.10 | 2014-12-25 | 2017-03-28 | 2018-03-31 |
2.3 | 2.3.8 | 2015-12-25 | 2018-06-20 | 2019-03-31 |
2.4 | 2.4.10 | 2016-12-25 | 2019-04-01 | 2020-04-01 |
2.5 | 2.5.9 | 2017-12-25 | 2021-04-05 | 2021-04-05 |
2.6 | 2.6.10 | 2018-12-25 | 2021-04-05 | 2022-04-05 |
2.7 | 2.7.7 | 2019-12-25 | 2022-04-12 | 2023-03-31 |
3.0 | 3.0.5 | 2020-12-25 | 2023-03-31 | TBA |
3.1 | 3.1.3 | 2021-12-25 | TBA | TBA |
3.2 | 3.2.0 | 2022-12-25 | TBA | TBA |
Legend:
Gammal version
Äldre version, fortfarande underhållen
Senaste versionen
|
Semantik och filosofi
Matsumoto har sagt att Ruby är designad för programmerares produktivitet och nöje, enligt principerna för bra användargränssnittsdesign . Vid ett Google Tech Talk 2008 sa Matsumoto vidare: "Jag hoppas att Ruby hjälper alla programmerare i världen att vara produktiva och att njuta av programmering och att vara lycklig. Det är det primära syftet med Ruby-språket." Han betonar att systemdesign måste betona mänskliga, snarare än datorbehov:
Ofta fokuserar människor, särskilt dataingenjörer, på maskinerna. De tänker: "Genom att göra detta kommer maskinen att köra snabbt. Genom att göra detta kommer maskinen att köras mer effektivt. Genom att göra detta kommer maskinen att göra något något något." De fokuserar på maskiner. Men i själva verket måste vi fokusera på människor, på hur människor bryr sig om att programmera eller använda maskinernas tillämpning. Vi är mästarna. De är slavarna.
Matsumoto har sagt att hans primära designmål var att skapa ett språk som han själv tyckte om att använda, genom att minimera programmeringsarbete och eventuell förvirring. Han har sagt att han inte hade tillämpat principen om minsta häpnad (POLA) på designen av Ruby; i en diskussion i maj 2005 på nyhetsgruppen comp.lang.ruby, försökte Matsumoto distansera Ruby från POLA och förklarade att eftersom varje designval kommer att vara överraskande för någon använder han en personlig standard för att utvärdera överraskning. Om den personliga standarden förblir konsekvent, skulle det bli få överraskningar för dem som är bekanta med standarden.
Matsumoto definierade det så här i en intervju:
Alla har en individuell bakgrund. Någon kan komma från Python, någon annan kan komma från Perl, och de kan bli överraskade av olika aspekter av språket. Sedan kommer de fram till mig och säger: 'Jag blev förvånad över denna egenskap hos språket, så Ruby bryter mot principen om minsta överraskning.' Vänta. Vänta. Principen om minsta överraskning är inte bara för dig. Principen om minsta överraskning betyder principen om minsta överraskning . Och det innebär principen om minsta överraskning efter att du lärt dig Ruby mycket bra. Till exempel var jag en C++-programmerare innan jag började designa Ruby. Jag programmerade i C++ exklusivt i två eller tre år. Och efter två år av C++-programmering överraskar det mig fortfarande.
Ruby är objektorienterad : varje värde är ett objekt, inklusive klasser och instanser av typer som många andra språk betecknar som primitiva (som heltal , booleaner och " null "). Variabler innehåller alltid referenser till objekt. Varje funktion är en metod och metoder anropas alltid på ett objekt. Metoder som definieras på toppnivån blir metoder i klassen Object. Eftersom denna klass är en förfader till alla andra klasser kan sådana metoder anropas på vilket objekt som helst. De är också synliga i alla omfattningar och fungerar effektivt som "globala" procedurer. Ruby stöder nedärvning med dynamiska utskick , mixins och singleton-metoder (tillhör och definierade för en enskild instans snarare än att vara definierade i klassen). Även om Ruby inte stöder flera arv , kan klasser importera moduler som mixins.
Ruby har beskrivits som ett programmeringsspråk med flera paradigm : det tillåter procedurprogrammering (definiering av funktioner/variabler utanför klasser gör dem till en del av roten, 'självobjektet'), med objektorientering (allt är ett objekt) eller funktionell programmering ( det har anonyma funktioner , stängningar och fortsättningar ; alla uttalanden har värden och funktioner returnerar den senaste utvärderingen). Den har stöd för introspektion , reflektion och metaprogrammering , samt stöd för tolkbaserade trådar . Ruby har dynamisk typning och stöder parametrisk polymorfism .
Enligt Ruby FAQ liknar syntaxen Perls och semantiken liknar Smalltalks , men designfilosofin skiljer sig mycket från Pythons .
Funktioner
- Grundligt objektorienterad med arv , mixins och metaklasser
- Dynamisk typning och duck typing
- Allt är ett uttryck (även uttalanden ) och allt utförs imperativt (även deklarationer )
- Kortfattad och flexibel syntax som minimerar syntaktisk brus och fungerar som en grund för domänspecifika språk
- Dynamisk reflektion och förändring av objekt för att underlätta metaprogrammering
- Lexikaliska stängningar , iteratorer och generatorer , med en blocksyntax
- Bokstavlig notation för arrayer , hash , reguljära uttryck och symboler
- Bädda in kod i strängar ( interpolation )
- Standardargument
- Fyra nivåer av variabel omfattning ( global , klass , instans och lokal ) betecknade med sigils eller avsaknaden av sådana
- Skräp samling
- Förstklassiga fortsättningar
- Strikta booleska tvångsregler (allt är sant utom
falskt
ochnoll
) - Undantagshantering
- Operatör överbelastning
- Inbyggt stöd för rationella tal , komplexa tal och aritmetik med godtycklig precision
- Anpassat leveransbeteende (via
method_missing
ochconst_missing
) - Inhemska trådar och kooperativa fibrer (fibrer är en 1,9/ YARV -funktion)
- Stöd för Unicode och flera teckenkodningar .
- Native plug-in API i C
- Interactive Ruby Shell, en interaktiv kommandoradstolk som kan användas för att testa kod snabbt ( REPL )
- Centraliserad pakethantering genom RubyGems
- Implementerat på alla större plattformar
- Stort standardbibliotek, inklusive moduler för YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , curses , zlib och Tk
- Just-in-time sammanställning
Syntax
Syntaxen för Ruby liknar i stort sett den för Perl och Python . Klass- och metoddefinitioner signaleras av nyckelord, medan kodblock kan definieras av antingen nyckelord eller klammerparenteser. I motsats till Perl är variabler inte obligatoriskt prefixerade med en sigil . När den används ändrar sigil semantiken för variabelns omfattning. Av praktiska skäl görs ingen skillnad mellan uttryck och påståenden . Radbrytningar är betydande och tas som slutet på ett påstående; ett semikolon kan användas på motsvarande sätt. Till skillnad från Python är indrag inte signifikant.
En av skillnaderna från Python och Perl är att Ruby håller alla sina instansvariabler helt privata för klassen och bara exponerar dem genom accessormetoder ( attr_writer
, attr_reader
, etc.). Till skillnad från "getter" och "setter" metoderna för andra språk som C++ eller Java , kan accessor metoder i Ruby skapas med en enda rad kod via metaprogrammering ; dock kan accessormetoder också skapas på traditionellt sätt med C++ och Java. Eftersom anropande av dessa metoder inte kräver användning av parentes, är det trivialt att ändra en instansvariabel till en fullständig funktion, utan att ändra en enda rad med anropskod eller behöva göra någon refactoring för att uppnå liknande funktionalitet som C# och VB.NET - egenskapen medlemmar.
Pythons egenskapsbeskrivningar är liknande, men kommer med en avvägning i utvecklingsprocessen. Om man börjar i Python med att använda en offentligt exponerad instansvariabel, och senare ändrar implementeringen till att använda en privat instansvariabel exponerad genom en egenskapsdeskriptor, kan kod internt i klassen behöva justeras för att använda den privata variabeln snarare än den offentliga egenskapen . Rubys design tvingar alla instansvariabler att vara privata, men ger också ett enkelt sätt att deklarera set
och få
metoder. Detta är i linje med tanken att man i Ruby aldrig direkt kommer åt de interna medlemmarna i en klass utanför klassen; snarare skickar man ett meddelande till klassen och får ett svar.
Genomföranden
Matz's Ruby-tolk
Den ursprungliga Ruby- tolken kallas ofta Matz's Ruby Interpreter eller MRI. Denna implementering är skriven i C och använder sin egen Ruby-specifika virtuella maskin .
Den standardiserade och pensionerade implementeringen av Ruby 1.8 skrevs i C , som ett engångstolkat språk .
Från och med Ruby 1.9, och fortsätter med Ruby 2.x och högre, har den officiella Ruby-tolken varit YARV ("Yet Another Ruby VM"), och denna implementering har ersatt den långsammare virtuella maskinen som användes i tidigare utgåvor av MRI.
Alternativa implementeringar
Från och med 2018 finns det ett antal alternativa implementeringar av Ruby, inklusive JRuby , Rubinius och mruby . Var och en har olika tillvägagångssätt, där JRuby och Rubinius tillhandahåller just-in-time-kompilering och mruby tillhandahåller även kompilering i förväg .
Ruby har tre stora alternativa implementeringar:
- JRuby , en blandad Java- och Ruby-implementering som körs på den virtuella Java-maskinen . JRuby riktar sig för närvarande till Ruby 3.1.x.
- TruffleRuby, en Java-implementering som använder Truffle-språkimplementeringsramverket med GraalVM
- Rubinius , en virtuell C++ bytekodmaskin som använder LLVM för att kompilera till maskinkod vid körning. Bytekodkompilatorn och de flesta kärnklasser är skrivna i ren Ruby. Rubinius riktar sig för närvarande till Ruby 2.3.1.
Andra Ruby-implementationer inkluderar:
- MagLev , en Smalltalk- implementering som körs på GemTalk Systems GemStone/S VM
- mruby , en implementering designad för att bäddas in i C-kod, på samma sätt som Lua . Det utvecklas för närvarande av Yukihiro Matsumoto och andra
- RGSS , eller Ruby Game Scripting System, en proprietär implementering som används av RPG Maker -serien av programvara för speldesign och modifiering av RPG Maker-motorn
- julializer, en transpiler (delvis) från Ruby till Julia . Den kan användas för en stor hastighetshöjning jämfört med t.ex. Ruby- eller JRuby-implementationer (kan bara vara användbar för numerisk kod).
- Topaz, en Ruby-implementation skriven i Python
- Opal, en webbaserad tolk som kompilerar Ruby till JavaScript
Andra nu nedlagda Ruby-implementationer var:
- MacRuby , en Mac OS X- implementering på Objective-C runtime. Dess iOS-motsvarighet heter RubyMotion
- IronRuby en implementering på .NET Framework
- Cardinal, en implementering för den virtuella maskinen Parrot
- Ruby Enterprise Edition , ofta förkortad till ree , en implementering optimerad för att hantera storskaliga Ruby on Rails -projekt
- HotRuby , en JavaScript- och ActionScript- implementering av programmeringsspråket Ruby
Mognad av Ruby-implementeringar tenderar att mätas genom deras förmåga att köra Ruby on Rails (Rails) ramverket, eftersom det är komplext att implementera och använder många Ruby-specifika funktioner. Punkten när en viss implementering uppnår detta mål kallas "The Rails singularity". Referensimplementeringen, JRuby, och Rubinius kan alla köra Rails oförändrade i en produktionsmiljö.
Plattformsstöd
Matsumoto utvecklade ursprungligen Ruby på det 4.3BSD -baserade Sony NEWS-OS 3.x, men migrerade senare sitt arbete till SunOS 4.x och slutligen till Linux . År 1999 var Ruby känd för att fungera med många olika operativsystem . Moderna Ruby-versioner och implementeringar finns tillgängliga på alla större stationära, mobila och serverbaserade operativsystem. Ruby stöds också över ett antal molnvärdplattformar som Jelastic , Heroku , Google Cloud Platform och andra.
Verktyg som RVM och RBEnv, underlättar installation och partitionering av flera rubyversioner och flera "gemsets" på en maskin.
Förvar och bibliotek
RubyGems är Rubys pakethanterare. Ett Ruby-paket kallas en "pärla" och kan installeras via kommandoraden. De flesta ädelstenar är bibliotek, även om det finns ett fåtal som är applikationer, till exempel IDE . Det finns över 100 000 Ruby-ädelstenar på RubyGems.org .
Många nya och befintliga Ruby-bibliotek finns på GitHub , en tjänst som erbjuder värd för versionskontroll för Git .
Ruby Application Archive, som var värd för applikationer, dokumentation och bibliotek för Ruby-programmering, bibehölls till 2013, då dess funktion överfördes till RubyGems.
Se även
- Jämförelse av programmeringsspråk
- Metasploit-projektet
- Varför är (gripande) guide till Ruby
- Crystal (programmeringsspråk)
- Ruby on Rails
Vidare läsning
- Black, David; Leo, Joseph (15 mars 2019), The Well-Grounded Rubyist (tredje upplagan), Manning Publications , sid. 584, ISBN 978-1617295218
- Metz, Sandi (22 augusti 2018), Practical Object-Oriented Design: An Agile Primer Using Ruby (andra upplagan), Addison-Wesley Professional , sid. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (12 juli 2016), Beginning Ruby: From Novice to Professional (tredje upplagan), Apress , sid. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (3 april 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (andra upplagan), O'Reilly Media , sid. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2 mars 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (tredje upplagan), Addison-Wesley Professional , sid. 816, ISBN 978-0-321-71463-3
- Thomas, Dave; Fowler, Tchad; Hunt, Andy (7 juli 2013), Programmering Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (fjärde upplagan), Pragmatic Bookshelf , sid. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (28 mars 2009), Ruby in Practice (Första upplagan), Manning Publications , sid. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (25 januari 2008), The Ruby Programming Language (Första upplagan), O'Reilly Media , sid. 446 , ISBN 978-0-596-51617-8
- Baird, Kevin (8 juni 2007), Ruby by Example: Concepts and Code (Första upplagan), No Starch Press , sid. 326, ISBN 978-1593271480
- Fitzgerald, Michael (14 maj 2007), Learning Ruby (första upplagan), O'Reilly Media , sid. 255 , ISBN 978-0-596-52986-4
externa länkar
- Klassbaserade programmeringsspråk
- Dynamiska programmeringsspråk
- Dynamiskt typade programmeringsspråk
- Gratis kompilatorer och tolkar
- Gratis programvara programmerad i C
- ISO-standarder
- japanska uppfinningar
- Flerparadigm programmeringsspråk
- Objektorienterade programmeringsspråk
- Programmeringsspråk skapade 1995
- Programmeringsspråk med en ISO-standard
- Ruby (programmeringsspråk)
- Skriptspråk
- Programvara som använder BSD-licensen
- Textorienterade programmeringsspråk