予算代理店のパンフレットに記載されている観光地を崇拝する製品の側面を紹介するエンジニアリング ブログについてはいくらかありますが、出発点から目的地までの特徴がどのようになったかについての話はもはや十分ではありません。 、旅行記が大好きです。
現在、のために紅の肉を追加した話をしています。 V8、Google Chrome JS/Wasm ランタイムから WasmX、Nginx 用の Kong の今後の Wasm フレームワーク。 これはまた、WasmX とその技術スタックについてのいくつかの洞察を与えることもできます。これは、ベンチャー企業への最近の貢献者であり、特性を追加するためのステップ (および迂回!) はこれを崇拝します. テクニックを時系列に分解しながら、一緒に教育してください (参考までに、私はこれで 20 時間/週の中央値を打っています).
第 1 週と第 2 週: はじめに
ちょっとしたコンテキストを提示するために、これは私の最初のベンチャー1 年間の長期休暇の後、4 月の後半にコングに再び参加して以来、. 以前は Kong Gateway に携わっていたので、Nginx と my
WasmXの一般的な構造とV8を真っ赤に肉付けするアイデア
V8 について教えてもらうために、V8 をいじり始めました。JavaScript エンジンと Wasm を中心としたこのベンチャーは、正しくサポートされているにもかかわらず、は「追加」です。機能に埋め込むための C API を提供しますが、最新の仕様とは一致しません。 また、最も手軽な裸の仮想マシンが装備されています: Web Assembly Machine Interfaces (WASI) は、OS から記録データを探して思いつく従来の機能を提供しますが、発見される場所はありません (V8 はブラウザに依存して保持します)
第 3 週と第 4 週: Nginx への V8 の導入V8 が提示する 1 つの宣言は、libwee8( として知られるスタンドアロンの Wasm ライブラリを生成するアセンブル モードです。 (冗談めかして!)、実質的に準拠した WebAssembly C API を使用します。 I mercurial は、単純な whats up world の例を実行して、それをバンドルしていくつかの Wasm を実行するスタンドアロンの C プログラムを作成しました。 これで、Nginx 内からマークを付けられるようになりました。
WasmX は、Nginx 内で WebAssembly を実行するためのフレームワークです。 これは、ngx_wasm_module リポジトリ (Nginx 用語でのモジュールの「正式な」名前) にあります。 ベンチャー自体での私のオンボーディング能力は、すでに安心して鮮明でした。最初の週に採用した DEVELOPER.md ドキュメントが定義されています。すべての WasmTime と Wasmer の手順を使用して、物事を稼働させる方法を説明します。 仲介のユーザーの観点から、WasmTime と Wasmer をダウンロードし、アンビエンス変数についてライブラリとヘッダー レコードのデータがある場所を指定し、saunter を作成します。 nginxがWasm VMをフリップバンドルするWasmモジュールを同梱する正しいアセンブルで打ち切ります
ので、 V8 に 3 番目のモードを追加するという私の意図。 そして、私はあなたが想像するであろう最高の疑いのないテクニックを実行しました: 私は単純に ngx_wasm_module のすべてのソースを検索してみました。 「wasmtime」および/または「wasmer」を削除し、すべての名声に同一の V8 コードパスを追加しました。 WasmX には src/wasm/wrt/ フォルダーが含まれており、Wasm ランタイムの実装ごとにファイルが含まれているため、最新のファイルを追加しました ngx_wrt_v8.cあります。 珍しいのは、3 つのランタイムすべてが従来の WebAssembly C API、しかしながら、それらのどれも正確に同じテクニックを実施していません — 間違いなく、いくつかの説明は、伝統的なもの自体がいくぶん不正確であるということです (それは若い伝統的なものであり、ロットの合計にもかかわらず) — そのため、すべての VM に実装ファイルが必要です。 V8用のものはWasmerの方が好きな部分とWasmTimeの方が好きな部分があるようですが、Wasmerが一番近い参考になります
V8 では、WebAssembly 入力をテキスト形式のウィスパー構造 (.wat recordsdata として認められています — Wasm ワーカーの ユーモラスさ 別の機会に) バイナリの Wasm (.wasm recordsdata) に変換します。 Wasmer と WasmTime の両方が、この非伝統的な特性を備えていました (もちろん、さまざまな名前が付いています: wat2wasm および wasmtime_wat2wasm) であり、WasmX テイク ルック アット スイートは、テイク ルック アットの条件を明確にロードするために、この特性に依存しています。
第 3 週と第 4 週: V8 を Nginx に導入する (持続)そこで、V8 で使用できる可能性のあるこの特性の実装を取得するために行ったところ、 から参照用のものを発見しました。 WebAssembly バイナリ ツールキット、WABT. ただし、これは CLI 機能の C++ の役割であり、組み込み可能な C ライブラリを提供しません…使用するために JS にトランスパイルすることを明確にするために、最も内側の C API を使用する Emscripten のアセンブル ターゲットとは対照的です。ブラウザから WABT(!)。 驚くべきことに、これこそまさに WABT の Rust バインディングが組み立てるために使用するものです wabt -rs: WABT をバンドルしてパッチを適用し、Emscripten のアセンブル プロセスを乗っ取り、Rust から C シンボルを使用できるようにします。
だから、私がやったことを賭けてください: 私は、これらの Rust シンボルを取り、それらを静的 C として再公開する、ちょっとした Rust モジュールを書きました図書館! 「cwabt」ということで知り、WasmX の V8 統合の内部セクションにしました。 これは、メンテナンスの観点から最もオーバーヘッドの少ないソリューションになり、wabt-rs のクリーンで埋め込み可能なインターフェイスに依存し、Emscripten のすべての悪ふざけをアップストリームで差し控えるようにしています。 現在、V8 で使用できる維持 wat2wasm 特性を実際に維持しています。 WasmX から実行中のスイートを見てみましょう!
すぐに次の障害にぶつかります。 WASIの不足。 ただし、登場する場所を印象付けるために、WasmX がどのように組み合わされて実行されるかを印象付けるために現在維持しています。 WasmX は、Nginx プロセス内で WebAssembly VM を起動することによって実行され (そのセクションを実行しました!)、その後、Wasm モジュールをロードして proxy-wasm API: proxy-wasm は、プロキシ操作の機能 (維持 Kong のプラグイン モデル機器 : ヘッダーの取得”、”ロール ヘッダー” など)。 proxy-wasm の言い方をすると、WasmX によってロードされたこれらのモジュールは「フィルター」であり、さまざまなフェーズで発行できる一連のコールバックを有効にするモジュールであり、 との互換性はなくなりました。 Kong の Lua プラグインゲートウェイ。 Rust に対応する、Wasm がサポートする任意の言語を使用してフィルターを作成し、proxy-wasm SDK にリンクしてそれを組み立てます。ホスト (プロキシ) を、その内部で実行されている Wasm VM に接続します。
インスタンスとして、ctx.get_property
を呼び出す Rust フィルターを作成します。 は Rust で、その後は Rust の proxy-wasm-rust-sdk は、内部的に proxy_get_property 呼び出し。ホストはこれを有効にし (この場合は ngx_wasm_module)、Wasm VM (この場合は V8) に挿入する必要があります。 WasmX はこれらの proxy-wasm 機能を実装しますが、フィルターに直接コンパイルされた Rust コードは最終的に、Wasm 用の Rust コンパイラーが WASI 呼び出しに変換するシステム インターフェイス呼び出しについて行うことになります。 WasmTime と Wasmer はこれらの実装を内部的に提示していますが、V8 ではこれらはどこにも発見されていません。
今回のソリューションは、実際にこれらの機能を実行するには… 実行するよりも簡単に説明できるようになるため、まず最初に、Wasm モジュールのロードに失敗する原因となっている不足している機能を解決する必要がありました。コンパイルされたフィルターが予期した適切なインターフェイスは何でしたか。 従来の Wasm C API がいかに若く不正確であったかについて話し合った後、考えてみてください。 事実上、WASI のシナリオはもはやそれほど多様ではありません。最近の技術の対象であるため、これらの要件はすべて流動的であり、合計に関する仕様書は最近の実装と一致しません。
必要なインターフェイスの最新バージョンの真実を提供するために、WebAssembly 逆アセンブラーに頼る必要がありました。 .wasm バイナリをケース フィルター abet から .wat レコードデータに変換し、逆アセンブル中に学習します。 正直なインターフェースを手に入れたら — そして幸いなことに、それは実行するものを取得するのに欠けていたいくつかの機能にすぎません — 次のステップは実装になります。 Rustフィルターの予想通りのテクニック
WasmX の一般的な構造 — V8、cwabt、WASI を使用
この 2 週間の終了までに、ngx_wrt_v8.c に V8 インターフェイスを実装しました。 )、wat2wasm の cwabt ラッパー、および最小限の準拠 WASI 実装を使用して、WasmX の make take a look at ですべての評価を取得し、ドラフト PR を開きました。 この時点で、V8 は WasmX で効果的に実行されています。 とはいえ、予算はオーバーするとすぐに…
5週目と6週目: 「自分のマシンで実行する」を超えて
第 4 週の終わりまでに、「自分のマシンで実行」ベースで WasmX で V8 を実行していました。 ご存知のように、それは実行されなくなりました。 いずれにしても、Kong での WasmX の首謀者である Thibault から概要の推奨事項を取得する必要があるという回顧録で、ドラフト PR を開きました。 概要のコメントをいただいたので、C と Rust のコードからアセンブル スクリプトと Makefile に焦点を大きく移しました
Asファウンデーションで述べたように、WasmTime と Wasmer は、上流のプロジェクトによってすぐに使用できるバイナリ プログラムとして装備されているライブラリとヘッダー レコードデータを指すアンビエンス変数を設定することにより、WasmX で簡単に元に戻すことができます。 V8 ではそうではなくなりました。 libwee8 を自分でアセンブルするために現在保守しています。 私たちはそれをどのように出荷するかを解決したいと思っていましたが、必要なすべての依存関係 (libwee8 と cwabt) を自動化可能な方法で構築するための常識をカプセル化する必要があったため、すべての仕事を行うシェル スクリプトを作成しました。 そして、「自分のマシンで実行する」以上のものを見るために、「もう 1 台のマシン」でテストしました。これは最近の価格のコンテナーです。私の雰囲気。 そのコンテナで問題なく動作するようになったので、スクリプト Thibault のテクニックを送信しました。幸いなことに、スクリプトは彼のマシン上で重要な試行を実行しました。
コードの概要を説明しながら、開発中に見た 1 つの問題に対処し始めました。これは、アセスメントに合格し続けるために避けていたものです。 o 入力された Wasm バイトコードが寛大であるかどうかをチェックする検証特性をたずねます。 開発中、私は単純にそれをコメントアウトし、すべての Wasm が寛大になると想定しましたが、最終バージョンでは有効なバリデーターが必要でした。 WABT には搭載されているので、wat2wasm と同じように cwabt で公開することも考えましたが、V8 のエラー メッセージから、そうなることを予感しました。彼らの C API 実装でいくつかの腐敗が明らかになるとすぐに、私は彼らの C++ 実装を調べ、十分に判断したところ、検証特性は他のものとは疑わしいほど異なっていると見なされました.

