Ruby プログラミング言語 3.2 のリリース

Ruby 3.2.0 は、プログラム開発の効率が高く、Perl、Java、Python、Smalltalk、Eiffel、Ada、Lisp の優れた機能を組み込んだ動的オブジェクト指向プログラミング言語です。プロジェクト コードは、BSD (「2 条項 BSDL」) および「Ruby」ライセンスに基づいて配布されます。これは、GPL ライセンスの最新バージョンを指し、GPLv3 と完全な互換性があります。

主な改善点:

  • CRuby インタープリターの初期ポートを追加しました。これは、Web ブラウザーまたは wasmtime などのスタンドアロン ランタイムで実行するために WebAssembly 中間コードにコンパイルされます。個別に実行する場合のオペレーティング システムとの直接対話には、WASI (WebAssembly System Interface) API が使用されます。特に、VFS ラッパーは WASI 上で提供されており、これにより、Ruby アプリケーション全体を単一の wasm ファイルの形式でプレゼンテーションにパッケージ化できます。ブラウザーでの実行を使用して、TryRuby などのトレーニングおよびデモ Web サービスを作成できます。開発の現在の段階では、ポートはスレッド API を使用しない基本テスト スイートとブートストラップ テスト スイートに正常に合格しています。このポートは、ファイバー、例外、ガベージ コレクションもサポートしていません。
  • YJIT インプロセス JIT コンパイラは、Rails フレームワークを使用し、多くのメソッドを呼び出す Ruby プログラムのパフォーマンスを向上させる取り組みの一環として、Shopify 電子商取引プラットフォームの開発者によって作成され、安定していると宣言されており、すぐに使用できます。生産用途。以前に使用されていた MJIT JIT コンパイラ (メソッド全体の処理に基づいており、C 言語の外部コンパイラを使用する) との主な違いは、YJIT では Lazy Basic Block Versioning (LBBV) が使用され、統合 JIT コンパイラが含まれていることです。 LBBV では、JIT は最初にメソッドの先頭のみをコンパイルし、使用される変数と引数の型が実行中に決定された後、しばらくして残りをコンパイルします。 YJIT は、Linux、MacOS、BSD、およびその他の UNIX プラットフォーム上の x86-64 および arm64/aarch64 アーキテクチャで使用できます。

    Ruby とは異なり、YJIT コードは Rust 言語で書かれており、コンパイルには Rustc 1.58.0+ コンパイラが必要です。そのため、YJIT ビルドはデフォルトで無効になっており、オプションです。 YJIT を使用した場合、yjit-bench テストを実行すると、解釈を使用した場合と比較して 41% のパフォーマンスの向上が記録されました。

    Ruby プログラミング言語 3.2 のリリース

  • 非効率的で時間のかかる正規表現 (ReDoS) で外部データを処理する場合のサービス拒否攻撃に対する追加の保護が追加されました。記憶技術を使用したマッチング アルゴリズムが大幅に改善されました。たとえば、式「/^a*b?a*$/ =~ “a” * 50000 + “x”」の実行時間は 10 秒から 0.003 秒に短縮されました。最適化のコストはメモリ消費量の増加であり、その消費量は入力データのサイズの約 10 倍になります。 1.0 番目のセキュリティ対策は、正規表現を処理する必要があるタイムアウト (たとえば、「Regexp.timeout = XNUMX」) を定義できることです。
  • syntax_suggest モードが含まれており、欠落または余分な終了「end」式に関連するエラーの原因を診断するのに役立ちます。一致しない `end'、キーワード (`do'、`def`、`if` など) がありませんか? 1 クラス ドッグ > 2 デフバーク > 3 エンド 4 エンド
  • 型と引数に関連するエラーの引数をマークする機能がエラー位置表示モードに追加されました。例: test.rb:2:in `+': nil can't be coerced into Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • 引数のセットを他のメソッドにリダイレクトするための新しい構文を追加しました: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler が提案されています。これは古い MJIT JIT コンパイラのバリアントで、Ruby 言語で書き直されました。 MJIT が MJIT ワーカー スレッドで実行されるのではなく、別のプロセスで実行されるようにしました。
  • Bundler 2.4 では、依存関係の処理に PubGrub バージョン検出器が使用されます。これは、Dart 言語の pub パッケージ マネージャーでも使用されます。以前に使用されていた Molinillo アルゴリズムは RubyGems で引き続き使用されますが、将来的には PubGrub にも置き換えられる予定です。
  • 組み込みの gem モジュールと標準ライブラリに含まれるモジュールの更新バージョン。

出所: オープンネット.ru

コメントを追加します