Rubyn historia - History of Ruby

Tämä on Rubyn ohjelmointikielen historia .

Käsitys

Matsumoto on sanonut, että Ruby syntyi vuonna 1993. Vuonna 1999 julkaistussa ruby-talk- postituslistan postauksessa hän kuvailee joitain varhaisia ​​ajatuksiaan kielestä:

Puhuin kollegani kanssa olio-ohjelmointikielen mahdollisuudesta. Tiesin Perlin (Perl4, ei Perl5), mutta en pitänyt siitä todella, koska sillä oli leikkikielen tuoksu (se on edelleen). Objektiivinen kieli vaikutti erittäin lupaavalta. Tunsin Pythonin silloin. Mutta en pitänyt siitä, koska en usko, että se oli todellinen olio-suuntautunut kieli-OO-ominaisuudet näyttivät olevan lisäkieli. Kielihullut ja OO-fanit 15 vuoden ajan halusin todella aitoa olio-objektiivista, helppokäyttöistä komentosarjakieltä. Etsin, mutta en löytänyt. Joten päätin pärjätä.

Matsumoto kuvailee Rubyn suunnittelun olevan ytimessään yksinkertaisen lisp- kielen, jossa on Smalltalkin kaltainen objektijärjestelmä, korkeamman tason toimintojen innoittamat lohkot ja käytännöllinen hyödyllisyys, kuten Perlin.

Nimi "Ruby" syntyi Matsumoton ja Keiju Ishitsukan välisessä online -chat -istunnossa 24. helmikuuta 1993, ennen kuin mitään kieltä varten oli kirjoitettu koodi. Aluksi ehdotettiin kahta nimeä: " Coral " ja " Ruby ". Matsumoto valitsi jälkimmäisen myöhemmin Ishitsukalle lähetetyssä sähköpostissa. Matsumoto huomasi myöhemmin tekijän nimen "Ruby" valinnassa - se oli yhden hänen kollegansa syntymäkivi .

Ensimmäinen julkaisu

Ensimmäinen julkinen Ruby 0.95 -julkaisu julkistettiin japanilaisissa kotimaisissa uutisryhmissä 21. joulukuuta 1995. Myöhemmin kolme uutta Ruby -versiota julkaistiin kahden päivän kuluessa. Julkaisu tapahtui samanaikaisesti japanilaisen ruby-listan postituslistan julkaisemisen kanssa , joka oli uuden kielen ensimmäinen postituslista.

Jo tässä kehitysvaiheessa oli monia Rubyn myöhemmissä julkaisuissa tuttuja ominaisuuksia, mukaan lukien olio- suunnittelu, perinnölliset luokat , miksit , iteraattorit , sulkimet , poikkeusten käsittely ja roskien kerääminen .

Varhaiset julkaisut

Ruby 0.95: n julkaisun jälkeen vuonna 1995 useita vakaa Ruby -versioita julkaistiin seuraavina vuosina:

  • Ruby 1.0: 25. joulukuuta 1996
  • Ruby 1.2: Joulukuu 1998
  • Ruby 1.4: elokuu 1999
  • Ruby 1.6: syyskuu 2000

Vuonna 1997 ensimmäinen Ruby -artikkeli julkaistiin verkossa. Samana vuonna netlab.jp palkkasi Matsumoton työskentelemään Rubyn parissa kokopäiväisenä kehittäjänä.

Vuonna 1998 Matsumoto lanseerasi Ruby-hakemistoarkiston yhdessä Rubyn yksinkertaisen englanninkielisen kotisivun kanssa.

Vuonna 1999 alkoi ensimmäinen englanninkielinen postituslista ruby-talk , mikä osoitti kasvavaa kiinnostusta kieltä kohtaan Japanin ulkopuolella. Samana vuonna Matsumoto ja Keiju Ishitsuka kirjoittivat ensimmäisen Ruby-kirjan, The Object- Orient Scripting Language Ruby (オ ブ ジ ェ ク ト 指向 ス ク リ プ 言語 Ruby), joka julkaistiin Japanissa lokakuussa 1999. Sitä seurasi 2000-luvun alussa noin 20 japanilaista Ruby -kirjaa.