私 お邪魔しました と一行 として送信されたもの) 修理を伴うV8開発者へのパッチ。その後、Chromium 開発者との適切なやり取りに引き延ばされ、C++ スイートで事実を確認し、1 週間後、私の修理と確認が行われました。マージされました。 基本的に、相互作用の最も風変わりなセクションは、Gerrit がパッチを送信する方法を学ぶとすぐに、GitHub でお会いしましょう。 一方、Wasm C API 仕様レポジトリにマージされた PR も送信しました。これにより、インスタンス コードが拡張され、検証特性が説明されました (これは、V8 によるコード フォーマーを見てみるとすぐに明らかになります)。
第 7 週と第 8 週: CI、不安の週この時点で、評価に合格し、私のマシンと Thibault のマシンでローカルに実行され、コンピュータ化された方法で依存関係を構築し、パッチをまとめるためのメンテナンスを行わなかったコードがありました。 V8の修理が上流にマージされるとすぐになるので、もう。 コードを取得して CI をいじる時が来ました。ビルドを徹底的にチェックアウト: サポートされているすべての Wasm ランタイムで評価を実行します。それぞれ
Valgrind
、さらに評価はコンパイル フラグのさまざまな組み合わせを指定してモードを組み立てます。 C と Rust コードのリンターをペアで起動します。これらすべてのモードをローカルで説明し、十分に判断したため、Valgrind は多くの修正を行う必要がありました。 それらのほとんどは簡単でした — Valgrind は命の恩人です! — しかし、テイク ア ルック スイートの内部と外部のそれぞれで実験をし始めたとき、私は奇妙な動作に気付き始めました: C コードを 1 つまたは別の方法で変更した方法に依存して、Valgrind がスイートを見て、手動で実行しているときに文句を言うか、その逆です。 把握/従業員プロセスを管理するためのNginxディレクティブは、終了機能が低下していることを明確に示しているようです。 nginx.conf は、Take a look at::Nginx スイートを利用する際に図が表示されないというフラグを立てますが、そこにたどり着きました.
CI ですべてをぶらぶらする時が来ました。 驚いたことに、私たちのマシンで非常に楽しく実行されたコードは、恐ろしく複雑ではなく、CI ではまったくアセンブルされませんでした。 詳細は省略しますが、saunter を見て分厚い緑を取得するのに 1 週間かかりました。その時間の半分は、CI で V8 を使用して組み立てるための Nginx を入手することさえできませんでした。 V8 のアセンブル システムがメンテナンス コンパイラをダウンロードし、デフォルトでパーソナライズされた C++ の従来のライブラリ実装を使用すると、非互換性の提供が重要になるようです。 もはや有名ではない「カスタム libcxx」を無効にすることで問題は解決しました。
第9週の途中で、最終的に合法的なグリーンアセンブルを取得しました. キャッシュされていない V8 のアセンブルを GitHub Actions でうろうろするのに丸 1 時間かかることを指摘しましたか? ええ、Nginxに正確にハイパーリンクを設定してもらった以外は、それが私のターンアラウンドタイムと同じくらい早くなりました。 を利用して少し高速化しました*)Act
をローカルで実行します。これは、コンテナーを使用してメンテナンス マシンで GitHub Actions の雰囲気を模倣します (そして、Thibault は役に立ちましたが、それをロールアップしました)すでにそれをインストールしてmake actを実行することの話題になります)、しかし厄介なことに、a 私が管理した Act のちっぽけなトロイの木馬.
球状のあの時、 V8 を CI で確実に組み立てた後、WasmX で行った、V8 に遠回しに関連していたマイナーな修正を厳選し、それらを概要とマージが簡単な個別の PR に移動しました。マージされた水銀。 ブランチをリベースし、PR をドラフトから外すことで第 9 週を終了しました。

