Lage langaj pwogram Ruby 3.1

Ruby 3.1.0 te lage, yon langaj pwogram dinamik oryante objè ki trè efikas nan devlopman pwogram epi li enkòpore pi bon karakteristik Perl, Java, Python, Smalltalk, Eiffel, Ada ak Lisp. Kòd pwojè a distribye anba lisans BSD ("2-klaz BSDL") ak "Ruby", ki refere a dènye vèsyon lisans GPL la epi li konplètman konpatib ak GPLv3.

Gwo amelyorasyon:

  • Yo te ajoute yon nouvo konpilateur JIT eksperimantal nan pwosesis, YJIT, ki te kreye pa devlopè yo nan Shopify e-commerce platfòm la kòm yon pati nan yon inisyativ amelyore pèfòmans nan nan pwogram Ruby ki sèvi ak kad Rails la ak rele yon anpil nan metòd. Diferans kle nan konpilateur MJIT JIT ki te itilize anvan an, ki baze sou pwosesis tout metòd epi sèvi ak yon konpilateur ekstèn nan lang C a, se ke YJIT itilize Lazy Basic Block Versioning (LBBV) epi li gen yon du JIT entegre. Avèk LBBV, JIT premye konpile sèlman kòmansman metòd la, epi konpile rès la kèk tan apre, apre yo fin detèmine kalite varyab ak agiman yo itilize pandan ekzekisyon an. Lè w ap itilize YJIT, yo te anrejistre yon ogmantasyon 22% nan pèfòmans lè w ap kouri tès railsbench la, ak yon ogmantasyon 39% nan tès likid-rann lan. YJIT se kounye a limite a sipò pou OS ki tankou Unix sou sistèm ak achitekti x86-64 epi li enfim pa default (pou aktive, presize drapo a "--yjit" nan liy lòd la).
  • Amelyore pèfòmans ansyen du MJIT JIT. Pou pwojè ki itilize Rails, gwosè maksimòm kachèt default (--jit-max-cache) te ogmante de 100 a 10000 enstriksyon. Sispann itilize JIT pou metòd ki gen plis pase 1000 enstriksyon. Pou sipòte Zeitwerk of Rails, kòd JIT pa jete ankò lè TracePoint aktive pou evènman klas yo.
  • Li gen ladann yon debug debug.gem konplètman reekri, ki sipòte debogaj aleka, pa ralanti aplikasyon an debogaj, sipòte entegrasyon ak interfaces debogaj avanse (VSCode ak Chrome), yo ka itilize pou debogaj aplikasyon milti-threaded ak milti-pwosesis, bay yon koòdone ekzekisyon kòd REPL, ofri kapasite trase avanse, ka anrejistre ak rejoue fragments kòd. Debugger lib/debug.rb yo te ofri deja a te retire nan distribisyon baz la.
    Lage langaj pwogram Ruby 3.1
  • Aplike vizyèl en nan erè nan rapò tras apèl tounen. Yo bay siyal erè lè l sèvi avèk pake gem entegre ak default ki pèmèt error_highlight. Pou enfim signalisation erè, ou ka itilize paramèt "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:nan "": metòd endefini "tan" pou 1:Integer (NoMethodError) 1.time {} ^^^^^ Èske w te vle di? fwa
  • Koki kalkil entèaktif IRB (REPL, Read-Eval-Print-Loop) aplike ranpli otomatikman nan kòd la antre (pandan w ap tape, yon allusion ap parèt ak opsyon pou kontinye antre, ant ki ou ka deplase ak Tab la oswa Shift + kle tab). Apre w fin chwazi opsyon kontinyasyon an, yon bwat dyalòg parèt tou pre ki montre dokiman ki asosye ak atik la chwazi a. Rakoursi klavye Alt + d ka itilize pou jwenn aksè nan dokiman an konplè.
    Lage langaj pwogram Ruby 3.1
  • Sentaks langaj la kounye a pèmèt valè nan literal hash ak agiman mo kle yo dwe sote lè w ap rele fonksyon. Pou egzanp, olye pou yo ekspresyon "{x: x, y: y}" kounye a ou ka presize "{x:, y:}", epi olye pou yo "foo(x: x, y: y)" - foo( x:, y:)".
  • Sipò estabilize pou alimèt modèl yon sèl liy (ary => [x, y, z]), ki pa make kòm eksperimantal ankò.
  • Operatè "^" nan alimèt modèl la kapab genyen kounye a ekspresyon abitrè, pa egzanp: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Nan alimèt modèl ki gen yon sèl liy, ou ka omite parantèz: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Lang annotasyon tip RBS a, ki pèmèt ou detèmine estrikti pwogram nan ak kalite yo itilize, te ajoute sipò pou presize limit siperyè paramèt kalite lè l sèvi avèk senbòl "<" la, te ajoute sipò pou alyas kalite jenerik, te aplike sipò pou koleksyon pou jere gems, amelyore pèfòmans ak aplike anpil nouvo siyati pou bati-an ak bibliyotèk estanda.
  • Sipò eksperimantal pou anviwònman devlopman entegre yo te ajoute nan analizeur tip estatik TypePro, ki jenere annotasyon RBS ki baze sou analiz kòd san enfòmasyon klè sou kalite (pa egzanp, yo te prepare yon adisyon pou entegre TypePro ak editè VSCode).
  • Lòd pou trete plizyè devwa yo chanje. Pa egzanp, anvan konpozan ekspresyon "foo[0], bar[0] = baz, qux" yo te trete nan lòd baz, qux, foo, bar, men kounye a foo, bar, baz, qux.
  • Te ajoute sipò eksperimantal pou alokasyon memwa pou fisèl lè l sèvi avèk mekanis VWA (Variable Width Alocation).
  • Mizajou vèsyon modil gem entegre ak sa ki enkli nan bibliyotèk estanda a. Net-ftp, net-imap, net-pop, net-smtp, matris, prime ak debug pake yo entegre.

Sous: opennet.ru

Add nouvo kòmantè