メインコンテンツまでスキップ

ガベージコレクテッドプログラミング言語を効率的にWebAssemblyに導入する新しい方法

· 約34分
Alon Zakai

WebAssembly Garbage Collection (WasmGC)に関する最近の記事では、ガベージコレクション(GC)提案が、人気のあるGC言語をWasmでより良くサポートする方法について高いレベルで説明されています。このことでいかに重要であるかがわかります。この記事では、Java、Kotlin、Dart、Python、C#のようなGC言語をWasmに移植するための技術的な詳細に踏み込んでいきます。実際には2つの主なアプローチがあります:

V8における制御フローの整合性

· 約12分
Stephen Röttger

制御フローの整合性(CFI)は、制御フローの乗っ取りによる攻撃を防止することを目的としたセキュリティ機能です。攻撃者がプロセスのメモリを改ざんすることに成功しても、追加の整合性チェックにより任意のコード実行を防ぐことができます。本ブログ記事では、V8にCFIを有効にするための作業について説明します。

V8ヒープスナップショットの高速化

· 約14分
Jose Dapena Paz

このブログ投稿はJosé Dapena Paz (Igalia) によって執筆され、Jason Williams (Bloomberg)、Ashley Claymore (Bloomberg)、Rob Palmer (Bloomberg)、Joyee Cheung (Igalia)、およびShu-yu Guo (Google) の貢献を受けています。

この投稿では、V8ヒープスナップショットに関して、Bloombergのエンジニアが発見したいくつかのパフォーマンスの問題と、それを解決してJavaScriptメモリ分析をこれまで以上に高速化する方法について話します。

問題

Bloombergのエンジニアは、JavaScriptアプリケーションのメモリリークを診断する作業を行っていました。アプリはOut-Of-Memoryエラーで失敗していました。テストされたアプリケーションでは、V8ヒープの上限が約1400 MBに設定されていました。通常、V8のガベージコレクターはヒープ使用量をその制限内に保つことができるはずであるため、この失敗はリークがある可能性を示していました。

WebAssembly 尾部呼び出し

· 約11分
Thibaud Michaud, Thomas Lively

V8 v11.2でWebAssemblyの尾部呼び出しをリリースします!この記事では、この提案の概要を簡単に説明し、EmscriptenでのC++コルーチンの興味深い使用例を示し、V8が尾部呼び出しを内部でどのように処理するかを紹介します。

尾部呼び出し最適化とは?

ある呼び出しが現在の関数から戻る前に実行される最後の命令である場合、それは尾部位置にあると言われます。コンパイラは、そのような呼び出しを最適化して、呼び出し元のフレームを破棄し、呼び出しをジャンプに置き換えることができます。

これは特に再帰関数にとって有用です。例えば、次のC関数はリンクリストの要素の合計を計算します:

int sum(List* list, int acc) {
if (list == nullptr) return acc;
return sum(list->next, acc + list->val);
}

通常の呼び出しでは、これは𝒪(n)のスタック空間を消費します:リストの各要素が呼び出しスタックに新しいフレームを追加します。リストが十分に長い場合、スタックが非常に速くオーバーフローする可能性があります。呼び出しをジャンプに置き換えることにより、尾部呼び出し最適化はこの再帰関数を本質的に𝒪(1)スタック空間を使用するループに変換します:

Oilpanにおけるポインタ圧縮

· 約18分
Anton Bikineev および Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz))、ウォーキング逆アセンブラ

4ギガバイト未満のRAMを使用するプログラムをコンパイルする場合に、64ビットのポインタを使用するのは全くもって愚かなことです。このようなポインタの値が構造体内に現れると、メモリの半分を無駄にするだけでなく、キャッシュの半分を効果的に捨てることになります。

Donald Knuth (2008)

リリースブログ投稿を終了

· 約3分
Shu-yu Guo ([@shu_](https://twitter.com/_shu))

V8の新しいリリースブランチごとにブログ投稿が行われてきましたが、v9.9以降、リリースブログ投稿がないことにお気づきかもしれません。v10.0以降、新しいブランチごとのリリースブログ投稿を終了します。しかしご安心ください。リリースブログ投稿で入手できていた情報はすべて引き続き入手可能です!今後その情報をどこで見つけられるかを以下にお読みください。

C++における時間的メモリ安全性のレトロフィット

· 約15分
Anton Bikineev, Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), Hannes Payer ([@PayerHannes](https://twitter.com/PayerHannes))
注記

注: 本投稿は元々Google Security Blogに投稿された内容です。

Chromeにおけるメモリ安全性は、ユーザーを保護するために絶え間なく進行中の取り組みです。私たちは常に悪意のある行為者を一歩先んじるために、さまざまな技術を試験しています。その一環として、本投稿ではC++のメモリ安全性を向上させるためにヒープスキャンニング技術を使用した私たちの取り組みについて紹介します。

新しいクラス機能を使用するインスタンスの初期化がより高速に

· 約15分
[Joyee Cheung](https://twitter.com/JoyeeCheung), インスタンス初期化担当

クラスフィールドはV8 v7.2以降でサポートされ、プライベートクラスメソッドはv8.4以降でサポートされています。提案が2021年にステージ4に到達してから、新しいクラス機能のサポートを改善する作業が開始されました。それまでに、この採用に影響を与える2つの主な問題がありました:

V8リリース v9.9

· 約4分
イングヴァール・ステパニャン([@RReverser](https://twitter.com/RReverser)) 彼の99%

4週間ごとに、私たちはV8のリリースプロセスの一環として新しいブランチを作成しています。各バージョンは、Chromeのベータマイルストーンの直前にV8のGitメインからブランチされます。本日は、新しいブランチV8バージョン9.9を発表できることを嬉しく思います。このバージョンは数週間後のChrome 99の安定版と共にリリースされるまでベータ版です。V8 v9.9には、開発者向けのさまざまな便利なツールが満載されています。この投稿では、リリースに向けたハイライトの一部をプレビューします。

Oilpanライブラリ

· 約8分
Anton Bikineev、Omer Katz([@omerktz](https://twitter.com/omerktz))、Michael Lippautz([@mlippautz](https://twitter.com/mlippautz))効率的で効果的なファイル移動者たち

この投稿のタイトルから、オイルパンに関する書籍のコレクションを深掘りするのかと思うかもしれませんが、今回は違います。その代わりに、V8 v9.4以降ライブラリとしてホストされているC++ガベージコレクターであるOilpanについて詳しく見ていきます。