Vuoteen 2000 mennessä Ruby oli suositumpi kuin Python Japanissa. Syyskuussa 2000 julkaistiin ensimmäinen englanninkielinen kirja Programming Ruby , joka julkaistiin myöhemmin vapaasti yleisölle, mikä lisäsi Rubyn omaksumista englanninkielisten keskuudessa. Vuoden 2002 alussa englanninkielinen ruby-talk- postituslista sai enemmän viestejä kuin japaninkielinen ruby-lista , mikä osoittaa Rubyn kasvavan suosion muussa kuin japaninkielisessä maailmassa.

Rubiini 1.8

Ruby 1.8 julkaistiin alun perin elokuussa 2003. Ruby 1.8 on vain osittain yhteensopiva Ruby 1.9: n kanssa.

Ruby 1.8: sta on tehty useita alan standardeja. Tietotekniikan edistämiskeskuksen ( Japanin valtion virasto) Open Standards Promotion Center (Ruby) kielimääritykset kehitettiin Japanin teollisuusstandardikomitealle (JISC) ja sitten kansainväliselle standardointijärjestölle (ISO) toimitettavaksi. Se hyväksyttiin japanilaiseksi teollisuusstandardiksi (JIS X 3017) vuonna 2011 ja kansainväliseksi standardiksi ( ISO/IEC 30170 ) vuonna 2012.

Noin 2005, kiinnostus Ruby kielen kasvoi rinnalla Ruby on Rails , eli web puitteet kirjoitettu Ruby. Railsille myönnetään usein Ruby -tietoisuuden lisääminen.

Rubiini 1.9

Ruby 1.9 julkaistiin joulupäivänä vuonna 2007. Kun Ruby 1.9.3 julkaistiin 31. lokakuuta 2011, Ruby siirtyi kaksoislisenssistä Ruby-lisenssillä ja GPL: llä kaksoislisenssillä Ruby-lisenssin ja kahden lausekkeen BSD lisenssi. 1.9: n käyttöönottoa hidastivat muutokset 1.8: stä, mikä edellytti monien suosittujen kolmansien osapuolten helmien kirjoittamista uudelleen.

Ruby 1.9 tuo monia merkittäviä muutoksia 1.8 -sarjaan. Esimerkkejä ovat:

  • estää paikalliset muuttujat (muuttujat, jotka ovat paikallisia lohkolle , jossa ne on ilmoitettu)
  • ylimääräinen lambda -syntaksi:f = ->(a,b) { puts a + b }
  • ylimääräinen Hash -kirjaimellinen syntaksi käyttämällä kaksoispisteitä symbolinäppäimille:{symbol_key: "value"} == {:symbol_key => "value"}
  • merkkijonokohtaisia merkkikoodauksia tuetaan
  • uusi socket API ( IPv6 -tuki)
  • require_relative tuontiturva

Ruby 1.9 on vanhentunut 23. helmikuuta 2015 lähtien, eikä se saa enää virhe- ja suojauskorjauksia. Käyttäjiä kehotetaan päivittämään uudempaan versioon.

Rubiini 2.0

Ruby 2.0 lisäsi useita uusia ominaisuuksia, kuten:

  • menetelmä avainsana argumentit,
  • uusi menetelmä Module#prependluokan laajentamiseksi,
  • uusi kirjain symboliryhmän luomiseen,
  • uusi sovellusliittymä Enumerablesin laiskalle arvioinnille ja
  • uusi käytäntö #to_h: n käyttämiseksi objektien muuntamiseen hajautuksiksi.

Ruby 2.0: n oli tarkoitus olla täysin taaksepäin yhteensopiva Ruby 1.9.3: n kanssa. Virallisesta 2.0.0 -julkaisusta 24. helmikuuta 2013 lähtien tiedettiin vain viisi (vähäistä) yhteensopimattomuutta.

Ruby 2.0 on ollut vanhentunut 24. helmikuuta 2016 lähtien, eikä se saa enää virhe- ja suojauskorjauksia. Käyttäjiä kehotetaan päivittämään uudempaan versioon.

Rubiini 2.1

Ruby 2.1.0 julkaistiin joulupäivänä vuonna 2013. Julkaisu sisältää nopeutuksia, virheenkorjauksia ja kirjastopäivityksiä.

Alkaen 2.1.0, Rubyn versiointikäytäntö muistuttaa enemmän semanttista versiota . Vaikka Rubyn versiointikäytäntö on samanlainen, se ei ole yhteensopiva semanttisen versioinnin kanssa:

