Rubins historie - History of Ruby

Dette er en historie om programmeringsspråket Ruby .

Oppfatning

Matsumoto har sagt at Ruby ble unnfanget i 1993. I et innlegg fra 1999 på postlisten for rubin-talk beskriver han noen av sine tidlige ideer om språket:

Jeg snakket med min kollega om muligheten for et objektorientert skriptspråk. Jeg kjente Perl (Perl4, ikke Perl5), men jeg likte det egentlig ikke, fordi det hadde lukten av et leketøyspråk (det har det fortsatt). Det objektorienterte språket virket veldig lovende. Jeg kjente Python da. Men jeg likte det ikke, fordi jeg ikke trodde det var et ekte objektorientert språk-OO-funksjoner syntes å være et tillegg til språket. Som språkgal og OO-fan i 15 år ønsket jeg virkelig et ekte objektorientert, brukervennlig skriptspråk. Jeg lette etter, men fant ikke en. Så jeg bestemte meg for å klare det.

Matsumoto beskriver designet til Ruby som et enkelt Lisp- språk i kjernen, med et objektsystem som Smalltalk, blokker inspirert av funksjoner av høyere orden og praktisk nytte som Perl.

Navnet "Ruby" oppsto under en online chat -økt mellom Matsumoto og Keiju Ishitsuka 24. februar 1993, før noen kode var skrevet for språket. Opprinnelig ble to navn foreslått: " Coral " og " Ruby ". Matsumoto valgte sistnevnte i en senere e-post til Ishitsuka. Matsumoto bemerket senere en faktor ved valget av navnet "Ruby" - det var fødselssteinen til en av hans kolleger.

Første publikasjon

Den første offentlige utgivelsen av Ruby 0.95 ble kunngjort på japanske innenlandske nyhetsgrupper 21. desember 1995. Deretter ble tre versjoner til av Ruby utgitt på to dager. Utgivelsen sammenfaller med lanseringen av den japanskspråklige ruby-liste postliste, som var den første e-postliste for det nye språket.

Allerede til stede på dette utviklingsstadiet var mange av funksjonene kjent i senere utgivelser av Ruby, inkludert objektorientert design, klasser med arv, mixins , iteratorer , nedleggelser , unntakshåndtering og søppelinnsamling .

Tidlige utgivelser

Etter utgivelsen av Ruby 0.95 i 1995 ble flere stabile versjoner av Ruby utgitt de følgende årene:

  • Ruby 1.0: 25. desember 1996
  • Ruby 1.2: desember 1998
  • Ruby 1.4: august 1999
  • Ruby 1.6: september 2000

I 1997 ble den første artikkelen om Ruby publisert på nettet. Samme år ble Matsumoto ansatt av netlab.jp for å jobbe på Ruby som utvikler på heltid.

I 1998 ble Ruby Application Archive lansert av Matsumoto, sammen med en enkel engelskspråklig hjemmeside for Ruby.

I 1999 begynte den første engelskspråklige postlisten ruby-talk , noe som signaliserte en økende interesse for språket utenfor Japan. Samme år skrev Matsumoto og Keiju Ishitsuka den første boken om Ruby, The Object-oriented Scripting Language Ruby (オ ブ ジ ェ ク 指向 ス ク リ プ ト 言語 Ruby), som ble utgitt i Japan i oktober 1999. Den ville bli fulgt på begynnelsen av 2000-tallet av rundt 20 bøker om Ruby utgitt på japansk.

I 2000 var Ruby mer populær enn Python i Japan. I september 2000 ble den første engelskspråklige boken Programming Ruby skrevet ut, som senere ble fritt utgitt for publikum, noe som utvidet adopsjonen av Ruby blant engelsktalende. I begynnelsen av 2002 mottok den engelskspråklige postlisten ruby-talk flere meldinger enn den japanskspråklige rubinlisten , noe som demonstrerte Rubys økende popularitet i den ikke-japansktalende verden.

Rubin 1.8

Ruby 1.8 ble opprinnelig utgitt august 2003, var stabil i lang tid og ble pensjonist juni 2013. Selv om den er avskrevet, er det fortsatt kode basert på den. Ruby 1.8 er bare delvis kompatibel med Ruby 1.9.

Ruby 1.8 har vært gjenstand for flere bransjestandarder. Språkspesifikasjonene for Ruby ble utviklet av Open Standards Promotion Center i Information Technology Promotion Agency (et japansk regjeringsorgan ) for innsending til Japanese Industrial Standards Committee (JISC) og deretter til International Organization for Standardization (ISO). Den ble akseptert som en japansk industristandard (JIS X 3017) i 2011 og en internasjonal standard ( ISO/IEC 30170 ) i 2012.

Rundt 2005 økte interessen for Ruby -språket i takt med Ruby on Rails , et webrammeverk skrevet i Ruby. Rails blir ofte kreditert med økende bevissthet om Ruby.

Rubin 1.9