それはラップです! 第 10 週までのすべての図で、私は自分のまとめたベンチャーにすでに集中していますが、主にCIの調整に関連して、最終的な意見をまとめました。 3 回目と最後の概要サイクルを実行し、その後なんと 95 件の概要コメントがあった後、PR は統合されました。 の今後のテクニカル プレビューをご覧ください。 WasmX、V8と並んでクリムゾンミートアップ!
Thibault Charbonnier の回顧録に特に注目して、思いやりのある気配りのあるコードの意見を寄せてくれました。 この記事が、WasmX の動作を参照するバックグラウンド レコードを展開するため、または長期にわたる冒険に苦労しているときに励ましを思いつくためなど、何らかの方法で貴重なものになることを願っています —彼らはやめる!
作者: Hisham Muhammadニュースレターを購読する!
タグ: 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺
そこで、V8 で使用できる可能性のあるこの特性の実装を取得するために行ったところ、 から参照用のものを発見しました。 WebAssembly バイナリ ツールキット、WABT. ただし、これは CLI 機能の C++ の役割であり、組み込み可能な C ライブラリを提供しません…使用するために JS にトランスパイルすることを明確にするために、最も内側の C API を使用する Emscripten のアセンブル ターゲットとは対照的です。ブラウザから WABT(!)。 驚くべきことに、これこそまさに WABT の Rust バインディングが組み立てるために使用するものです wabt -rs: WABT をバンドルしてパッチを適用し、Emscripten のアセンブル プロセスを乗っ取り、Rust から C シンボルを使用できるようにします。
だから、私がやったことを賭けてください: 私は、これらの Rust シンボルを取り、それらを静的 C として再公開する、ちょっとした Rust モジュールを書きました図書館! 「cwabt」ということで知り、WasmX の V8 統合の内部セクションにしました。 これは、メンテナンスの観点から最もオーバーヘッドの少ないソリューションになり、wabt-rs のクリーンで埋め込み可能なインターフェイスに依存し、Emscripten のすべての悪ふざけをアップストリームで差し控えるようにしています。 現在、V8 で使用できる維持 wat2wasm 特性を実際に維持しています。 WasmX から実行中のスイートを見てみましょう!
すぐに次の障害にぶつかります。 WASIの不足。 ただし、登場する場所を印象付けるために、WasmX がどのように組み合わされて実行されるかを印象付けるために現在維持しています。 WasmX は、Nginx プロセス内で WebAssembly VM を起動することによって実行され (そのセクションを実行しました!)、その後、Wasm モジュールをロードして proxy-wasm API: proxy-wasm は、プロキシ操作の機能 (維持 Kong のプラグイン モデル機器 : ヘッダーの取得”、”ロール ヘッダー” など)。 proxy-wasm の言い方をすると、WasmX によってロードされたこれらのモジュールは「フィルター」であり、さまざまなフェーズで発行できる一連のコールバックを有効にするモジュールであり、 との互換性はなくなりました。 Kong の Lua プラグインゲートウェイ。 Rust に対応する、Wasm がサポートする任意の言語を使用してフィルターを作成し、proxy-wasm SDK にリンクしてそれを組み立てます。ホスト (プロキシ) を、その内部で実行されている Wasm VM に接続します。
インスタンスとして、ctx.get_property
を呼び出す Rust フィルターを作成します。 は Rust で、その後は Rust の proxy-wasm-rust-sdk は、内部的に proxy_get_property 呼び出し。ホストはこれを有効にし (この場合は ngx_wasm_module)、Wasm VM (この場合は V8) に挿入する必要があります。 WasmX はこれらの proxy-wasm 機能を実装しますが、フィルターに直接コンパイルされた Rust コードは最終的に、Wasm 用の Rust コンパイラーが WASI 呼び出しに変換するシステム インターフェイス呼び出しについて行うことになります。 WasmTime と Wasmer はこれらの実装を内部的に提示していますが、V8 ではこれらはどこにも発見されていません。
今回のソリューションは、実際にこれらの機能を実行するには… 実行するよりも簡単に説明できるようになるため、まず最初に、Wasm モジュールのロードに失敗する原因となっている不足している機能を解決する必要がありました。コンパイルされたフィルターが予期した適切なインターフェイスは何でしたか。 従来の Wasm C API がいかに若く不正確であったかについて話し合った後、考えてみてください。 事実上、WASI のシナリオはもはやそれほど多様ではありません。最近の技術の対象であるため、これらの要件はすべて流動的であり、合計に関する仕様書は最近の実装と一致しません。
必要なインターフェイスの最新バージョンの真実を提供するために、WebAssembly 逆アセンブラーに頼る必要がありました。 .wasm バイナリをケース フィルター abet から .wat レコードデータに変換し、逆アセンブル中に学習します。 正直なインターフェースを手に入れたら — そして幸いなことに、それは実行するものを取得するのに欠けていたいくつかの機能にすぎません — 次のステップは実装になります。 Rustフィルターの予想通りのテクニック
WasmX の一般的な構造 — V8、cwabt、WASI を使用
この 2 週間の終了までに、ngx_wrt_v8.c に V8 インターフェイスを実装しました。 )、wat2wasm の cwabt ラッパー、および最小限の準拠 WASI 実装を使用して、WasmX の make take a look at ですべての評価を取得し、ドラフト PR を開きました。 この時点で、V8 は WasmX で効果的に実行されています。 とはいえ、予算はオーバーするとすぐに…
5週目と6週目: 「自分のマシンで実行する」を超えて
第 4 週の終わりまでに、「自分のマシンで実行」ベースで WasmX で V8 を実行していました。 ご存知のように、それは実行されなくなりました。 いずれにしても、Kong での WasmX の首謀者である Thibault から概要の推奨事項を取得する必要があるという回顧録で、ドラフト PR を開きました。 概要のコメントをいただいたので、C と Rust のコードからアセンブル スクリプトと Makefile に焦点を大きく移しました
Asファウンデーションで述べたように、WasmTime と Wasmer は、上流のプロジェクトによってすぐに使用できるバイナリ プログラムとして装備されているライブラリとヘッダー レコードデータを指すアンビエンス変数を設定することにより、WasmX で簡単に元に戻すことができます。 V8 ではそうではなくなりました。 libwee8 を自分でアセンブルするために現在保守しています。 私たちはそれをどのように出荷するかを解決したいと思っていましたが、必要なすべての依存関係 (libwee8 と cwabt) を自動化可能な方法で構築するための常識をカプセル化する必要があったため、すべての仕事を行うシェル スクリプトを作成しました。 そして、「自分のマシンで実行する」以上のものを見るために、「もう 1 台のマシン」でテストしました。これは最近の価格のコンテナーです。私の雰囲気。 そのコンテナで問題なく動作するようになったので、スクリプト Thibault のテクニックを送信しました。幸いなことに、スクリプトは彼のマシン上で重要な試行を実行しました。
コードの概要を説明しながら、開発中に見た 1 つの問題に対処し始めました。これは、アセスメントに合格し続けるために避けていたものです。 o 入力された Wasm バイトコードが寛大であるかどうかをチェックする検証特性をたずねます。 開発中、私は単純にそれをコメントアウトし、すべての Wasm が寛大になると想定しましたが、最終バージョンでは有効なバリデーターが必要でした。 WABT には搭載されているので、wat2wasm と同じように cwabt で公開することも考えましたが、V8 のエラー メッセージから、そうなることを予感しました。彼らの C API 実装でいくつかの腐敗が明らかになるとすぐに、私は彼らの C++ 実装を調べ、十分に判断したところ、検証特性は他のものとは疑わしいほど異なっていると見なされました.
私 お邪魔しました と一行 として送信されたもの) 修理を伴うV8開発者へのパッチ。その後、Chromium 開発者との適切なやり取りに引き延ばされ、C++ スイートで事実を確認し、1 週間後、私の修理と確認が行われました。マージされました。 基本的に、相互作用の最も風変わりなセクションは、Gerrit がパッチを送信する方法を学ぶとすぐに、GitHub でお会いしましょう。 一方、Wasm C API 仕様レポジトリにマージされた PR も送信しました。これにより、インスタンス コードが拡張され、検証特性が説明されました (これは、V8 によるコード フォーマーを見てみるとすぐに明らかになります)。
第 7 週と第 8 週: CI、不安の週この時点で、評価に合格し、私のマシンと Thibault のマシンでローカルに実行され、コンピュータ化された方法で依存関係を構築し、パッチをまとめるためのメンテナンスを行わなかったコードがありました。 V8の修理が上流にマージされるとすぐになるので、もう。 コードを取得して CI をいじる時が来ました。ビルドを徹底的にチェックアウト: サポートされているすべての Wasm ランタイムで評価を実行します。それぞれ
Valgrind
、さらに評価はコンパイル フラグのさまざまな組み合わせを指定してモードを組み立てます。 C と Rust コードのリンターをペアで起動します。これらすべてのモードをローカルで説明し、十分に判断したため、Valgrind は多くの修正を行う必要がありました。 それらのほとんどは簡単でした — Valgrind は命の恩人です! — しかし、テイク ア ルック スイートの内部と外部のそれぞれで実験をし始めたとき、私は奇妙な動作に気付き始めました: C コードを 1 つまたは別の方法で変更した方法に依存して、Valgrind がスイートを見て、手動で実行しているときに文句を言うか、その逆です。 把握/従業員プロセスを管理するためのNginxディレクティブは、終了機能が低下していることを明確に示しているようです。 nginx.conf は、Take a look at::Nginx スイートを利用する際に図が表示されないというフラグを立てますが、そこにたどり着きました.
CI ですべてをぶらぶらする時が来ました。 驚いたことに、私たちのマシンで非常に楽しく実行されたコードは、恐ろしく複雑ではなく、CI ではまったくアセンブルされませんでした。 詳細は省略しますが、saunter を見て分厚い緑を取得するのに 1 週間かかりました。その時間の半分は、CI で V8 を使用して組み立てるための Nginx を入手することさえできませんでした。 V8 のアセンブル システムがメンテナンス コンパイラをダウンロードし、デフォルトでパーソナライズされた C++ の従来のライブラリ実装を使用すると、非互換性の提供が重要になるようです。 もはや有名ではない「カスタム libcxx」を無効にすることで問題は解決しました。
第9週の途中で、最終的に合法的なグリーンアセンブルを取得しました. キャッシュされていない V8 のアセンブルを GitHub Actions でうろうろするのに丸 1 時間かかることを指摘しましたか? ええ、Nginxに正確にハイパーリンクを設定してもらった以外は、それが私のターンアラウンドタイムと同じくらい早くなりました。 を利用して少し高速化しました*)Act
をローカルで実行します。これは、コンテナーを使用してメンテナンス マシンで GitHub Actions の雰囲気を模倣します (そして、Thibault は役に立ちましたが、それをロールアップしました)すでにそれをインストールしてmake actを実行することの話題になります)、しかし厄介なことに、a 私が管理した Act のちっぽけなトロイの木馬.
球状のあの時、 V8 を CI で確実に組み立てた後、WasmX で行った、V8 に遠回しに関連していたマイナーな修正を厳選し、それらを概要とマージが簡単な個別の PR に移動しました。マージされた水銀。 ブランチをリベースし、PR をドラフトから外すことで第 9 週を終了しました。

