Rubins historie - History of Ruby

Dette er en historie om programmeringssproget Ruby .

Forestilling

Matsumoto har sagt, at Ruby blev undfanget i 1993. I et indlæg fra 1999 til rubin-talk- mailinglisten beskriver han nogle af sine tidlige ideer om sproget:

Jeg talte med min kollega om muligheden for et objektorienteret scriptsprog. Jeg kendte Perl (Perl4, ikke Perl5), men jeg kunne ikke rigtig lide det, fordi det lugtede af et legetøjssprog (det har det stadig). Det objektorienterede sprog virkede meget lovende. Jeg kendte Python dengang. Men jeg kunne ikke lide det, fordi jeg ikke troede, det var et sandt objektorienteret sprog-OO-funktioner syntes at være tilføjelser til sproget. Som sprogmani og OO-fan i 15 år ville jeg virkelig have et ægte objektorienteret, brugervenligt scriptsprog. Jeg ledte efter, men kunne ikke finde en. Så jeg besluttede mig for at klare det.

Matsumoto beskriver designet af Ruby som et simpelt Lisp- sprog i kernen med et objektsystem som Smalltalk, blokke inspireret af funktioner i højere orden og praktisk nytteværdi som Perl.

Navnet "Ruby" stammer fra en online chat -session mellem Matsumoto og Keiju Ishitsuka den 24. februar 1993, før der var blevet skrevet nogen kode til sproget. Oprindeligt blev der foreslået to navne: " Coral " og " Ruby ". Matsumoto valgte det sidste i en senere e-mail til Ishitsuka. Matsumoto bemærkede senere en faktor ved valget af navnet "Ruby" - det var fødselsstenen for en af ​​hans kolleger.

Første udgivelse

Den første offentlige udgivelse af Ruby 0.95 blev annonceret på japanske indenlandske nyhedsgrupper den 21. december 1995. Efterfølgende blev tre versioner af Ruby frigivet på to dage. Udgivelsen faldt sammen med lanceringen af ​​den japansksprogede rubinliste- mailingliste, som var den første mailingliste for det nye sprog.

Allerede til stede på dette udviklingsstadium var mange af de funktioner, der var velkendte i senere udgivelser af Ruby, herunder objektorienteret design, klasser med arv, mixins , iteratorer , lukninger , undtagelseshåndtering og affaldssamling .

Tidlige udgivelser

Efter udgivelsen af ​​Ruby 0.95 i 1995 blev flere stabile versioner af Ruby frigivet i de følgende år:

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

I 1997 blev den første artikel om Ruby offentliggjort på Internettet. Samme år blev Matsumoto ansat af netlab.jp for at arbejde på Ruby som en fuldtidsudvikler.

I 1998 blev Ruby Application Archive lanceret af Matsumoto sammen med en enkel engelsksproget hjemmeside for Ruby.

I 1999 begyndte den første engelsksprogede mailingliste ruby-talk , hvilket signalerede en stigende interesse for sproget uden for Japan. I samme år skrev Matsumoto og Keiju Ishitsuka den første bog om Ruby, The Object-oriented Scripting Language Ruby (オ ブ ジ ェ ク ト ス ク リ プ ト 言語 Ruby), der blev udgivet i Japan i oktober 1999. Den ville blive fulgt i begyndelsen af ​​2000'erne af omkring 20 bøger om Ruby udgivet på japansk.

I 2000 var Ruby mere populær end Python i Japan. I september 2000 blev den første engelsksprogede bog Programmering Ruby trykt, som senere blev frigivet frit for offentligheden og yderligere udvidede adoptionen af ​​Ruby blandt engelsktalende. I begyndelsen af ​​2002 modtog den engelsksprogede rubin-talk- mailingliste flere beskeder end den japansksprogede rubinliste , hvilket demonstrerede Rubys stigende popularitet i den ikke-japansktalende verden.

Rubin 1.8

Ruby 1.8 blev oprindeligt frigivet i august 2003, var stabil i lang tid og blev pensioneret juni 2013. Selvom den blev udfaset, er der stadig kode baseret på den. Ruby 1.8 er kun delvist kompatibel med Ruby 1.9.

Ruby 1.8 har været genstand for flere branchestandarder. Sprogspecifikationerne for Ruby blev udviklet af Open Standards Promotion Center i Information Technology Technology Promotion Agency (et japansk regeringsagentur ) til forelæggelse for Japanese Industrial Standards Committee (JISC) og derefter for International Organization for Standardization (ISO). Det blev accepteret som en japansk industristandard (JIS X 3017) i 2011 og en international standard ( ISO/IEC 30170 ) i 2012.

Omkring 2005 steg interessen for Ruby -sproget i takt med Ruby on Rails , en webramme skrevet i Ruby. Skinner krediteres ofte med øget opmærksomhed på Ruby.

Rubin 1.9