Rubiini Semanttinen versiointi
MAJOR : Lisääntynyt, kun yhteensopimaton muutos, jota ei voi julkaista MINORissa. Varattu erikoistapahtumiin. MAJOR : Lisääntyy, kun teet yhteensopimattomia sovellusliittymämuutoksia.
MINOR : lisääntyy joka joulu, saattaa olla API -yhteensopimaton. MINOR : lisääntynyt, kun lisäät toimintoja taaksepäin yhteensopivalla tavalla.
TEENY : suojaus tai virheenkorjaus, joka ylläpitää API -yhteensopivuutta. Voidaan korottaa yli 10 (kuten 2.1.11), ja se julkaistaan ​​2-3 kuukauden välein. PATCH : lisääntynyt, kun teet taaksepäin yhteensopivia virheenkorjauksia.
PATCH : viimeisten MINOR -julkaisujen jälkeen tehtyjen sitoumusten määrä (nollataan, kun MINOR vapautetaan). -

Semanttinen versiointi tarjoaa myös muita tarroja julkaisua edeltäville versioille ja koontiversion metatiedot ovat saatavilla laajennuksina MAJOR.MINOR.PATCH-muotoon, ei saatavana Rubysta.

Ruby 2.1 on ollut vanhentunut 1.4.2017 lähtien, eikä se saa enää virhe- ja suojauskorjauksia. Käyttäjiä kehotetaan päivittämään uudempaan versioon.

Rubiini 2.2

Ruby 2.2.0 julkaistiin joulupäivänä vuonna 2014. Julkaisu sisältää nopeutuksia, virheenkorjauksia ja kirjastopäivityksiä ja poistaa joitakin vanhentuneita sovellusliittymiä. Erityisesti Ruby 2.2.0 tuo muutoksia muistin käsittelyyn - inkrementaalisen roskien kerääjän, tuen symbolien keräämiseen ja mahdollisuuden kääntää suoraan jemallocia vastaan. Se sisältää myös kokeellisen tuen vfork (2): n käytölle järjestelmän () ja spawn () kanssa, ja lisätty tuki Unicode 7.0 -määritykselle.

Vanhentuneita tai poistettuja ominaisuuksia ovat callcc, DL -kirjasto, Digest :: HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger :: Application sekä erilaiset C -API -toiminnot.

Ruby 2.2 on ollut vanhentunut 1.4.2018 lähtien, eikä se saa enää virhe- ja suojauskorjauksia. Käyttäjiä kehotetaan päivittämään uudempaan versioon.

PowerPC64 -suorituskyky
Versiosta 2.2.1 lähtien Ruby MRI -suorituskykyä PowerPC64: ssä on parannettu.

Rubiini 2.3

Ruby 2.3.0 julkaistiin joulupäivänä vuonna 2015. Muutamia merkittäviä muutoksia ovat:

  • Mahdollisuus merkitä kaikki merkkijonokirjaimet jäädytetyiksi oletusarvoisesti, minkä seurauksena merkkijonotoimintojen suorituskyky kasvaa merkittävästi.
  • Hash -vertailu mahdollistaa avain/arvo -parien suoran tarkistamisen vain avainten sijasta.
  • Uusi turvallinen navigointioperaattori, &. joka voi helpottaa nollakäsittelyä (esim. Sen sijaan , että voimme käyttää ).if obj && obj.foo && obj.foo.barif obj&.foo&.bar
  • Did_you_mean helmi on nyt niputettu oletuksena ja tarvitaan käynnistettäessä automaattisesti ehdottaa samankaltainen nimi ottelu kahden NameError tai NoMethodError .
  • Hash#dig ja Array#dig poimia helposti syvälle sijoitetut arvot (esim. Annettu , Foo Baz -arvo voidaan nyt hakea ).profile = { social: { wikipedia: { name: 'Foo Baz' } } }profile.dig(:social, :wikipedia, :name)
  • .grep_v(regexp) joka vastaa kaikkia negatiivisia esimerkkejä tietystä säännöllisestä lausekkeesta muiden uusien ominaisuuksien lisäksi.

2.3 -haara sisältää myös monia suorituskyvyn parannuksia, päivityksiä ja virheenkorjauksia, mukaan lukien muutokset Proc#-puheluun, Socket- ja IO -poikkeusavainsanojen käyttöön, Thread#-nimen käsittelyyn, passiivisiin oletusarvoisiin Net :: FTP -yhteyksiin ja Rake poistetaan stdlib -tiedostosta.