それはラップです! 第 10 週までのすべての図で、私は自分のまとめたベンチャーにすでに集中していますが、主にCIの調整に関連して、最終的な意見をまとめました。 3 回目と最後の概要サイクルを実行し、その後なんと 95 件の概要コメントがあった後、PR は統合されました。 の今後のテクニカル プレビューをご覧ください。 WasmX、V8と並んでクリムゾンミートアップ!
Thibault Charbonnier の回顧録に特に注目して、思いやりのある気配りのあるコードの意見を寄せてくれました。 この記事が、WasmX の動作を参照するバックグラウンド レコードを展開するため、または長期にわたる冒険に苦労しているときに励ましを思いつくためなど、何らかの方法で貴重なものになることを願っています —彼らはやめる!
作者: Hisham Muhammadニュースレターを購読する!
タグ: 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺

CI ですべてをぶらぶらする時が来ました。 驚いたことに、私たちのマシンで非常に楽しく実行されたコードは、恐ろしく複雑ではなく、CI ではまったくアセンブルされませんでした。 詳細は省略しますが、saunter を見て分厚い緑を取得するのに 1 週間かかりました。その時間の半分は、CI で V8 を使用して組み立てるための Nginx を入手することさえできませんでした。 V8 のアセンブル システムがメンテナンス コンパイラをダウンロードし、デフォルトでパーソナライズされた C++ の従来のライブラリ実装を使用すると、非互換性の提供が重要になるようです。 もはや有名ではない「カスタム libcxx」を無効にすることで問題は解決しました。
第9週の途中で、最終的に合法的なグリーンアセンブルを取得しました. キャッシュされていない V8 のアセンブルを GitHub Actions でうろうろするのに丸 1 時間かかることを指摘しましたか? ええ、Nginxに正確にハイパーリンクを設定してもらった以外は、それが私のターンアラウンドタイムと同じくらい早くなりました。 を利用して少し高速化しました*)Act
をローカルで実行します。これは、コンテナーを使用してメンテナンス マシンで GitHub Actions の雰囲気を模倣します (そして、Thibault は役に立ちましたが、それをロールアップしました)すでにそれをインストールしてmake actを実行することの話題になります)、しかし厄介なことに、a 私が管理した Act のちっぽけなトロイの木馬.
球状のあの時、 V8 を CI で確実に組み立てた後、WasmX で行った、V8 に遠回しに関連していたマイナーな修正を厳選し、それらを概要とマージが簡単な個別の PR に移動しました。マージされた水銀。 ブランチをリベースし、PR をドラフトから外すことで第 9 週を終了しました。
それはラップです! 第 10 週までのすべての図で、私は自分のまとめたベンチャーにすでに集中していますが、主にCIの調整に関連して、最終的な意見をまとめました。 3 回目と最後の概要サイクルを実行し、その後なんと 95 件の概要コメントがあった後、PR は統合されました。 の今後のテクニカル プレビューをご覧ください。 WasmX、V8と並んでクリムゾンミートアップ!
Thibault Charbonnier の回顧録に特に注目して、思いやりのある気配りのあるコードの意見を寄せてくれました。 この記事が、WasmX の動作を参照するバックグラウンド レコードを展開するため、または長期にわたる冒険に苦労しているときに励ましを思いつくためなど、何らかの方法で貴重なものになることを願っています —彼らはやめる!
作者: Hisham Muhammadニュースレターを購読する!
タグ: 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺
第 10 週までのすべての図で、私は自分のまとめたベンチャーにすでに集中していますが、主にCIの調整に関連して、最終的な意見をまとめました。 3 回目と最後の概要サイクルを実行し、その後なんと 95 件の概要コメントがあった後、PR は統合されました。 の今後のテクニカル プレビューをご覧ください。 WasmX、V8と並んでクリムゾンミートアップ!
Thibault Charbonnier の回顧録に特に注目して、思いやりのある気配りのあるコードの意見を寄せてくれました。 この記事が、WasmX の動作を参照するバックグラウンド レコードを展開するため、または長期にわたる冒険に苦労しているときに励ましを思いつくためなど、何らかの方法で貴重なものになることを願っています —彼らはやめる!