Ruby
Ruby 2.7
Fedora 32 proporciona la versió Ruby 2.7. Amb aquesta actualització important des de Ruby 2.6, Fedora es converteix en la plataforma de desenvolupament Ruby superior.
Canvis des de Ruby 2.6:
Ruby 2.7 ve amb diverses característiques noves i millores de rendiment.
Millores de rendiment
-
JIT [Experimental]
-
L’estratègia de memòria cau de Fiber ha canviat i la creació de fibres s’ha accelerat.
-
Module#name,true.to_s,false.to_sinil.to_sara sempre retornen un String congelat. L’String retornat és sempre el mateix per a un objecte donat. [Experimental] -
El rendiment de
MonitoriMonitorMixins’ha millorat. -
El rendiment de
CGI.escapeHTMLs’ha millorat. -
La memòria cau del mètode
Per-call-site, que hi ha estat des de voltants de l'1.9, s’ha millorat: la taxa d’encerts de la memòria cau ha augmentat del 89% al 94%. -
El mètode
RubyVM::InstructionSequence#to_binarygenera un binari compilat. La mida del binari s’ha reduït.
Altres canvis notables
-
Algunes biblioteques estàndard s’ha actualitzat.
-
Bundler 2.1.2
-
RubyGems 3.1.2
-
Racc 1.4.15
-
CSV 3.1.2
-
REXML 3.2.3
-
RSS 0.2.8
-
StringScanner 1.0.3
-
Algunes altres biblioteques que no tenen versió original també s’ha actualitzat.
-
-
Les següents biblioteques ja no són gems inclosos. Instal·leu els gems corresponents per utilitzar aquestes funcions.
-
CMath (cmath gem)
-
Scanf (scanf gem)
-
Shell (shell gem)
-
Synchronizer (sync gem)
-
ThreadsWait (thwait gem)
-
E2MM (e2mmap gem)
-
-
profile.rbs’ha eliminat de la biblioteca estàndard. -
Promoure
stdliba gems predeterminats-
Els següents gems predeterminats es van publicar a rubygems.org
-
benchmark
-
cgi
-
delegate
-
getoptlong
-
net-pop
-
net-smtp
-
open3
-
pstore
-
singleton
-
-
Els següents gems predeterminats només es van promoure a ruby-core, però encara no s’ha publicat a rubygems.org.
-
monitor
-
observer
-
timeout
-
tracer
-
uri
-
yaml
-
-
-
Proc.newiprocsense cap bloc en un mètode cridat amb un bloc ara dóna un avís. -
lambda sense cap bloc en un mètode cridat amb un bloc llança una excepció.
-
S’ha actualitzat la versió Unicode i la versió Emoji d'11.0.0 a 12.0.0.
-
S’ha actualitzat la versió Unicode a 12.1.0, afegint suport per a U+32FF SQUARE ERA NAME REIWA.
-
Date.jisx0301,Date#jisx0301iDate.parseadmeten la nova era japonesa. -
Requereixen compiladors que admetin C99.
Canvis detallats
Pattern Matching [Experimental]
El Pattern matching (coincidència de patrons), una característica àmpliament utilitzada en llenguatges de programació funcional, s’introdueix com una característica experimental. Pot recórrer un objecte donat i assignar-ne el valor si coincideix amb un patró.
require "json"
json = <<END
{
"name": "Alice",
"age": 30,
"children": [{ "name": "Bob", "age": 2 }]
}
END
case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
p age #=> 2
end
Millora de REPL
irb, l’entorn interactiu inclòs (REPL; Read-Eval-Print-Loop), ara admet l’edició multillinea. Està impulsat per reline, una biblioteca compatible amb readline implementada en Ruby pur. També proporciona integració amb rdoc. A irb podeu mostrar la referència per a una classe, mòdul o mètode donat.
Compaction GC
Aquesta versió introdueix Compaction GC que pot desfragmentar un espai de memòria fragmentat.
Alguns programes Ruby multithread poden causar fragmentació de memòria, donant lloc a un alt ús de memòria i una velocitat degradada.
S’introdueix el mètode GC.compact per compactar el munt (heap). Aquesta funció compacta objectes vius al munt perquè es puguin utilitzar menys pàgines, i el munt pugui ser més amigable amb CoW (còpia en escriptura).
Separació d’arguments posicionals i de paraula clau
La conversió automàtica d’arguments de paraula clau i arguments posicionals està desaprovada, i la conversió s’eliminarà a Ruby 3.
Canvis
-
Quan una crida de mètode passa un Hash a l’últim argument, i quan no passa paraules clau, i quan el mètode cridat accepta paraules clau, s’emet un avís. Per continuar tractant el hash com a paraules clau, afegiu un operador de doble splat per evitar l’avís i garantir un comportament correcte a Ruby 3.
def foo(key: 42); end; foo({key: 42}) # warned def foo(**kw); end; foo({key: 42}) # warned def foo(key: 42); end; foo(**{key: 42}) # OK def foo(**kw); end; foo(**{key: 42}) # OK -
Quan una crida de mètode passa paraules clau a un mètode que accepta paraules clau, però no passa suficients arguments posicionals obligatoris, les paraules clau es tracten com un argument posicional obligatori final, i s’emet un avís. Passeu l’argument com un hash en lloc de paraules clau per evitar l’avís i garantir un comportament correcte a Ruby 3.
def foo(h, **kw); end; foo(key: 42) # warned def foo(h, key: 42); end; foo(key: 42) # warned def foo(h, **kw); end; foo({key: 42}) # OK def foo(h, key: 42); end; foo({key: 42}) # OK -
Quan un mètode accepta paraules clau específiques però no un splat de paraula clau, i es passa un hash o un splat de paraules clau al mètode que inclou tant claus de símbol com de no símbol, el hash continuarà dividint-se, i s’emetrà un avís. Haureu d’actualitzar el codi de crida per passar hashos separats per garantir un comportament correcte a Ruby 3.
def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK -
Si un mètode no accepta paraules clau, i es crida amb paraules clau, les paraules clau encara es tracten com un hash posicional, sense avís. Aquest comportament continuarà funcionant a Ruby 3.
def foo(opt={}); end; foo( key: 42 ) # OK -
Els no símbols es permeten com a claus d’argument de paraula clau si el mètode accepta paraules clau arbitràries.
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1} -
**niles permet en definicions de mètode per marcar explícitament que el mètode no accepta paraules clau. Cridar un mètode així amb paraules clau donarà lloc a unArgumentError.def foo(h, **nil); end; foo(key: 1) # ArgumentError def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError def foo(h, **nil); end; foo("str" => 1) # ArgumentError def foo(h, **nil); end; foo({key: 1}) # OK def foo(h, **nil); end; foo({"str" => 1}) # OK -
Passar un splat de paraula clau buit a un mètode que no accepta paraules clau ja no passa un hash buit, tret que el hash buit sigui necessari per a un paràmetre obligatori, en què cas s’emetrà un avís. Elimineu el doble splat per continuar passant un hash posicional.
h = {}; def foo(*a) a end; foo(**h) # [] h = {}; def foo(a) a end; foo(**h) # {} and warning h = {}; def foo(*a) a end; foo(h) # [{}] h = {}; def foo(a) a end; foo(h) # {}
Si voleu desactivar els avisos de desaprovació, utilitzeu un argument de línia d’ordres -W:no-deprecated o afegiu Warning[:deprecated] = false al vostre codi.
Consulteu l’anunci de llançament upstream per obtenir informació més detallada sobre aquesta versió.
Jekyll 4.0
El generador de pàgines estàtiques Jekyll i els seus connectors s’han actualitzat a la versió 4.0.0. Aquesta versió inclou els següents canvis en comparació amb la versió 3.8:
-
Millores significatives de rendiment
-
Neteges i correccions d’errors
-
Altres canvis menors incompatibles amb la versió anterior
Per obtenir més informació sobre Jekyll 4.0.0, consulteu https://jekyllrb.com/news/2019/08/20/jekyll-4-0-0-released/.
Want to help? Learn how to contribute to Fedora Docs ›