Na een jaar van ontwikkeling gepubliceerde релиз Ruby 2.7.0, een dynamische, objectgeoriënteerde programmeertaal die zeer efficiënt is in programmaontwikkeling en de beste eigenschappen van Perl, Java, Python, Smalltalk, Eiffel, Ada en Lisp bevat. De projectcode wordt gedistribueerd onder de BSD (“2-clausule BSDL”) en “Ruby” licenties, die verwijzen naar de nieuwste versie van de GPL-licentie en volledig compatibel zijn met GPLv3. Ruby 2.7 is de zevende grote release die moet worden voltooid als onderdeel van een gepland ontwikkelingsproces dat een jaar in beslag neemt om functionele verbeteringen voor te bereiden en elke 2-3 maanden onderhoudsreleases oplevert.
Experimenteel ondersteunen patroonaanpassing (Patroonafstemming), waarmee u een bepaald object kunt herhalen en een waarde kunt toewijzen als er een overeenkomst is met het patroon.
geval [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
pb#=> 1
pc #=> [2, 3] einde
geval {a: 0, b: 1}
in{a:0,x:1}
:onbereikbaar
in {a: 0, b: var}
p var #=> 1
einde
De shell van interactieve berekeningen irb (REPL, Read-Eval-Print-Loop) heeft nu de mogelijkheid tot bewerking op meerdere regels, geïmplementeerd met behulp van een readline-compatibele bibliotheek herlijnen, geschreven in Robijn. Ondersteuning voor rdoc is geïntegreerd, waardoor referentie-informatie over gespecificeerde klassen, modules en methoden in irb kan worden bekeken. Gekleurde markering van regels met code weergegeven via Binding#irb en resultaten van het inspecteren van basisklasseobjecten worden weergegeven.
Een compacte garbage collector (Compaction GC) toegevoegd die een geheugengebied kan defragmenteren, waardoor de problemen van trage prestaties en verhoogd geheugengebruik als gevolg van geheugenfragmentatie die optreedt tijdens de werking van sommige multi-threaded Ruby-applicaties worden opgelost. Om voorwerpen op de hoop te verpakken voorgesteld GC.compact-methode om het aantal gebruikte geheugenpagina's te verminderen en de heap voor bewerkingen te optimaliseren
CoW (kopiëren-op-schrijven).
Voerde uit voorbereiden om argumenten te scheiden op basis van positie in de lijst ("def foo(a,b,c)") en trefwoorden ("def foo(key: val)"). Automatische argumentconversie op basis van trefwoorden en positie is verouderd en wordt niet ondersteund in de Ruby 3.0-vertakking. In het bijzonder is het verouderd om het laatste argument als trefwoordparameters te gebruiken, om op trefwoorden gebaseerde argumenten door te geven als de laatste hashparameter, en om het laatste argument op te splitsen in positionele parameters en trefwoordparameters.
Toegestaan om een privémethode aan te roepen met de letterlijke 'zelf'
zeker foo
einde
privé: foe
zelf.foo
Enumerator::Lazy#eager-methode toegevoegd om reguliere opsomming te genereren op basis van luie (Enumerator::Lazy) opsomming.
a = %w(foo bar baz)
e = a.lui.map {|x| x.upcase }.map {|x| x + "!" }.gretig
p e.class #=> Teller
e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
De ontwikkeling van een experimentele JIT-compiler is voortgezet, wat de prestaties van applicaties in de Ruby-taal aanzienlijk kan verbeteren. De JIT-compiler van Ruby schrijft eerst C-code naar schijf en roept vervolgens een externe C-compiler aan om machine-instructies te genereren (GCC-, Clang- en Microsoft VC++-aanroepen worden ondersteund). De nieuwe versie implementeert indien nodig een methode voor inline-implementatie, zorgt voor selectieve toepassing van optimalisatiemodi tijdens compilatie, de standaardwaarde van “--jit-min-calls” is verhoogd van 5 naar 10000, en “--jit-max-cache ” van 1000 tot 100 .
Verbeterde prestaties van CGI.escapeHTML, Monitor en MonitorMixin.
Module#naam, true.to_s, false.to_s en nil.to_s zorgen ervoor dat een tekenreeks wordt geretourneerd die onveranderd is voor het opgegeven object.
De grootte van binaire bestanden gegenereerd door de RubyVM::InstructionSequence#to_binary methode is verkleind;
Bibliotheken zijn overgestapt van de basisdistributie naar externe edelsteenpakketten
CMath (cmath-edelsteen),
Scanf (scanf-edelsteen),
Schelp (schelpjuweel)
Synchronisator (synchronisatiejuweeltje),
ThreadsWait (thwait-edelsteen),
E2MM (e2mmap-edelsteen).
De standaard stdlib-modules worden gepubliceerd op rubygems.org:
benchmark
cgi,
delegeren,
getoptlong,
netto pop,
netto smtp,
open3,
pstore,
eenling. monitormodules niet verplaatst naar rubygems.org
waarnemer,
time-out,
tracer,
uri,
yaml, die alleen in ruby-core worden geleverd.
Voor het bouwen van Ruby is nu een C-compiler vereist die de C99-standaard ondersteunt.