Ruby 1.9 ble utgitt 1. juledag i 2007. Gyldig med Ruby 1.9.3, utgitt 31. oktober 2011, byttet Ruby fra å være dobbeltlisensiert under Ruby-lisensen og GPL til å være dobbeltlisensiert under Ruby-lisensen og to- klausul BSD -lisens. Adopsjon av 1,9 ble bremset av endringer fra 1,8 som krevde mange populære tredjeparts gems å bli omskrevet.

Ruby 1.9 introduserer mange betydelige endringer i forhold til 1.8 -serien. Eksempler inkluderer:

  • blokker lokale variabler (variabler som er lokale for blokken de deklareres i)
  • en ekstra lambda -syntaks:f = ->(a,b) { puts a + b }
  • en ekstra Hash bokstavelig syntaks ved å bruke kolon for symboltaster:{symbol_key: "value"} == {:symbol_key => "value"}
  • per-streng tegnkoder støttes
  • ny socket API ( IPv6 -støtte)
  • require_relative import sikkerhet

Ruby 1.9 har vært foreldet siden 23. februar 2015, og den vil ikke lenger motta feil- og sikkerhetsrettelser. Brukere rådes til å oppgradere til en nyere versjon.

Rubin 2.0

Ruby 2.0 la til flere nye funksjoner, inkludert:

  • metode søkeordargumenter,
  • en ny metode Module#prepend, for å utvide en klasse,
  • en ny bokstav for å lage en rekke symboler,
  • nytt API for lat evaluering av Enumerables, og
  • en ny konvensjon om å bruke #to_h til å konvertere objekter til Hashes.

Ruby 2.0 var ment å være fullt bakoverkompatibel med Ruby 1.9.3. Fra den offisielle 2.0.0 -utgivelsen 24. februar 2013 var det bare fem kjente (mindre) inkompatibiliteter.

Ruby 2.0 har vært foreldet siden 24. februar 2016, og det vil ikke lenger motta feil- og sikkerhetsrettelser. Brukere rådes til å oppgradere til en nyere versjon.

Rubin 2.1

Ruby 2.1.0 ble utgitt 1. juledag i 2013. Utgivelsen inkluderer speed-ups, feilrettinger og bibliotekoppdateringer.

Fra og med 2.1.0 ligner Rubys versjonspolicy mer semantisk versjonering . Selv om Rubys versjonspolicy er lik, er den ikke kompatibel med semantisk versjon:

Rubin Semantisk versjonering
MAJOR : Økes når inkompatibel endring som ikke kan slippes i MINOR. Reservert for spesielle arrangementer. STOR : Øker når du gjør inkompatible API -endringer.
Mindre : økes hver jul, kan være API -inkompatibel. Mindre : økes når du legger til funksjonalitet på en bakoverkompatibel måte.
TEENY : sikkerhet eller feilrettelse som opprettholder API -kompatibilitet. Kan økes mer enn 10 (for eksempel 2.1.11), og vil bli utgitt hver 2. - 3. måned. PATCH : økes når du gjør bakoverkompatible feilrettinger.
PATCH : antall forpliktelser siden siste MINOR utgivelse (blir tilbakestilt til 0 når MINOR slippes). -

Semantisk versjonering gir også ytterligere etiketter for forhåndsutgivelse og metadata er tilgjengelig som utvidelser til formatet MAJOR.MINOR.PATCH, ikke tilgjengelig på Ruby.

Ruby 2.1 har vært foreldet siden 1. april 2017, og den vil ikke lenger motta feil- og sikkerhetsrettelser. Brukere rådes til å oppgradere til en nyere versjon.

Rubin 2.2

Ruby 2.2.0 ble utgitt 1. juledag i 2014. Utgivelsen inkluderer speed-ups, feilrettinger og bibliotekoppdateringer og fjerner noen utdaterte API-er. Spesielt introduserer Ruby 2.2.0 endringer i minnehåndtering - en inkrementell søppelsamler, støtte for søppelinnsamling av symboler og muligheten til å kompilere direkte mot jemalloc. Den inneholder også eksperimentell støtte for bruk av vfork (2) med system () og spawn (), og tilleggsstøtte for Unicode 7.0 -spesifikasjonen.

Funksjoner som ble gjort foreldet eller fjernet inkluderer callcc, DL -biblioteket, Digest :: HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger :: Application samt forskjellige C API -funksjoner.

Ruby 2.2 har vært foreldet siden 1. april 2018, og den vil ikke lenger motta feil- og sikkerhetsrettelser. Brukere rådes til å oppgradere til en nyere versjon.

PowerPC64 -ytelse
Siden versjon 2.2.1 ble Ruby MR -ytelse på PowerPC64 forbedret.

Rubin 2.3