Ruby 1.9 blev udgivet 1. juledag i 2007. Gyldig med Ruby 1.9.3, udgivet 31. oktober 2011, skiftede Ruby fra at være dual-licenseret under Ruby License og GPL til at være dual-licenseret under Ruby License og to- klausul BSD -licens. Vedtagelse af 1,9 blev bremset af ændringer fra 1,8, som krævede mange populære tredjeparts perler skal skrives om.

Ruby 1.9 introducerer mange betydelige ændringer i forhold til 1.8 -serien. Eksempler omfatter:

  • blok lokale variabler (variabler, der er lokale for blokken , hvor de er deklareret)
  • en ekstra lambda -syntaks:f = ->(a,b) { puts a + b }
  • en ekstra Hash -bogstavelig syntaks ved hjælp af kolon for symboltaster:{symbol_key: "value"} == {:symbol_key => "value"}
  • per-streng tegnkodninger understøttes
  • ny socket API ( understøttelse af IPv6 )
  • require_relative import sikkerhed

Ruby 1.9 har været forældet siden 23. februar 2015, og det vil ikke længere modtage fejl- og sikkerhedsrettelser. Brugere rådes til at opgradere til en nyere version.

Rubin 2.0

Ruby 2.0 tilføjede flere nye funktioner, herunder:

  • metode søgeordsargumenter,
  • en ny metode Module#prependtil at udvide en klasse,
  • en ny bogstav for at skabe en række symboler,
  • ny API til doven evaluering af Enumerables og
  • en ny konvention om at bruge #to_h til at konvertere objekter til Hashes.

Ruby 2.0 var beregnet til at være fuldstændig bagudkompatibel med Ruby 1.9.3. Fra den officielle 2.0.0 -udgivelse den 24. februar 2013 var der kun fem kendte (mindre) uforeneligheder.

Ruby 2.0 har været forældet siden 24. februar 2016, og det vil ikke længere modtage fejl- og sikkerhedsrettelser. Brugere rådes til at opgradere til en nyere version.

Rubin 2.1

Ruby 2.1.0 blev udgivet juledag i 2013. Udgivelsen indeholder speed-ups, fejlrettelser og biblioteksopdateringer.

Fra og med 2.1.0 ligner Rubys versionpolitik mere semantisk versionering . Selvom Rubys versionpolitik er ens, er den ikke kompatibel med semantisk versionering:

Rubin Semantisk versionering
STOR : Stiger ved inkompatibel ændring, som ikke kan frigives i MINOR. Reserveret til særlige begivenheder. STOR : Stiger, når du foretager inkompatible API -ændringer.
Mindre : øges hver jul, kan være API -inkompatibel. Mindre : øges, når du tilføjer funktionalitet på en bagudkompatibel måde.
TEENY : sikkerhed eller fejlrettelse, der opretholder API -kompatibilitet. Kan øges med mere end 10 (f.eks. 2.1.11) og frigives hver 2. - 3. måned. PATCH : øges, når du laver bagudkompatible fejlrettelser.
PATCH : antal forpligtelser siden sidste MINOR -udgivelse (nulstilles ved 0, når MINOR frigives). -

Semantisk versionering giver også yderligere etiketter til pre-release og build-metadata er tilgængelige som udvidelser til MAJOR.MINOR.PATCH-formatet, ikke tilgængeligt hos Ruby.

Ruby 2.1 har været forældet siden 1. april 2017, og det modtager ikke længere fejl og sikkerhedsrettelser. Brugere rådes til at opgradere til en nyere version.

Rubin 2.2

Ruby 2.2.0 blev udgivet juledag i 2014. Udgivelsen indeholder speed-ups, fejlrettelser og biblioteksopdateringer og fjerner nogle forældede API'er. Mest bemærkelsesværdigt introducerer Ruby 2.2.0 ændringer i hukommelseshåndtering - en inkrementel affaldssamler, understøttelse af affaldssamling af symboler og mulighed for at kompilere direkte mod jemalloc. Det indeholder også eksperimentel support til brug af vfork (2) med system () og spawn () og tilføjet support til Unicode 7.0 -specifikationen.

Funktioner, der blev gjort forældede eller fjernet, omfatter callcc, DL -biblioteket, Digest :: HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger :: Application samt forskellige C API -funktioner.

Ruby 2.2 har været forældet siden 1. april 2018, og det vil ikke længere modtage fejl- og sikkerhedsrettelser. Brugere rådes til at opgradere til en nyere version.

PowerPC64 ydeevne
Siden version 2.2.1 blev Ruby MRI -ydeevnen på PowerPC64 forbedret.

Rubin 2.3

