Eldono de la Ruby programlingvo 3.1

Ruby 3.1.0 estis publikigita, dinamika objekt-orientita programlingvo kiu estas tre efika en programevoluo kaj korpigas la plej bonajn funkciojn de Perl, Java, Python, Smalltalk, Eiffel, Ada kaj Lisp. La projektkodo estas distribuita sub la permesiloj BSD ("2-paragrafo BSDL") kaj "Ruby", kiuj rilatas al la plej nova versio de la GPL-licenco kaj estas plene kongrua kun GPLv3.

Ĉefaj plibonigoj:

  • Nova eksperimenta enproceza JIT-kompililo, YJIT, estis aldonita, kreita de la programistoj de la Shopify-e-komerca platformo kiel parto de iniciato plibonigi la agadon de Ruby-programoj, kiuj uzas la kadron Rails kaj nomas multajn metodojn. La ŝlosila diferenco de la antaŭe uzita MJIT JIT-kompililo, kiu baziĝas sur prilaborado de tutaj metodoj kaj uzas eksteran kompililon en la C-lingvo, estas ke YJIT uzas Lazy Basic Block Versioning (LBBV) kaj enhavas integran JIT-kompililon. Kun LBBV, JIT unue kompilas nur la komencon de la metodo, kaj kompilas la reston iom poste, post kiam la specoj de variabloj kaj argumentoj uzitaj estas determinitaj dum ekzekuto. Dum uzado de YJIT, 22% pliiĝo en rendimento estis registrita dum kurado de la railsbench-testo, kaj 39% pliiĝo en la likva-bilda testo. YJIT estas nuntempe limigita al subteno por Unikso-similaj OS-oj sur sistemoj kun x86-64-arkitekturo kaj estas malŝaltita defaŭlte (por aktivigi, specifu la flagon "--yjit" en la komandlinio).
  • Plibonigita efikeco de la malnova MJIT JIT-kompililo. Por projektoj uzantaj Rails, la defaŭlta maksimuma kaŝmemoro (--jit-max-cache) estis pliigita de 100 ĝis 10000 instrukcioj. Ĉesis uzi JIT por metodoj kun pli ol 1000 instrukcioj. Por subteni Zeitwerk of Rails, JIT-kodo ne plu estas forĵetita kiam TracePoint estas ebligita por klasaj eventoj.
  • Ĝi inkluzivas tute reverkitan debug.gem-sencimigilon, kiu subtenas foran sencimigon, ne malrapidigas la sencimigitan aplikaĵon, subtenas integriĝon kun altnivelaj sencimigaj interfacoj (VSCode kaj Chrome), povas esti uzata por sencimigi multfadenajn kaj multprocezajn aplikaĵojn, provizas REPL-koda ekzekutinterfaco, ofertas altnivelajn spurajn kapablojn, povas registri kaj reprodukti kodpecetojn. La antaŭe proponita erarserĉilo lib/debug.rb estis forigita de la baza distribuo.
    Eldono de la Ruby programlingvo 3.1
  • Efektivigita vida elstarigado de eraroj en revokaj spurraportoj. Erarmarkado estas provizita per la enkonstruita kaj defaŭlte ebligita gema pako error_highlight. Por malŝalti erarmarkadon, vi povas uzi la agordon "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in " ": nedifinita metodo "tempo" por 1:Entjero (NoMethodError) 1.time {} ^^^^^ Ĉu vi volis diri? fojojn
  • La ŝelo de interagaj kalkuloj IRB (REPL, Read-Eval-Print-Loop) efektivigas aŭtomatan kompletigon de la enigita kodo (dum vi tajpas, sugesto montriĝas kun opcioj por daŭrigi enigo, inter kiuj vi povas movi per la Tab aŭ Shift+). Tabklavo). Post elekto de la daŭriga opcio, apude aperas dialogujo, kiu montras la dokumentaron asociitan kun la elektita elemento. La klavarkomando Alt+d povas esti uzata por aliri la plenan dokumentaron.
    Eldono de la Ruby programlingvo 3.1
  • La lingva sintakso nun permesas transsalti valorojn en hash-literaĵoj kaj ŝlosilvortaj argumentoj kiam oni vokas funkciojn. Ekzemple, anstataŭ la esprimo “{x: x, y: y}” vi nun povas specifi “{x:, y:}”, kaj anstataŭ “foo(x: x, y: y)” - foo( x:, y:)".
  • Stabiligita subteno por unuliniaj ŝablonomatĉoj (ary => [x, y, z]), kiuj ne plu estas markitaj kiel eksperimentaj.
  • La "^" operatoro en ŝablonokongruoj nun povas enhavi arbitrajn esprimojn, ekzemple: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • En unuliniaj ŝablonaj kongruoj, vi povas preterlasi krampojn: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • La RBS-tipa komentlingvo, kiu permesas vin determini la strukturon de la programo kaj la uzatajn tipojn, aldonis subtenon por specifi la supran limon de tipparametroj uzante la simbolon "<", aldonis subtenon por kaŝnomoj de senmarkaj tipoj, efektivigis subtenon por kolektoj por administrado de gemoj, plibonigis efikecon kaj efektivigis multajn novajn signaturojn por enkonstruitaj kaj normaj bibliotekoj.
  • Eksperimenta subteno por integraj evolumedioj estis aldonita al la TypePro senmova tipanalizilo, kiu generas RBS-kotadojn bazitajn sur kodanalizo sen eksplicitaj tipinformoj (ekzemple, aldonaĵo estis preparita por integri TypePro kun la VSCode-redaktisto).
  • La ordo de prilaborado de multoblaj taskoj estis ŝanĝita. Ekzemple, antaŭe la komponantoj de la esprimo “foo[0], bar[0] = baz, qux” estis prilaboritaj en la ordo baz, qux, foo, bar, sed nun foo, bar, baz, qux.
  • Aldonita eksperimenta subteno por memorasigno por ŝnuroj uzante la VWA (Variable Width Allocation) mekanismon.
  • Ĝisdatigitaj versioj de enkonstruitaj gemoduloj kaj tiuj inkluzivitaj en la norma biblioteko. La net-ftp, net-imap, net-pop, net-smtp, matrix, prime kaj debug pakaĵoj estas enkonstruitaj.

fonto: opennet.ru

Aldoni komenton