Ruby 2.3.0 ble utgitt 1. juledag i 2015. Noen få bemerkelsesverdige endringer inkluderer:

  • Muligheten til å merke alle strengbokstavene som frosset som standard med en følgelig stor ytelsesøkning i strengoperasjoner.
  • Hash sammenligning for å tillate direkte kontroll av nøkkel/verdi par i stedet for bare nøkler.
  • En ny sikker navigasjonsoperatør &. som kan lette null håndtering (f.eks. I stedet for , vi kan bruke ).if obj && obj.foo && obj.foo.barif obj&.foo&.bar
  • Den did_you_mean perlen er nå samlet som standard, og som kreves ved oppstart for å automatisk foreslå lignende navn kamper på en NameError eller NoMethodError .
  • Hash#dig og Array#dig for å enkelt trekke ut dypt nestede verdier (f.eks. Gitt , verdien Foo Baz kan nå hentes av ).profile = { social: { wikipedia: { name: 'Foo Baz' } } }profile.dig(:social, :wikipedia, :name)
  • .grep_v(regexp) som vil matche alle negative eksempler på et gitt regulært uttrykk i tillegg til andre nye funksjoner.

2.3 -grenen inkluderer også mange ytelsesforbedringer, oppdateringer og feilrettinger, inkludert endringer i Proc#-anrop, Socket- og IO -bruk av unntakssøkeord, Thread#-navnhåndtering, standard passive Net :: FTP -tilkoblinger og Rake blir fjernet fra stdlib.

Rubin 2.4

Ruby 2.4.0 ble utgitt 1. juledag i 2016. Noen få bemerkelsesverdige endringer inkluderer:

  • Binding#irb: Start en REPL -økt som ligner på binding.pry
  • Samle Fixnum og Bignum inn Integer klasse
  • String støtter Unicode -tilordninger, ikke bare ASCII
  • En ny metode, Regexp#match ?, som er en raskere boolsk versjon av Regexp#match
  • Deteksjon av trådlåsning viser nå tråder med tilbakesporing og avhengighet

2.4 -grenen inkluderer også ytelsesforbedringer til hashtabellen, Array#max, Array#min og instansvariabel tilgang.

Rubin 2.5

Ruby 2.5.0 ble utgitt 1. juledag i 2017. Noen få bemerkelsesverdige endringer inkluderer:

  • redde og sørge for at uttalelser automatisk bruker en omkringliggende ende- blokk (mindre behov for ekstra start-ende- blokker)
  • Metodekjetting med yield_self
  • Støtt filialdekning og måling av metodedekning
  • Enklere Hash -transformasjoner med Hash#slice og Hash#transform_keys

På toppen av det kommer mange ytelsesforbedringer som raskere blokkoverføring (3 ganger raskere), raskere Mutexes, raskere ERB -maler og forbedringer på noen sammenkoblingsmetoder.

Rubin 2.6

Ruby 2.6.0 ble utgitt 1. juledag i 2018. Noen få bemerkelsesverdige endringer inkluderer:

  • JIT (eksperimentell)
  • RubyVM :: AbstractSyntaxTree (eksperimentell)

Rubin 2.7

Ruby 2.7.0 ble utgitt 1. juledag i 2019. Noen få bemerkelsesverdige endringer inkluderer:

  • Mønstermatching (eksperimentell)
  • REPL forbedring
  • Komprimering GC
  • Separasjon av posisjonelle og søkeordargumenter

Rubin 3.0

Ruby 3.0.0 ble utgitt 1. juledag i 2020. Den er kjent som Ruby 3x3. Et av hovedmålene var å bytte tolken til en Just-In-Time Compiler, for å gjøre programmene raskere.

Tabell med versjoner

Versjon Siste teeny -versjon Første utgivelsesdato Slutt på støttefasen Slutten på sikkerhetsvedlikeholdsfasen
Gammel versjon, ikke lenger vedlikeholdt: 1.0 NA 1996-12-25 NA NA
Gammel versjon, ikke lenger vedlikeholdt: 1.8 1.8.7-p375 2003-08-04 2012-06 2014-07-01
Gammel versjon, ikke lenger vedlikeholdt: 1.9 1.9.3-p551 2007-12-25 2014-02-23 2015-02-23
Gammel versjon, ikke lenger vedlikeholdt: 2.0 2.0.0-p648 2013-02-24 2015-02-24 2016-02-24
Gammel versjon, ikke lenger vedlikeholdt: 2.1 2.1.10 2013-12-25 2016-03-30 2017-03-31
Gammel versjon, ikke lenger vedlikeholdt: 2.2 2.2.10 2014-12-25 2017-03-28 2018-03-31
Gammel versjon, ikke lenger vedlikeholdt: 2.3 2.3.8 2015-12-25 2018-06-20 2019-03-31
Gammel versjon, ikke lenger vedlikeholdt: 2.4 2.4.10 2016-12-25 2019-04-01 01.04.2020
Gammel versjon, ikke lenger vedlikeholdt: 2.5 2.5.9 2017-12-25 2021-04-05 2021-04-05
Eldre versjon, men likevel vedlikeholdt: 2.6 2.6.7 2018-12-25 2021-04-05 2022-04-05
Eldre versjon, men likevel vedlikeholdt: 2.7 2.7.3 2019-12-25 TBA TBA
Gjeldende stabil versjon: 3.0 3.0.1 25-12-2020 TBA TBA
Legende:
Gammel versjon
Eldre versjon, fortsatt vedlikeholdt
Siste versjon
Siste forhåndsversjon
Fremtidig utgivelse

Referanser