Ruby 2.3.0 blev udgivet juledag i 2015. Et par bemærkelsesværdige ændringer omfatter:

  • Muligheden for at markere alle strenglitteraler som frosset som standard med en følgelig stor præstationsforøgelse i strengoperationer.
  • Hash -sammenligning for at tillade direkte kontrol af nøgle/værdipar i stedet for bare nøgler.
  • En ny sikker navigationsoperatør, &. der kan lette nul håndtering (f.eks. I stedet for kan vi bruge ).if obj && obj.foo && obj.foo.barif obj&.foo&.bar
  • Den did_you_mean perle er nu bundtet som standard og kræves ved start for automatisk at foreslå lignende navn kampe på en NameError eller NoMethodError .
  • Hash#dig og Array#dig for let at udtrække dybt indlejrede værdier (f.eks. Givet , værdien Foo Baz kan nu hentes af ).profile = { social: { wikipedia: { name: 'Foo Baz' } } }profile.dig(:social, :wikipedia, :name)
  • .grep_v(regexp) som matcher alle negative eksempler på et givet regulært udtryk ud over andre nye funktioner.

2.3 -grenen indeholder også mange præstationsforbedringer, opdateringer og fejlrettelser, herunder ændringer i Proc#-opkald, Socket- og IO -brug af undtagelsesord, Thread#-navnhåndtering, standard passive Net :: FTP -forbindelser og Rake fjernes fra stdlib.

Rubin 2.4

Ruby 2.4.0 blev udgivet juledag i 2016. Et par bemærkelsesværdige ændringer omfatter:

  • Binding#irb: Start en REPL -session, der ligner binding.pry
  • Foren Fixnum og Bignum i Integer -klasse
  • String understøtter Unicode case mappings, ikke kun ASCII
  • En ny metode, Regexp#match ?, som er en hurtigere boolsk version af Regexp#match
  • Tråddæmpningsdetektering viser nu tråde med deres backtrace og afhængighed

2.4 -grenen indeholder også præstationsforbedringer til hashtabellen, Array#max, Array#min og instansvariabel adgang.

Rubin 2.5

Ruby 2.5.0 blev frigivet juledag i 2017. Et par bemærkelsesværdige ændringer omfatter:

  • redde og sikre, at udsagn automatisk bruger en omgivende ende- blok (mindre behov for ekstra start-end- blokke)
  • Metodekæder med yield_self
  • Understøtt filialdækning og måling af metodedækning
  • Nemmere Hash -transformationer med Hash#-skive og Hash#-transformeringstaster

Dertil kommer en masse præstationsforbedringer som hurtigere blokering (3 gange hurtigere), hurtigere Mutexes, hurtigere ERB -skabeloner og forbedringer på nogle sammenkædningsmetoder.

Rubin 2.6

Ruby 2.6.0 blev frigivet juledag i 2018. Et par bemærkelsesværdige ændringer omfatter:

  • JIT (eksperimentel)
  • RubyVM :: AbstractSyntaxTree (eksperimentel)

Rubin 2.7

Ruby 2.7.0 blev udgivet juledag i 2019. Et par bemærkelsesværdige ændringer omfatter:

  • Mønster Matching (eksperimentel)
  • REPL forbedring
  • Komprimering GC
  • Adskillelse af positions- og søgeordsargumenter

Rubin 3.0

Ruby 3.0.0 blev udgivet 1. juledag i 2020. Det er kendt som Ruby 3x3. Et af hovedformålene var at skifte tolken til en Just-In-Time Compiler for at gøre programmer hurtigere.

Oversigtstabel

Version Seneste teeny version Indledende udgivelsesdato Slut på supportfase Slutningen af ​​sikkerhedsvedligeholdelsesfasen
Gammel version, ikke længere vedligeholdt: 1.0 NA 1996-12-25 NA NA
Gammel version, ikke længere vedligeholdt: 1.8 1.8.7-p375 2003-08-04 2012-06 2014-07-01
Gammel version, ikke længere vedligeholdt: 1.9 1.9.3-p551 2007-12-25 2014-02-23 2015-02-23
Gammel version, ikke længere vedligeholdt: 2.0 2.0.0-p648 2013-02-24 2015-02-24 2016-02-24
Gammel version, ikke længere vedligeholdt: 2.1 2.1.10 2013-12-25 2016-03-30 2017-03-31
Gammel version, ikke længere vedligeholdt: 2.2 2.2.10 2014-12-25 2017-03-28 2018-03-31
Gammel version, ikke længere vedligeholdt: 2.3 2.3.8 2015-12-25 2018-06-20 2019-03-31
Gammel version, ikke længere vedligeholdt: 2.4 2.4.10 2016-12-25 2019-04-01 2020-04-01
Gammel version, ikke længere vedligeholdt: 2.5 2.5.9 2017-12-25 2021-04-05 2021-04-05
Ældre version, men stadig vedligeholdt: 2.6 2.6.7 2018-12-25 2021-04-05 2022-04-05
Ældre version, men stadig vedligeholdt: 2.7 2.7.3 2019-12-25 TBA TBA
Nuværende stabil version: 3.0 3.0.1 2020-12-25 TBA TBA
Legende:
Gammel version
Ældre version, stadig vedligeholdt
Nyeste version
Seneste preview -version
Fremtidig udgivelse

Referencer