Izdanje programskog jezika Ruby 3.1

Objavljen je Ruby 3.1.0, dinamički objektno orijentisani programski jezik koji je veoma efikasan u razvoju programa i uključuje najbolje karakteristike Perl, Java, Python, Smalltalk, Eiffel, Ada i Lisp. Projektni kod se distribuira pod licencama BSD („BSDL s 2 klauzule“) i „Ruby“, što se odnosi na najnoviju verziju GPL licence i potpuno je kompatibilno sa GPLv3.

Glavna poboljšanja:

  • Dodan je novi eksperimentalni JIT kompajler u procesu, YJIT, koji su kreirali programeri Shopify platforme za e-trgovinu kao dio inicijative za poboljšanje performansi Ruby programa koji koriste Rails okvir i pozivaju mnoge metode. Ključna razlika u odnosu na prethodno korišćeni MJIT JIT kompajler, koji se zasniva na obradi čitavih metoda i koristi eksterni kompajler u C jeziku, je u tome što YJIT koristi Lazy Basic Block Versioning (LBBV) i sadrži integrisani JIT prevodilac. Sa LBBV-om, JIT prvo kompajlira samo početak metode, a ostatak kompajlira nešto kasnije, nakon što se tokom izvršenja odrede tipovi varijabli i argumenata koji se koriste. Kada se koristi YJIT, zabilježeno je povećanje performansi od 22% pri izvođenju railsbench testa i povećanje od 39% u testu tečnosti. YJIT je trenutno ograničen na podršku za unix-like OS na sistemima sa x86-64 arhitekturom i onemogućen je prema zadanim postavkama (da biste ga aktivirali, navedite oznaku “--yjit” u komandnoj liniji).
  • Poboljšane performanse starog MJIT JIT kompajlera. Za projekte koji koriste Rails, zadana maksimalna veličina keša (--jit-max-cache) je povećana sa 100 na 10000 instrukcija. Prestao je koristiti JIT za metode s više od 1000 instrukcija. Da bi se podržao Zeitwerk of Rails, JIT kod se više ne odbacuje kada je TracePoint omogućen za događaje klase.
  • Uključuje potpuno prepisan debug.gem debugger, koji podržava udaljeno otklanjanje grešaka, ne usporava otklanjanje grešaka u aplikaciji, podržava integraciju sa naprednim sučeljima za otklanjanje grešaka (VSCode i Chrome), može se koristiti za otklanjanje grešaka u više-nitnim i višeprocesnim aplikacijama, pruža sučelje za izvršavanje REPL koda, nudi napredne mogućnosti praćenja, može snimati i reproducirati isječke koda. Prethodno ponuđeni debuger lib/debug.rb je uklonjen iz osnovne distribucije.
    Izdanje programskog jezika Ruby 3.1
  • Implementirano vizualno isticanje grešaka u izvještajima o praćenju povratnog poziva. Označavanje greške je omogućeno korištenjem ugrađenog i zadano omogućenog gem paketa error_highlight. Da biste onemogućili označavanje grešaka, možete koristiti postavku “--disable-error_highlight”. $ ruby ​​test.rb test.rb:1:in " ": undefined metoda "vrijeme" za 1:Integer (NoMethodError) 1.time {} ^^^^^ Jeste li mislili? puta
  • Školjka interaktivnih proračuna IRB (REPL, Read-Eval-Print-Loop) implementira automatsko dovršavanje unesenog koda (kako kucate, prikazuje se savjet sa opcijama za nastavak unosa, između kojih se možete kretati pomoću Tab ili Shift+ Tab taster). Nakon odabira opcije nastavka, u blizini se prikazuje dijaloški okvir koji prikazuje dokumentaciju povezanu s odabranom stavkom. Tastersku prečicu Alt+d možete koristiti za pristup kompletnoj dokumentaciji.
    Izdanje programskog jezika Ruby 3.1
  • Sintaksa jezika sada dozvoljava da se vrijednosti u hash literalima i argumentima ključne riječi preskaču prilikom pozivanja funkcija. Na primjer, umjesto izraza “{x: x, y: y}” sada možete specificirati “{x:, y:}”, a umjesto “foo(x: x, y: y)” - foo( x:, y: )".
  • Stabilizirana podrška za podudaranja uzoraka u jednoj liniji (ary => [x, y, z]), koja više nisu označena kao eksperimentalna.
  • Operator "^" u podudaranju uzoraka sada može sadržavati proizvoljne izraze, na primjer: Prime.each_cons(2).lazy.find_all{_1 u [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Kod podudaranja jednolinijskog uzorka, možete izostaviti zagrade: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Jezik za označavanje tipa RBS, koji vam omogućava da odredite strukturu programa i tipove koji se koriste, ima dodatnu podršku za određivanje gornje granice parametara tipa pomoću simbola “<”, dodatu podršku za pseudonime generičkih tipova, implementiranu podršku za kolekcije za upravljanje draguljima, poboljšane performanse i implementirani mnogi novi potpisi za ugrađene i standardne biblioteke.
  • Eksperimentalna podrška za integrisana razvojna okruženja dodata je TypePro statičkom analizatoru tipa, koji generiše RBS napomene na osnovu analize koda bez eksplicitnih informacija o tipu (na primer, pripremljen je dodatak za integraciju TypePro sa VSCode editorom).
  • Promijenjen je redoslijed obrade više zadataka. Na primjer, ranije su komponente izraza “foo[0], bar[0] = baz, qux” obrađivane u redoslijedu baz, qux, foo, bar, ali sada foo, bar, baz, qux.
  • Dodata eksperimentalna podrška za dodjelu memorije za nizove koristeći VWA (Variable Width Allocation) mehanizam.
  • Ažurirane verzije ugrađenih gem modula i onih uključenih u standardnu ​​biblioteku. Ugrađeni su net-ftp, net-imap, net-pop, net-smtp, matrix, prime i debug paketi.

izvor: opennet.ru

Dodajte komentar