Rubiini 2.4

Ruby 2.4.0 julkaistiin joulupäivänä vuonna 2016. Muutamia merkittäviä muutoksia ovat:

  • Sidonta#irb: Aloita REPL -istunto, joka on samanlainen kuin bind.pry
  • Yhtenäistä Fixnum ja Bignum osaksi kokonaisluku luokkaan
  • String tukee Unicode -tapauskartoituksia, ei vain ASCII: tä
  • Uusi menetelmä, Regexp#match?, Joka on nopeampi Booen -versio Regexp#matchista
  • Langan umpikujan tunnistus näyttää nyt säikeet, joiden jälki ja riippuvuus ovat

2.4 -haara sisältää myös suorituskyvyn parannuksia tiivistetaulukkoon, Array#max, Array#min ja esiintymän muuttujan käyttöoikeuksiin.

Rubiini 2.5

Ruby 2.5.0 julkaistiin joulupäivänä vuonna 2017. Muutamia merkittäviä muutoksia ovat:

  • pelastus- ja varmistaa lausuntoja käyttää automaattisesti ympäröivän tee-end lohkon (vähemmän tarvetta ylimääräisiä alkaa lopussa lohkoa)
  • Menetelmäketjutus tuotto_maksulla
  • Tukea haaran kattavuutta ja menetelmän kattavuuden mittaamista
  • Helpompaa Hash -muunnosta Hash#siivu ja Hash#transform_keys avulla

Tämän lisäksi on paljon suorituskyvyn parannuksia, kuten nopeampi lohkojen kulku (3 kertaa nopeampi), nopeammat Mutexit, nopeammat ERB -mallit ja parannukset joihinkin ketjutusmenetelmiin.

Rubiini 2.6

Ruby 2.6.0 julkaistiin joulupäivänä vuonna 2018. Muutamia merkittäviä muutoksia ovat:

  • JIT (kokeellinen)
  • RubyVM :: AbstractSyntaxTree (kokeellinen)

Rubiini 2.7

Ruby 2.7.0 julkaistiin joulupäivänä vuonna 2019. Muutamia merkittäviä muutoksia ovat:

  • Kuvioiden täsmäytys (kokeellinen)
  • REPL -parannus
  • Tiivistys GC
  • Sijainti- ja avainsana -argumenttien erottaminen

Rubiini 3.0

Ruby 3.0.0 julkaistiin joulupäivänä vuonna 2020. Se tunnetaan nimellä Ruby 3x3. Yksi sen päätavoitteista oli kääntää tulkki Just-In-Time Compileriksi, jotta ohjelmat nopeutuisivat.

Versiotaulukko

Versio Viimeisin teeny versio Ensimmäinen julkaisupäivä Tukivaiheen loppu Turvallisuuden ylläpitovaiheen loppu
Vanha versio, ei enää yllä: 1.0 NA 1996-12-25 NA NA
Vanha versio, ei enää yllä: 1.8 1.8.7-p375 2003-08-04 2012-06 2014-07-01
Vanha versio, ei enää yllä: 1.9 1.9.3-p551 2007-12-25 23.02.2014 23.2.2015
Vanha versio, ei enää yllä: 2.0 2.0.0-p648 24.02.2013 2015-02-24 24.02.2016
Vanha versio, ei enää yllä: 2.1 2.1.10 2013-12-25 30.3.2016 2017-03-31
Vanha versio, ei enää yllä: 2.2 2.2.10 2014-12-25 2017-03-28 2018-03-31
Vanha versio, ei enää yllä: 2.3 2.3.8 2015-12-25 2018-06-20 2019-03-31
Vanha versio, ei enää yllä: 2.4 2.4.10 2016-12-25 2019-04-01 2020-04-01
Vanha versio, ei enää yllä: 2.5 2.5.9 2017-12-25 2021-04-05 2021-04-05
Vanhempi versio, mutta silti ylläpidetty: 2.6 2.6.7 2018-12-25 2021-04-05 2022-04-05
Vanhempi versio, mutta silti ylläpidetty: 2.7 2.7.3 2019-12-25 TBA TBA
Nykyinen vakaa versio: 3.0 3.0.1 2020-12-25 TBA TBA
Legenda:
Vanha versio
Vanhempi versio, edelleen ylläpidetty
Uusin versio
Uusin esikatseluversio
Tuleva julkaisu

Viitteet