Wydanie języka programowania Ruby 3.1

Wydano Ruby 3.1.0, dynamiczny obiektowy język programowania, który jest bardzo wydajny w tworzeniu programów i zawiera najlepsze cechy języków Perl, Java, Python, Smalltalk, Eiffel, Ada i Lisp. Kod projektu dystrybuowany jest na licencji BSD („2-klauzulowej BSDL”) i „Ruby”, która odnosi się do najnowszej wersji licencji GPL i jest w pełni kompatybilna z GPLv3.

Główne ulepszenia:

  • Dodano nowy eksperymentalny kompilator JIT w procesie, YJIT, stworzony przez twórców platformy e-commerce Shopify w ramach inicjatywy mającej na celu poprawę wydajności programów Ruby, które wykorzystują framework Rails i wywołują wiele metod. Kluczową różnicą w stosunku do wcześniej używanego kompilatora MJIT JIT, który opiera się na przetwarzaniu całych metod i korzysta z zewnętrznego kompilatora w języku C, jest to, że YJIT wykorzystuje Lazy Basic Block Versioning (LBBV) i zawiera zintegrowany kompilator JIT. W przypadku LBBV JIT najpierw kompiluje tylko początek metody, a resztę kompiluje jakiś czas później, po określeniu typów używanych zmiennych i argumentów podczas wykonywania. Podczas korzystania z YJIT odnotowano 22% wzrost wydajności w teście Railsbench i 39% wzrost w teście renderowania cieczy. YJIT jest obecnie ograniczony do obsługi systemów operacyjnych typu uniksowego w systemach z architekturą x86-64 i jest domyślnie wyłączony (aby aktywować, określ flagę „--yjit” w wierszu poleceń).
  • Poprawiona wydajność starego kompilatora MJIT JIT. W przypadku projektów korzystających z Railsów, domyślny maksymalny rozmiar pamięci podręcznej (--jit-max-cache) został zwiększony ze 100 do 10000 1000 instrukcji. Zaprzestano używania JIT w przypadku metod zawierających ponad XNUMX instrukcji. Aby wspierać Zeitwerk of Rails, kod JIT nie jest już odrzucany, gdy TracePoint jest włączony dla wydarzeń klasowych.
  • Zawiera całkowicie przepisany debugger debug.gem, który obsługuje zdalne debugowanie, nie spowalnia debugowanej aplikacji, obsługuje integrację z zaawansowanymi interfejsami debugowania (VSCode i Chrome), może być używany do debugowania aplikacji wielowątkowych i wieloprocesowych, zapewnia interfejs wykonywania kodu REPL, oferuje zaawansowane możliwości śledzenia, może nagrywać i odtwarzać fragmenty kodu. Oferowany wcześniej debugger lib/debug.rb został usunięty z podstawowej dystrybucji.
    Wydanie języka programowania Ruby 3.1
  • Wprowadzono wizualne podświetlanie błędów w raportach śledzenia połączeń zwrotnych. Flagowanie błędów jest zapewniane przy użyciu wbudowanego i domyślnie włączonego pakietu gem error_highlight. Aby wyłączyć oznaczanie błędów, możesz użyć ustawienia „--disable-error_highlight”. $ rubinowy test.rb test.rb:1:in " ": niezdefiniowana metoda "time" dla 1:Integer (NoMethodError) 1.time {} ^^^^^ Czy miałeś na myśli? czasy
  • Powłoka interaktywnych obliczeń IRB (REPL, Read-Eval-Print-Loop) implementuje automatyczne uzupełnianie wprowadzonego kodu (w trakcie pisania wyświetla się podpowiedź z opcjami kontynuacji wprowadzania, pomiędzy którymi można poruszać się za pomocą Tab lub Shift+ Klawisz TAB). Po wybraniu opcji kontynuacji w pobliżu pojawia się okno dialogowe prezentujące dokumentację związaną z wybraną pozycją. Aby uzyskać dostęp do pełnej dokumentacji, można skorzystać ze skrótu klawiaturowego Alt+d.
    Wydanie języka programowania Ruby 3.1
  • Składnia języka pozwala teraz na pomijanie wartości w literałach skrótu i ​​argumentach słów kluczowych podczas wywoływania funkcji. Na przykład zamiast wyrażenia „{x: x, y: y}” możesz teraz podać „{x:, y:}”, a zamiast „foo(x: x, y: y)” - foo( x:, y: )”.
  • Stabilizowana obsługa dopasowań wzorców jednoliniowych (ary => [x, y, z]), które nie są już oznaczane jako eksperymentalne.
  • Operator „^” w dopasowaniach wzorców może teraz zawierać dowolne wyrażenia, na przykład: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= >? [[3, 5], [5, 7], [11, 13]]
  • W dopasowaniach jednowierszowych można pominąć nawiasy: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Język adnotacji typu RBS, który pozwala określić strukturę programu i stosowane typy, dodał obsługę określania górnej granicy parametrów typu za pomocą symbolu „<”, dodano obsługę aliasów typów ogólnych, zaimplementowano obsługę kolekcje do zarządzania klejnotami, poprawioną wydajność i zaimplementowano wiele nowych sygnatur dla bibliotek wbudowanych i standardowych.
  • Do statycznego analizatora typów TypePro dodano eksperymentalną obsługę zintegrowanych środowisk programistycznych, która generuje adnotacje RBS na podstawie analizy kodu bez jednoznacznych informacji o typie (przygotowano np. dodatek umożliwiający integrację TypePro z edytorem VSCode).
  • Zmieniono kolejność przetwarzania wielu przydziałów. Przykładowo, poprzednio składniki wyrażenia „foo[0], bar[0] = baz, qux” były przetwarzane w kolejności baz, qux, foo, bar, a teraz foo, bar, baz, qux.
  • Dodano eksperymentalną obsługę alokacji pamięci dla ciągów znaków przy użyciu mechanizmu VWA (Variable Height Allocation).
  • Zaktualizowane wersje wbudowanych modułów gem i tych zawartych w standardowej bibliotece. Wbudowane są pakiety net-ftp, net-imap, net-pop, net-smtp, matrix, prime i debug.

Źródło: opennet.ru

Dodaj komentarz