Veröffentlichung der Ruby-Programmiersprache 3.1

Ruby 3.1.0 wurde veröffentlicht, eine dynamische objektorientierte Programmiersprache, die in der Programmentwicklung hocheffizient ist und die besten Funktionen von Perl, Java, Python, Smalltalk, Eiffel, Ada und Lisp vereint. Der Projektcode wird unter den BSD- („2-Klausel-BSDL“) und „Ruby“-Lizenzen vertrieben, die sich auf die neueste Version der GPL-Lizenz beziehen und vollständig mit GPLv3 kompatibel sind.

Wichtigste Verbesserungen:

  • Ein neuer experimenteller In-Process-JIT-Compiler, YJIT, wurde hinzugefügt, der von den Entwicklern der Shopify-E-Commerce-Plattform als Teil einer Initiative zur Verbesserung der Leistung von Ruby-Programmen erstellt wurde, die das Rails-Framework verwenden und viele Methoden aufrufen. Der wesentliche Unterschied zum bisher verwendeten JIT-Compiler MJIT, der auf der Verarbeitung ganzer Methoden basiert und einen externen Compiler in der Sprache C verwendet, besteht darin, dass YJIT Lazy Basic Block Versioning (LBBV) verwendet und einen integrierten JIT-Compiler enthält. Bei LBBV kompiliert JIT zunächst nur den Anfang der Methode und kompiliert den Rest einige Zeit später, nachdem die verwendeten Variablen- und Argumenttypen während der Ausführung bestimmt wurden. Bei der Verwendung von YJIT wurde beim Railsbench-Test eine Leistungssteigerung von 22 % und beim Liquid-Render-Test eine Leistungssteigerung von 39 % verzeichnet. YJIT ist derzeit auf die Unterstützung unixähnlicher Betriebssysteme auf Systemen mit x86-64-Architektur beschränkt und standardmäßig deaktiviert (zum Aktivieren geben Sie das Flag „--yjit“ in der Befehlszeile an).
  • Verbesserte Leistung des alten MJIT-JIT-Compilers. Für Projekte, die Rails verwenden, wurde die standardmäßige maximale Cache-Größe (--jit-max-cache) von 100 auf 10000 Anweisungen erhöht. Die Verwendung von JIT für Methoden mit mehr als 1000 Anweisungen wurde eingestellt. Zur Unterstützung von Zeitwerk of Rails wird JIT-Code nicht mehr verworfen, wenn TracePoint für Klassenereignisse aktiviert ist.
  • Es enthält einen vollständig neu geschriebenen debug.gem-Debugger, der Remote-Debugging unterstützt, die debuggte Anwendung nicht verlangsamt, die Integration mit erweiterten Debugging-Schnittstellen (VSCode und Chrome) unterstützt und zum Debuggen von Multithread- und Multiprozessanwendungen verwendet werden kann eine REPL-Codeausführungsschnittstelle, bietet erweiterte Nachverfolgungsfunktionen und kann Codeausschnitte aufzeichnen und wiedergeben. Der bisher angebotene Debugger lib/debug.rb wurde aus der Basisdistribution entfernt.
    Veröffentlichung der Ruby-Programmiersprache 3.1
  • Visuelle Hervorhebung von Fehlern in Rückruf-Trace-Berichten implementiert. Die Fehlerkennzeichnung erfolgt mithilfe des integrierten und standardmäßig aktivierten Gem-Pakets error_highlight. Um die Fehlerkennzeichnung zu deaktivieren, können Sie die Einstellung „--disable-error_highlight“ verwenden. $ ruby ​​​​test.rb test.rb:1:in " ": undefinierte Methode „time“ für 1:Integer (NoMethodError) 1.time {} ^^^^^ Meinten Sie? mal
  • Die Shell der interaktiven Berechnungen IRB (REPL, Read-Eval-Print-Loop) implementiert die automatische Vervollständigung des eingegebenen Codes (während der Eingabe wird ein Hinweis mit Optionen zur Fortsetzung der Eingabe angezeigt, zwischen denen Sie mit Tab oder Umschalt+ wechseln können Tab-Taste). Nach Auswahl der Fortsetzungsoption wird in der Nähe ein Dialogfeld angezeigt, in dem die Dokumentation zum ausgewählten Element angezeigt wird. Mit der Tastenkombination Alt+d können Sie auf die vollständige Dokumentation zugreifen.
    Veröffentlichung der Ruby-Programmiersprache 3.1
  • Die Sprachsyntax ermöglicht nun das Überspringen von Werten in Hash-Literalen und Schlüsselwortargumenten beim Aufruf von Funktionen. Beispielsweise können Sie anstelle des Ausdrucks „{x: x, y: y}“ jetzt „{x:, y:}“ angeben und anstelle von „foo(x: x, y: y)“ - foo( x:, y: )".
  • Stabilisierte Unterstützung für einzeilige Musterübereinstimmungen (ary => [x, y, z]), die nicht mehr als experimentell gekennzeichnet sind.
  • Der „^“-Operator in Musterübereinstimmungen kann jetzt beliebige Ausdrücke enthalten, zum Beispiel: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Bei einzeiligen Musterübereinstimmungen können Sie Klammern weglassen: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Die RBS-Typanmerkungssprache, mit der Sie die Struktur des Programms und die verwendeten Typen bestimmen können, hat Unterstützung für die Angabe der Obergrenze von Typparametern mithilfe des Symbols „<“ hinzugefügt, Unterstützung für Aliase generischer Typen hinzugefügt und Unterstützung für implementiert Sammlungen zum Verwalten von Edelsteinen, verbesserte Leistung und Implementierung vieler neuer Signaturen für integrierte und Standardbibliotheken.
  • Experimentelle Unterstützung für integrierte Entwicklungsumgebungen wurde dem statischen Typanalysator TypePro hinzugefügt, der RBS-Anmerkungen basierend auf der Codeanalyse ohne explizite Typinformationen generiert (z. B. wurde ein Add-on für die Integration von TypePro mit dem VSCode-Editor vorbereitet).
  • Die Reihenfolge der Bearbeitung mehrerer Aufgaben wurde geändert. Beispielsweise wurden früher die Komponenten des Ausdrucks „foo[0], bar[0] = baz, qux“ in der Reihenfolge baz, qux, foo, bar verarbeitet, jetzt jedoch foo, bar, baz, qux.
  • Experimentelle Unterstützung für die Speicherzuweisung für Zeichenfolgen mithilfe des VWA-Mechanismus (Variable Breitenzuweisung) hinzugefügt.
  • Aktualisierte Versionen der integrierten Gem-Module und der in der Standardbibliothek enthaltenen. Die Pakete net-ftp, net-imap, net-pop, net-smtp, Matrix, Prime und Debug sind integriert.

Source: opennet.ru

Kommentar hinzufügen