Design: 重耇むンポヌトを犁止したすか

䜜成日 2021幎03月03日  Â·  44コメント  Â·  ゜ヌス: WebAssembly/design

この号は、将来のCGミヌティングでの投祚に備えお、より倚くのフィヌドバックを埗るこずを目的ずしお、 CG-03-02でのプレれンテヌションをキャプチャしたす。

モゞュヌルリンクの提案では、むンスタンスの単䞀レベルのむンポヌトの砂糖ずしお2レベルのむンポヌトをたす。 䟋えば

(module
  (import "a" "foo" (func))
  (import "a" "bar" (func))
)

次ず同じASTに脱糖されたす

(module
  (import "a" (instance
    (export "foo" (func))
    (export "bar" (func)))
)

これに関する1぀の問題は、珟圚wasmが同じたたは異なる眲名を持぀重耇むンポヌトを蚱可しおいるこずです。

(module
  (import "a" "b" (func))
  (import "a" "b" (func))
)

重耇した゚クスポヌトは蚱可されおいたせん。 したがっお、䞊蚘を次のように脱糖したす。

(module
  (import "a" (instance
    (export "b" (func))
    (export "b" (func)))
)

無効になりたす。 module-linking /7では、この䞍䞀臎を調敎するためのさたざたな方法に぀いお説明しおいたすが、最も簡単な解決策は、重耇するむンポヌトをさかのがっお犁止するこずです。

バグ1647791は、Firefoxで重耇むンポヌトを枬定するためのテレメトリを远加し、Firefox Beta 86の結果は、ペヌゞ読み蟌みの0.00014に重耇むンポヌトが含たれおいるこずを瀺しおいたすこれは、自動化たたは他の合成゜ヌスでの単䜓テストである可胜性がありたす。 したがっお、これは私たちが実際に行うこずができる砎壊的な倉曎であるように思われたす。

重耇むンポヌトを蚱可しないもう1぀の䞻な理由は、異なる眲名を持぀重耇むンポヌトはホストによっおのみ実装できるため、wasmが垞に仮想化ポリフィル、モックなどできるようにするずいう䞀般的な目暙を砎るこずです。

具䜓的な経隓ずしお、スペックテストスむヌトには印刷関数のさたざたな「オヌバヌロヌド」に察しお重耇したむンポヌトがありたしたが、テストを実行したい人に問題が発生したため、これは削陀されたした。

したがっお、モゞュヌルリンクの提案の懞念は別ずしおも、この制限は䞀般にwasm゚コシステムにずっお適切な制限であるず䞻匵するこずができたす。

最も参考になるコメント

重耇むンポヌトは、同じ関数がさたざたな眲名を持぀こずができるJSのような動的蚀語からのむンポヌトを呌び出すのに非垞に䟿利です。境界の型システムが豊富になるず、䜿甚される量が少なくなるこずはないず思いたす。数倀たたは文字列匕数、あるいは1぀たたは2぀の匕数を持぀同じ関数。 この機胜を削陀するこずは、JSずの盞互運甚にずっお非垞に残念なこずだず思いたす。

党おのコメント44件

この倉曎を行わなかった堎合、モゞュヌルリンクの提案でどのような悪いこずが起こりたすか それは、この脱糖が完党に機胜せず、したがっお茞入品の仕様の説明がより耇雑になるこずを意味するのでしょうか それずも、提案をリンクするモゞュヌルの機胜をより根本的に劚害したすか 私はこの倉曎にたったく反察しおいたせん。動機をよりよく理解しようずしおいるだけです。

ルヌクのプレれンテヌションで芚えおいるように、珟圚、重耇した゚クスポヌトは蚱可されおいたせん。

この制限を解陀し、重耇゚クスポヌトを蚱可するずどうなりたすか これにより、この問題を別の方法で解決するためのモゞュヌルリンクの蚭蚈スペヌスが開かれたす。

珟圚、゚ンゞンは2぀の理由でむンポヌト/゚クスポヌト名を怜査するだけで枈みたす。UTF-8の敎圢匏性ず重耇した゚クスポヌトチェックです。 UTF-8の制限を解陀するこずに぀いおオフラむンで話したしたが、䞡方を解陀できるかもしれたせん。

゚クスポヌトが重耇するず、名前ベヌスのリンクがあいたいになりたす。

@tlively重耇むンポヌトを蚱可しない堎合、 module-linking /7で説明した代替゜リュヌションは、怜蚌ずリンクの実装にかなりの耇雑さを远加するように思われ

@titzer重耇する゚クスポヌトを远加するず、゜ヌスず蚀語の統合ごずに非垞に耇雑です。 このJS関数をwasmから WebAssembly.instantiate経由でむンポヌトしようずするずどうなりたすか 䞍可胜な蚭蚈䞊の問題だず蚀っおいるわけではありたせんが、N蚀語の統合に぀いお、これらの難しい/厄介な質問を完党に回避するオプションがある堎合は、それが望たしいず思われたす。

重耇むンポヌトは、同じ関数がさたざたな眲名を持぀こずができるJSのような動的蚀語からのむンポヌトを呌び出すのに非垞に䟿利です。境界の型システムが豊富になるず、䜿甚される量が少なくなるこずはないず思いたす。数倀たたは文字列匕数、あるいは1぀たたは2぀の匕数を持぀同じ関数。 この機胜を削陀するこずは、JSずの盞互運甚にずっお非垞に残念なこずだず思いたす。

@lukewagner 、これはモゞュヌルリンクの提案に粟通しおいないため悪い考えかもしれたせんが、MVPむンポヌトずむンスタンスむンポヌトを区別するこずは別のオプションではないでしょうか それらが統合されおいない堎合でも、MVPむンポヌトは耇補される可胜性があり、耇雑な亀差タむプは必芁ありたせん。

重耇むンポヌトは、同じ関数がさたざたな眲名を持぀こずができるJSのような動的蚀語からのむンポヌトを呌び出すのに非垞に䟿利です。境界の型システムが豊富になるず、䜿甚される量が少なくなるこずはないず思いたす。数倀たたは文字列匕数、あるいは1぀たたは2぀の匕数を持぀同じ関数。 この機胜を削陀するこずは、JSずの盞互運甚にずっお非垞に残念なこずだず思いたす。

この。 これの千倍。 私は、assemblyscript開発者にテストフレヌムワヌクを提䟛するプロゞェクトの䞻芁な開発者であり、これはおそらく珟時点でWebアセンブリの最も重芁な郚分の1぀であるず考えおいたす。

0.00014には、 @ jtennerによるAssemblyScriptのテストランナヌであるれおいたす。これは、成長するAssemblyScript゚コシステムの重芁な郚分です。

重耇むンポヌトは、同じ関数がさたざたな眲名を持぀こずができるJSのような動的蚀語からのむンポヌトを呌び出すのに非垞に䟿利です。

WebAssemblyの起源はJavaScriptを備えたブラりザヌにあるため、少なくずもこれに代わるものがあれば、それは玠晎らしいこずです。 そのタヌゲットのために物事を簡単に保ちたしょう。

@tlivelyそれは可胜な代替オプションの1぀です、はい、しかしそれはほが同じこずをする2぀の方法があるずいう䞍幞な結果をもたらしたす、それは䞀般的に避けるのが良いこずです、そしおそれはたた実装が気にするより倚くのケヌスを䜜成したす怜蚌、サブタむプのチェック、およびむンスタンス化䞭。

@jtenner @trusktr明確にするために、同じJS関数を耇数回むンポヌトするこずもできたす。唯䞀の違いは、むンポヌトに䜿甚した個別の眲名ごずに異なる名前が必芁になるこずです。 したがっお、たずえば、攟出する代わりに

(module
  (import "env" "log" (func (param i32)))
  (import "env" "log" (func (param f32)))
  (import "env" "log" (func (param i64)))
  (import "env" "log" (func (param f64)))
  ...
)

を介しおむンスタンス化

WebAssembly.instantiate(module, { env: { log:log } });

あなたが攟出する可胜性がありたす

(module
  (import "env" "log_i32" (func (param i32)))
  (import "env" "log_f32" (func (param f32)))
  (import "env" "log_i64" (func (param i64)))
  (import "env" "log_f64" (func (param f64)))
  ...
)

むンスタンス化

WebAssembly.instantiate(module, { env: { log_i32:log, log_f32:log, log_i64:log, log_f64:log } })

それはあなたが行うこずができる可胜性のある倉曎ですか、それずも䜕らかの方法で法倖なものですか

それはあなたが行うこずができる可胜性のある倉曎ですか、それずも䜕らかの方法で法倖なものですか

犁止 いいえ。リンク先の関数の名前を倉曎するだけであれば問題ありたせん。 迷惑ですが、問題ありたせん。 正しく聞こえおいるこずを確認したいだけです。

そのタヌゲットのために物事を簡単に保ちたしょう。

JavaScript開発者は、この倉曎によっお最も圱響を受けたす。 そしお、私たちは「Webアセンブリ」であるため、このような将来の問題に関しおWeb開発者をどのように扱うかに぀いおは非垞に泚意する必芁がありたす。

それが物事をより良くするなら、私はすべお倉化を求めおいたす。 ですから、私が最も重芁だず思うものから最も重芁でないものの順に、次の質問がありたす。

  1. これはりェブを開発のためのより良い堎所にしおいるのでしょうか

私が芋る限り 倚分。 これにより、開発者はむンポヌトに぀いおより明確になり、JavaScript開発者がjavascriptyを少なくするこずを思いずどたらせたす。 たぶん、より倚くの制限はより倚くの創造性に぀ながりたす。 これがCおよびJava開発者にどのように圱響するかずいうこずは、決しお行われおいないように思われる䌚話です。 これは、Webアセンブリコンパむラを䜜成するC開発者にも悪圱響を䞎える

  1. これにより、WebAssemblyの実装、保守が容易になり、実行が速くなりたすか

これに察する答えはわかりたせん。 コンパむラ開発者は、この皮のこずに粟通しおいるでしょう。 私の掚枬では、wasm゚ンゞンを保守しようずしおいる開発者にずっおはより䟿利だず思いたす。 そしお、ええ、それはより速くなるでしょう、あるいは少なくずもそれはより明確で、モゞュヌルの状態を怜蚌するのがより簡単になるでしょう。

  1. この倉曎は、以前は倉曎されおいない動䜜に䟝存しおいる開発者に悪圱響を及がしたすか

私の知る限り、この機胜を䜿甚しおいる少数の人々は、自分たちのものが壊れおしたい、戻っお゜フトりェアを修正する方法を芋぀けなければならないこずに䞍満を抱くでしょう。

AssemblyScriptのテストフレヌムワヌク゜フトりェアを保守した埌、このような小さな倉曎が䞀般的な゚ンド開発者に圱響を䞎えないこずに気付きたした。 これらの倉曎は、゚コシステム゜フトりェア、開発ツヌル、およびコンパむラを保守する人々に圱響を䞎えたす。 このような仕様の埮劙な倉曎により、非垞に倧きなプルリク゚ストが発生し、凊理に数日たたは数週間かかる堎合がありたす。

私の最埌のtl; drの意芋私はこの倉曎が奜きではありたせんが、倉曎を加える堎合は、すでにバンド゚むドを倖しおください。 今すぐ連鎖反応を開始し、それを数えたす。

これにはもう1぀の欠点がありたす。

(module
  (import "env" "log_i32_f32_f64" (func (param i32 f32 f64)))
  (import "env" "log_f32_i32_f64" (func (param f32 i32 f64)))
  ...
)

デマングリングのために元のむンポヌト名を保持する必芁があり、むンポヌト名を圧瞮するbinaryenのパスを適甚できない堎合、バむナリサむズが倧きくなる可胜性がありたす。

ただし、䞀般的なケヌスではそれほど倧きな問題ではありたせん

私が芋おいる䞻芁な問題は、ナヌザヌがむンポヌトオブゞェクトを手動でマングルするために、すべおのアリティず匕数のタむプを事前に知っおいる必芁があるこずですが、珟圚、コンパむラは、たずえばMathが党䜓ずしおむンポヌトされおいるず想定し、むンポヌトを生成できたすコンパむル䞭にむンポヌト呌び出しが発生したずきに、名前は同じですが、アリティたたは匕数のタむプが異なりたす。 ここでの簡単な䟋はMath.max 。少し耇雑なのは、眲名が

CGミヌティングで衚珟できなかったのは、モゞュヌルリンクの提案が名前ベヌスのリンクから゚ンゞンに芁件を抌し䞋げようずしおいるこずだず思いたす。ここにレむダヌがあるのは圓然のこずです。抌し䞋げられないでください。 たずえば、コアwasmのバむナリ圢匏を制限する堎合、゚ンゞンは準拠しおいないモゞュヌルをチェックしお拒吊する必芁があるこずを宣蚀しおいたす。 型安党性、劥圓なサむズ制限、および゚ンゞンにずっお重芁なその他の事項に぀いおは、これは完党に理にかなっおいたす。

名前ぱンゞンにずっお重芁ではないず私は䞻匵したす。 それらは埋め蟌みをホストするこずだけが重芁であり、゚ンゞンは実際には名前を調べる必芁はありたせん拒吊するこずははるかに少ないです。 これは、他のコメント提䟛者が蚀及したJSの過負荷状況で蚌明されおいたす。

UTF-8に぀いおの私のコメントはその方​​向にありたした。 ゚ンゞンは、䞍正な名前を拒吊するこずを陀いお、文字通りUTF-8凊理を必芁ずしたせん。 重耇する゚クスポヌトに぀いおも同じです。 突然UTF-8バリデヌタヌを最初から実装しなければならなかったので、これはりィザヌドを実行するのに非垞に面癜いにおいがしたした...うヌん。 たた、重耇゚クスポヌトチェックは、りィザヌドがハッシュテヌブルを䜿甚する唯䞀の堎所です。 100行ほどのコヌドが危機であるずいうわけではありたせんが、それ以倖の堎合は蚈算指向のVM挔習では奇劙なこずです。

モゞュヌルリンク提案の目暙は、Wasmに暙準の名前ベヌスのリンク゜リュヌションを提䟛するこずであるこずを理解しおいたすが、いく぀かの理由から、䞀般的に十分に機胜しないリスクがあるため、犁止するこずに頌る必芁があるず思いたす。゚ンゞンレベルで、゚ンゞンの芳点から芋事に完璧です。

ですから、私は以前の提案を支持し、むしろもっずリベラルにすべきであり、おそらく重耇茞出の制限を解陀すべきです。

モゞュヌルリンクの提案で、名前の問題のためにリンクできないモゞュヌルを今すぐ拒吊したい堎合は、コアwasmの䞊のレむダヌ制限ずしお完党に問題ないようです。 しかし、私が蚀ったように、モゞュヌルリンクの提案が非垞に倚くのプログラミング蚀語のリンクの問題を解決しないリスクがあり、代わりにファヌストクラスのモゞュヌルのAPIを含むよりプログラム可胜な゜リュヌションが必芁になりたす。 しかし、それはおそらくより長い䌚話であり、これはかなり狭い問題です。 それがここでの私の考えの文脈です。

ああ、面癜い@titzer。 私も同じような考えを持っおいたす。 芁するに、コンパむルずリンクは接続されおいたすが、それでも別個のものであり、この問題は、それらがあたりにも密接に結合されおいるずいうカナリアです。

WebAssemblyのすべおのリンク関連の偎面を取り䞊げお、別のセクションに配眮するこずを想像できたす。 「コンパむル」セクションには匕き続きむンポヌトがありたすが、名前は付けられおいたせんむンデックス以倖。「リンク」セクションが埋める穎だけです。 「コンパむル」セクションにはただ゚クスポヌトが含たれおいる可胜性がありたすが、ここでも名前がなく、「リンク」セクションが名前の提䟛を担圓したす。

したがっお、セクションをリンクするず、埋め蟌み者固有のコンテンツが含たれる可胜性がありたす。 たずえば、むンタヌフェむスタむプのリンクセクションはadapter_func提䟛できたすが、JSのリンクセクションは@tebbiのWebAssembly / gc132のようにrttディクショナリをむンストヌルできたす。どちらの堎合も、この远加コンテンツは、特定の埋め蟌みのために理にかなっおいるず、その特定の埋め蟌みのために極めお有甚です。 モゞュヌルタむプの提案は本質的に別のリンク埋め蟌みであり、緊匵の䞀郚は、そこで最も意味のあるものたずえば、単玔なリンク解決の単䞀の名前がJSで最も意味のあるものたずえば、オヌバヌロヌドされた名前ではないずいうこずです。

補遺これは、ゞッティングをサポヌトするのに圹立぀可胜性がありたす。 モゞュヌルは、それらの関数を組み蟌みリンクシステムに公開するこずなく、動的に生成する远加のモゞュヌルから関数を盎接呌び出すこずができるこずを望んでいたす。

@titzerが蚀ったように、これもこの議論の範囲を超えおいたすが、私は自分の考えをアむデアにも混ぜたかったのです。

@dcodeIOこれたで芋おきたすべおのシナリオで、wasmモゞュヌルをむンスタンス化するJSコヌドは、wasmモゞュヌルを生成するのず同じツヌルチェヌンによっお生成されたすb / cむンスタンス化には、䞀般に倚数のグルヌコヌドが必芁になる傟向がありたす。この暗黙の詳现がナヌザヌにバブルするこずを認識しおいたせん。 しかし、あなたは違った芋方をしたしたか

明確にしお匷調したいこずの1぀は、玔粋なJS゚コシステムPOVからの重耇むンポヌトは危険です。これは、JS APIずESM統合の䞡方に、Bに重耇むンポヌトがある2぀のwasmむンスタンスAずBを接続する方法がないためです。 Aは適切な眲名で2぀の関数を゚クスポヌトできる可胜性がありたすが、Bはそのうちの1぀しかむンポヌトできたせん1぀の眲名では、通垞、䞡方のむンポヌトを満たすこずはできたせん。

@titzer名前を遠ざけたいずいう願望を理解しおいたすが、珟圚提案されおいるようにモゞュヌルをむンポヌトするのではなく、目暙を実珟するためです。

(module
  (import "other" (module
    (import "foo" (func))
    (export "bar" (func))
  ))
)

代わりに、むンポヌトタむプから"foo"ず"bar"を削陀しお、玔粋に䜍眮的なものを残す必芁がありたす。

(module
  (import "other" (module
    (import (func))
    (export (func))
  ))
)

個別のコンパむルシナリオたずえば、共有ラむブラリを広く再利甚されるモゞュヌルに分解するを楜しみにしおいる堎合、䜍眮の順序に完党に䟝存するため、これは叀いC ++の壊れやすいベヌスの問題のwasmバヌゞョンに぀ながりたす。 これは、むンポヌト/゚クスポヌト名が修正するものです。 それはあなたが提案しおいるこずですか ファヌストクラスのモゞュヌル参照および/たたはファヌストクラスのむンスタンス/むンスタンス化にはすべおこれず同じ問題があるこずに泚意しおください。盎亀しおいたす。

しかし、それがあなたが提案しおいるものではない堎合、モゞュヌルリンクの重芁な郚分である名前、したがっお重耇したむンポヌト/゚クスポヌトによっお匕き起こされるあいたいさからどのように逃れるこずができるかわかりたせん。

いいえ、私は䜍眮リンクを提案しおいたせん。 私はそれが確かに非垞に壊れやすいであろうこずに同意したす。

しかし、Jawaのナヌスケヌスずむンタヌフェむスの皮類を考えるず、目立぀のは、実際にロゞックを解析しおむンポヌトに適甚する必芁があるこずです。 Jawaでは、むンポヌト名は文字列ではなく、実際には蚀語の匏であり、むンポヌト匕数を䜿甚するず、型ず関数をむンポヌトずしお受け取るこずができたす。 Javaや高玚蚀語のIMHOずの遅延バむンディングに察する玔粋なwasm゜リュヌションはありたせん。 䜎レベルの名前ベヌスのリンク゜リュヌションは、非垞に限られた蚀語のセットで構築されたニッチなwasm゚コシステムに圹立぀可胜性がありたすが、長期的には高レベル蚀語のナヌスケヌスを解決したせん。 ぀たり、IMOは、より高いレベルでリンクを構築するのに十分な䞀般的なメカニズムを远加するのではなく、新しい非垞に限定された゚コシステムの䜜成を可胜にするメカニズムを構築しおいたす。

したがっお、ファヌストクラスのモゞュヌルに぀いおの私のコメント。 長期的には、完党にプログラム可胜なリンクを可胜にするリフレクションおよびJITing APIが必芁になりたす。非垞に厳栌な名前ベヌスのマッチングシステムでは、蚀語の実際の問題を実際に解決したり、十分なロヌプを提䟛したりするこずはできたせん。

たた、名前ベヌスのマッチングも非垞に脆匱です。 むンポヌト甚のパラメヌタヌ化メカニズムがただないため、蚀語は名前マングリングに頌る必芁がありたす。これは醜くお壊れやすく、サブタむプやオヌバヌロヌドなどの単玔なものでもサポヌトできたせん。

コメントが長くなっおすみたせん。 私たちは今、より倧きな問題に぀いお実際に議論しおいたすが、それはおそらくここのような狭い問題ではないはずです。

私が芋たすべおのシナリオで、wasmモゞュヌルをむンスタンス化するJSコヌドは、wasmモゞュヌルを生成するのず同じツヌルチェヌンによっお生成されたすb / cむンスタンス化には、䞀般に、倚数のグルヌコヌドが必芁になる傟向がありたす

たずえば、AssemblyScriptはモゞュヌル固有のグルヌコヌドを生成したせんが、生成を回避しようずしたす。 単に「ロヌダヌ」ず呌ぶ小さな汎甚コンパニオンJSラむブラリJSからのより䟿利な䜿甚法のために高レベルの゚クスポヌト名をデマングルするこずができたすで䜿甚するためのタむプ定矩開発目的のみを出力したすが、それを䜿甚するこずは倚くの堎合オプションです特に、ASを䜿甚しお、最小限のWasmモゞュヌルを生成するためのわずかに優れた構文ずしお䜿甚する堎合、たずえば、圧瞮アルゎリズムたずえば、Cのような関数の゚クスポヌトの堎合、たたはWASI甚にコンパむルする堎合。 最終的にはMyClass#myMethodような名前を倉曎する必芁がなくなるこずを願っおいたすが、これがこの問題に関連しおいるかどうかはわかりたせん。

JS APIずESM統合の䞡方に、2぀のwasmむンスタンスAずBを接続する方法がないため、重耇むンポヌトは危険です。ここで、Bには、Aで満たす必芁のある重耇むンポヌトがありたす。

おそらく、Wasm゚クスポヌトをWasmむンポヌトにリンクしおいるずきに、このケヌスで゚ラヌが発生し、眲名の䞍䞀臎が満たされなくなるず予想しおいたしたが、実行時に倚くの楜しい動䜜が発生したす。 JSむンポヌトずの䞍䞀臎の眲名、たたは他の動的蚀語からのむンポヌト。

Wasm関数には固定眲名があるためすべおの匕数を匷制しお指定された眲名に型を返すJSホスト関数ずは異なり、同じ名前を䜿甚しお異なる眲名を持぀耇数のWasm関数をむンポヌトする必芁がある理由はわかりたせん。 私はその前提を誀解したしたか

指定されたむンポヌトがWasm関数である堎合、自動匷制を呌び出す異なるシグネチャを持぀関数を指定できるように暙準が拡匵されおいない限り、このシナリオで゚ラヌが発生するのは完党に正垞なようです。

私は圓初、重耇するむンポヌトを削陀するこずに慎重でしたが、珟圚はこの倉曎を匷く支持しおいたす。

重芁な芳察は、 @ lukewagnerが指摘しおいるように、重耇したむンポヌトはさたざたな環境で凊理できないずいうこずです。 そしお圌が蚀うように、それはJSのナヌスケヌスでも問題がありたす。

最も重芁なこずは、基本的なモゞュラヌプロパティを壊すこずです。぀たり、すべおのむンポヌトをWasmたたはホストモゞュヌルで等しく実装できるずいうこずです。 これは、仮想化などのナヌスケヌスにずっお重芁です。

重耇むンポヌトは、クラむアント偎でオヌバヌロヌドたたは動的型付けメカニズムのいずれかを効果的に匷制したす。これは、すべおのクラむアントがそれをサポヌトする手段を持っおいるわけではないためです他のWasmモゞュヌルを含む。

そしお、テストスむヌトの歎史が瀺しおいるように、これは実際には実際の問題です。

@titzer 、私はフォロヌしおいないのではないかず思いたす。 明確な呜名は、パラメヌタ化ず盎亀する問題のように思われたす。 埌者があったずしおも、名前がパラメヌタヌ化された゚ンティティヌを䞀意に決定するこずを確認したいず思いたす。 他の手段でオヌバヌロヌドされたむンポヌト名を解決するこずは、これらの他の手段がより耇雑になるずさらに耇雑になるので、おそらくさらにそうですか

私が蚀ったように、名前ぱンゞンにずっお重芁ではないので、それらの䞀意性も゚ンゞンにずっお重芁ではありたせん。 それらは_linkers_にずっお重芁であるため、むンポヌト名たたはそのこずに぀いおぱクスポヌト名に䞀意性を適甚する堎合は、特定のリンク゜リュヌションを遞択したす。 そしお、限界にあるリンカヌは、最終的には完党にプログラム可胜な゜リュヌションを必芁ずしたす。これは、ファヌストクラスのモゞュヌルずむンスタンスだけでなく、JITずそれらを段階的に構築する機胜でもありたす。

すべおの問題は、名前に基づいおむンポヌトから゚クスポヌトたで、モゞュヌルを静的に型指定されたファンクタヌ[*]にしようずするこずから来おいるず思いたす。 その結果、名前は型の䞀郚になり、その型をwasmの蚀語に導入するには、型チェックが必芁になるため、名前の䞀臎ルヌルが必芁になりたす。 しかし、それに関する問題は、これらの名前が䜎レベルの名前であり、マングルされたC / C ++名に䌌おいるこずです。 その最終結果は3぀の悪いこずです

  1. すでに芋たしたwasmはオヌバヌロヌドがあるホスト環境に接続するこずさえできたせん
  2. リンクは、䜎レベルの名前だけを䜿甚しお衚珟できるものずできないものによっお垞に制玄され、すべおの新しいwasm機胜で垞に蚭蚈䞊の問題が発生したす。
  3. それは、プログラム可胜ずJITing゜リュヌションが必芁になりたす任意の䜎レベルの名前マングリングスキヌムを䜿甚するこずはできたせん蚀語を提䟛しおいたせん。

これらの問題は、静的モゞュヌルタむプを導入したいずいう願望から盎接生じおいたす。これは、゚ンゞンに単玔なリンク゜リュヌションの名前ベヌスのマッチングを実行させるこずによっお動機付けられおいるためです。 しかし実際には、゚ンゞンは決しお名前を芋るべきではありたせん。 もう1぀、リンカヌは名前を調べお、゚ンゞン甚に名前を解決する必芁がありたす。 はい、その問題を解決する1぀の方法は、APIがリンカヌにむンポヌトのベクトルを提䟛し、゚クスポヌトのベクトルを返すこずです。これは、りィザヌドで行ったこずであり、C埋め蟌みAPIの動䜜方法です。

[ ]私もこれを考えおいたした。wasmモゞュヌルはむンポヌトから゚クスポヌトたでの機胜でした。 しかし、それは重芁な䜕かを欠いおいたすより高いレベルの蚀語から来るリンクのための論理。 説明が

@titzer 、モゞュヌルリンクの提案が倚くのナヌスケヌスに十分な匷力なリンクモデルを提䟛しないこずに同意したすたずえば、Cオブゞェクトファむルを眮き換えるこずはできたせんが、汎甚リンクを提䟛するずは思いたせんモデルは提案の目暙です。 これは、珟圚の文字列ベヌスのむンポヌト/゚クスポヌトシステムの拡匵であり、Webで䞀般的で、Wasmのモゞュヌル構造にある皋床組み蟌たれおいるバンドラヌスタむルのリンクに十分か぀有甚であるず考えおいたす。 ずにかくモゞュヌル性をWebAssemblyの䞊に階局化する必芁があるため、高氎準蚀語固有のリンカヌは、呜名に関しお必芁なこずを䜕でも実行し続けるこずができたす。

@titzerむンポヌトず゚クスポヌトの名前がモゞュヌルのタむプの䞀郚ではない堎合、回避したいず蚀った脆匱性の問題を回避するこずをどのように提案したすか

たた、仮想化の問題にどのように察凊しおいるのかもわかりたせん。 @rossbergのコメントを読んで、仮想化はここで解決すべきより基本的な既存の問題であり、実際にはモゞュヌルリンクの提案ずは䜕の関係もないこずを理解しおいたす。

私はこの倉曎に共感しおいたすが、WebAssembly / module-linking7を芋るず、考慮されおいるオプションはあたりないようです。 亀差型に぀いおは倚くの議論がありたすが、亀差型を䜿甚した倉換がJS APIなどの匷制リンクシステムでは機胜しないこずに぀いおは蚀及されおいたせん。これは、ここで蚀及されおいるナヌスケヌスの䞀郚が䟝存しおいるものです。 考慮されるすべおのオプションは、衚面蚀語のモゞュヌル構造に基づいおいるようです䞻に、Andreasの特に関数型蚀語のモゞュヌルに関する知識に基づいおいたすが、䜎レベルのモゞュヌル構造に぀いおはあたり考慮されおいないようです。 䜎レベルのモゞュヌルシステムは、モゞュヌルリンクの提案名前ベヌスの解決を含むの目暙を果たしながら、ここでの問題を簡単に解決したす。 同時に、いく぀かの重芁な拡匵機胜を構築する方が簡単です。

@RossTate 、ここで「䜎レベルモゞュヌルシステム」ず呌んでいるものや、すでに説明したものずどのように違うのかわかりたせん。 さたざたな゜リュヌションのアむデアがある堎合は、 https//github.com/WebAssembly/module-linking/issues/7で議論しお、重耇むンポヌトを犁止する特定の提案された゜リュヌションにこの問題を集䞭させるこずができたす。

https://github.com/WebAssembly/module-linking/issues/7#issuecomment -791063260にメモを残したした。これは、既存のコヌドの䞋䜍互換性の問題を匕き起こすこずなく、モゞュヌルリンクの怜蚌の䞀郚になり埗るかどうかを尋ねおい

これはたさに私が盎面するのにずおも時間がかかった問題です。 モゞュヌルには、むンポヌトに関連付けられた名前ず制玄に意味を䞎えるむンポヌトプロセッサを考慮しないタむプはありたせん。぀たり、むンポヌト名前付きから゚クスポヌトたでの玔粋関数です。 それらは茞入に意味を䞎えるためにリンクシステムを必芁ずしたす。 私たちがそのポむントを通過するたで、私が蚀っおいるこずの残りのどれも意味がありたせん。 これは、モゞュヌルリンクの提案における非垞に基本的な仮定であり、議論のために明らかにされおいないず思いたす。 そしお、私たちはそれを本圓に疑っおいないず感じおいたす。 䞁寧に思えるよりも深く質問しおいるので、繰り返しおいるようです。 もちろん、倱瀌なこずを意味するわけではありたせんが、モゞュヌルがファンクタヌのように芋える必芁があるこずに挑戊する぀もりです。 そしお、私たちはそれを疑っおいたせん。

モゞュヌルがファンクタヌであるこずが明らかにそうではない理由に぀いお、䟋を次々ず挙げるこずができたす。

  1. wasmモゞュヌルをJavaScriptにリンクするには、importsオブゞェクトを経由したす。importsオブゞェクトは、実際にはプロキシであるか、チュヌリング完党ロゞックを名前に適甚する動䜜たずえば、名前のデコヌドを持぀こずができ、状態もあるため、ファンクタヌずしおキャストしたす。 これは文字通り、JavaScriptオブゞェクトのむンポヌトをむンポヌトによっお問い合わせるアルゎリズムずしお操䜜䞊定矩されおいたす。 そのリンク゚コシステム党䜓をモゞュヌルリンクで衚珟するこずはできたせん。

  2. C埋め蟌みAPIも同じ方法です。 これは、完党に怜査可胜な゚ンティティずしお埋め蟌みにモゞュヌルを提䟛し、怜査甚の名前、皮類、および眲名を備えおいたす。 モゞュヌルをむンスタンス化するために、埋め蟌み者は、むンスタンス化のために゚ンゞンぞのバむンディングをはい、䜍眮的に提䟛するだけである限り、奜きなロゞックを適甚できたす。 たた、完党にプログラム可胜で、モゞュヌルリンクで衚珟されおいない゚コシステム。

  3. ゞャワもピワもこんな感じです。 Jawaは完党に静的に型指定されおいたすが、そのむンポヌトは、単玔な名前の䞀臎が適切でない方法でむンポヌト蚀語で゚ンコヌドされおいたす。 Jawaランタむムは、゚ンゞンに提䟛する新しい関数、型、およびその他のバむンディングを合成JITする必芁がありたす。 Pywaは完党に動的に型指定されおおり、そのJS実装は同様の方法でオヌバヌロヌドを䜿甚したす。

モゞュヌルずそのむンポヌトは、リンクスキヌム、蚀語、むンポヌトプロセッサなど、䜕ず呌びたいかずいうコンテキストでのみ意味がありたす。 繰り返したすが、それらはファンクタヌではありたせん。 モゞュヌルのむンポヌトは、゚ンゞンが理解できない、たたは理解できない倖囜語で曞かれた、倖郚から必芁なものの説明です。 モゞュヌル自䜓はWasmの型システムに埓っおむンポヌトずは無関係に個別にタむプチェックできるように、たたむンポヌトはむンポヌト制玄に蚘述されおいる仮定に照らしおチェックできるように、Wasmタむプのみがありたす。 ここでも、モゞュヌルをwasm-y型のファンクタヌにしようずするたで、名前に぀いおは䜕も衚瀺されたせん。 しかし、それらの名前は玫色です ここで、すべおの゜ヌス蚀語が存続したす。 もちろん、文字列の比范でそれをいじくり回すこずはうたくいきたせん。

それを念頭に眮いお、「食り気のない」リンク゜リュヌションを䜜りたいずいう願望は悪いものではありたせん。 名前があたりクレむゞヌでない堎合、それは理にかなっおいたす。 これは、名前が非垞に単玔で、単玔なマッチングで十分な小さな゚コシステムを䜜成するようなものです。 それは正しいプリミティブではないので、プリミティブである必芁はありたせん。 完党にプログラム可胜なリンクAPIである本圓に必芁なものに到達したずきに、぀たずきや奇劙な疣莅になるリスクがある方法で、その仮定を盎接wasmのコアに焌き付けおいるので、それは明らかです。 リンク甚のプログラム可胜なAPIがあれば、モゞュヌルリンクの提案は単なるラむブラリである可胜性がありたす。 したがっお、C埋め蟌みAPIをより暙準的なwasm APIに倉換し、そのAPIに察するラむブラリずしおモゞュヌルリンクを䜜成する方法を怜蚎する必芁がありたす。

@lukewagner 「脆匱性」の問題名前を砎棄するこずを

そしお、ええ、この問題に぀いおは、私がしばらく考えおいた重耇むンポヌトの優れたナヌスケヌスがありたす。そうです、重耇むンポヌトは、むンラむンキャッシュを共有するたたは共有しないずいう議論たでありたす。 たずえば、JavaScriptプロパティアクセスを実行する関数をむンポヌトする堎合は、「GetProperty [foo]」ずいう名前を付けるこずができたす。 䞀床だけむンポヌトする堎合、゚ンゞンはどのむンラむンキャッシュを䜿甚する必芁がありたすか wasmコヌドを怜査しお、新しい呌び出しサむトを生成する必芁がありたすか モゞュヌルがたったく同じ名前で同じ関数を耇数回むンポヌトできるが、毎回新しいICを取埗できる堎合、モゞュヌルは、゚ンゞンがさたざたなポリモヌフィズムにどのように適応するかを制埡する手段を備えおいたす。 もちろん、文字列の最埌に愚かな䞀意のゞャンクを貌り付けるこずはい぀でもできたすが、なぜわざわざするのですかこれは、wasmで䜿甚しおいないたったく異なるものからの制限を回避するだけです。

@titzerあなたが

独立しお、ここで根本的な質問であるず私が孊んだこずは残っおいたすwasmモゞュヌルはwasm゚クスポヌトを仮想化できるべきですか 「wasmモゞュヌルはどのようにリンクされるのか」ずいう質問を完党に脇に眮いお、これはCGに提唱する原則の基本的な質問のようです。 リンクに関する質問ずは関係なく、この質問だけに焊点を圓おるのは、別の蚭蚈䞊の問題に倀するのではないかず思いたす。

仮想化は重芁であり、プログラム可胜なリンクは確実にそれをサポヌトする必芁がありたす。

実際、私が話しおいるこずは、今日のwasmずそれほど倉わらないず思いたす。そしお、私が話しおいるこずは、ゞャワだけに向けられたものではありたせん。 .NETたたは他の蚀語ランタむムのリンクに぀いお考えるずきにも同じこずが起こりたす。 䞊蚘の3぀の䟋を挙げたしたが、そのうちの2぀は珟存する埋め蟌みであり、別の蚀語に埋め蟌たれおいるため、完党なプログラム可胜性が埗られたす。

CGのプレれンテヌションをたずめたいず思いたす。

Fwiwは、Wasmをより少ないナヌスケヌスではなくより倚くのナヌスケヌスで実行可胜にするずいうtitzerの提案を理解しおいるため、他の方法よりもはるかに私の期埅に沿っおいたす。 他の堎所でも同様の理由で同様の問題ですでに起こっおいるすべおの論争を考えるず、Wasmの方向性に぀いおのより䞀般的な議論が必芁になる可胜性があるこずを瀺唆するずころたで行きたす。

たずえば、私は次のようなステヌトメントを芋぀けたす

あなたが築いおいる芋解は、wasmが指定され、実装され、今日広く話題になっおいる方法からかなり離れおいるので、この芖点の倉曎をCGに提案し、ある皋床の賛同を埗るこずはあなたの負担だず思いたす。それは、wasmの性質であるず䞻匵できるものだずは思わないでください。

文脈の䞭で深く懞念しおいる。 ここでは、wasmの指定方法にさらに広範な問題がある可胜性があり、どちらの偎が出発するのかは私にはわかりたせん。

@titzer私は䞻にあなたが蚀っおいるこずのこの郚分そしおすべおの結果に蚀及しおいたした

モゞュヌルには、むンポヌトに関連付けられた名前ず制玄に意味を䞎えるむンポヌトプロセッサを考慮しないタむプはありたせん。 これは、テキストファむルの皮類を尋ねるようなものです。

これは、珟圚の仕様たずえば、この郚分からの倧幅な逞脱になりたす。

@lukewagnerそれを指摘しおくれおありがずう。

その定匏化ではモゞュヌルのリンクに関する議論が指摘しおいるように、むンポヌトず゚クスポヌトはベクトルであり、したがっお䜍眮的です。 あるモゞュヌルの䜍眮゚クスポヌトを別のモゞュヌルの䜍眮むンポヌトにバむンドするには、マッピング関数が必芁です。 「食り気のない」正確な名前照合関数は1぀の遞択肢にすぎず、そのマッピング関数がホスト蚀語で完党にプログラム可胜である他の2぀の埋め蟌みがすでにあるこずを指摘しおいたす。

@titzerそれは本圓ですが、泚意しおくださいJS APIは完党にプログラム可胜であるにもかかわらず、異なるタむプの重耇したむンポヌトを持぀wasmモゞュヌルを提䟛するず、JSAPIを䜿甚しおそれらのむンポヌトをwasm゚クスポヌトで実装するこずはできたせんWebAssembly.instantiate()で名前ルックアップを䜿甚しおいるため。 同じこずがESM統合にも

したがっお、私たちが尋ねなければならない質問は、「wasm゚コシステム党䜓で必然的に出珟する無数のwasmリンクスキヌムが、重耇むンポヌトの仮想化をサポヌトするこずになるのでしょうか」ずいうこずだず思いたす。 そしお、私たちの珟圚のサンプルセットに基づくず、それはありそうもないように芋えたす。

WebAssemblyのむンポヌトず゚クスポヌトに関連付けられた文字列がなかったず想像しおください。 JS APIは、玔粋に䜍眮むンデックスを䜿甚しお、むンポヌトず゚クスポヌトにアクセスしたす。 私の知る限り、既存のツヌルチェヌンをそのような蚭定で機胜させるのは盞察的な意味で簡単です。 堎合によっおは、emscriptenのようなものが「むンラむン」JSコヌド EM_ASM をフックアップするために任意の名前を生成する必芁がないため、より簡単な堎合がありたす。

このような䞖界では、仮想化の問題はありたせん。 ぀たり、仮想化の問題は、䜍眮むンデックスではなく名前を䜿甚するこずを遞択したこずが原因で発生したす。 䞡方をJSAPIで䜿甚できるようにするこずで、䞋䜍互換性のある方法でこれを解決するこずもできたす。

重芁なのは、非䜍眮のむンポヌト/゚クスポヌトは、実際には、wasmモゞュヌルの゚コシステムぞの統合を容易にするために䜿甚される埋め蟌み固有の装食であるずいうこずです。 これらの装食がどのように指定されるかは、生態系の既存たたは予想される芏範に実際に適合させる必芁がありたす。

たずえば、ESM統合では、他のモゞュヌルによっお゚クスポヌトされたJS倀がオヌバヌロヌドされる可胜性がありたすが、WebAssemblyはオヌバヌロヌドをサポヌトしおいないため、ESMむンポヌト/゚クスポヌト装食デザむンはこのギャップを埋めお、WebAssemblyモゞュヌルが倚くのJSの代わりになるようにする必芁がありたす可胜な限りモゞュヌル。 これは、別のJSモゞュヌルからむンポヌトされた関数のさたざたなオヌバヌロヌドを抜出するために、重耇したむンポヌトず型指定の匷制を行うこずで実行できたす。 ゚クスポヌトされたタむプがすべお、十分に分離/区別可胜なパラメヌタヌを持぀関数であり、単䞀のオヌバヌロヌドされたJS関数に結合できる限り、重耇゚クスポヌトを蚱可するこずもできたす。 そしおもちろん、それぞれ長所ず短所を持぀他のデザむンオプションがありたす。

察照的な䟋ずしお、WebAssemblyの䞻芁な埋め蟌み蚀語が、䜍眮パラメヌタヌではなく関数の名前付きパラメヌタヌを䞻に䜿甚しおいるず仮定したす。 その堎合、むンポヌトず゚クスポヌトの装食はかなり異なり、関数の゚クスポヌトによっおすべおのパラメヌタヌに名前が割り圓おられたす。 しかし、䜎レベルでは、WebAssemblyモゞュヌルは䟝然ずしお䜍眮のむンポヌトず゚クスポヌトにすぎたせん。

だからこそ、䞀歩䞋がっお問題を解決するこずを提案したのです。 「コア」WebAssemblyモゞュヌルリンク、぀たり同じファむル内で定矩されたWebAssemblyモゞュヌルをリンクするために䜿甚するものたずえば、むンタヌフェむスタむプアダプタモゞュヌルをそれが適応するモゞュヌルにリンクするためは、定䜍眮である必芁がありたす。 「埋め蟌み」WebAssemblyモゞュヌルリンク、぀たり、特定の゚ンベッダヌ内の別々のファむルで定矩されたWebAssemblyず゚ンベッダヌ固有のモゞュヌルの䞡方をリンクするために䜿甚するものは、゚ンベッダヌ固有のセクションであり、゚ンベッダヌ間の倉換を定矩する䞻な圹割を果たしたす。匷制関数、゚クスポヌトされた関数/むンスタンス/モゞュヌルぞの装食の远加、シングル/ダブル/リストオブ名前ず䜍眮むンポヌトの関連付けなど、特定のコンストラクトずWebAssemblyコンストラクト。 そうすれば、「コア」WebAssemblyは数ず䜍眮以倖のこずを心配するこずはなく、重耇むンポヌトなどの問題は「コア」問題ではなく、埋め蟌み者固有の問題になりたす。

その考え方で、この問題は「JS APIたたはESモゞュヌルの堎合、2぀のむンポヌトを同じ文字列に関連付けるこずを蚱可する必芁がありたすか」ず曞き盎すこずができたす。 答えはモゞュヌルリンクの提案には意味がありたせん。 これは有甚な質問ですが、䞻な議論は私が思うに存圚しおはならない結合に基づいおいるため、珟時点では良い答えを埗るのは難しいです。

私は、䜍眮のむンポヌト/゚クスポヌトが質問党䜓の重耇を回避するこずに同意したす。 ただし、避けたい問題は、別々の時間に別々のコンパむルを行う堎合、バヌゞョン管理に泚意を払う必芁がある堎合、䜍眮のむンポヌト/゚クスポヌトには、コンポヌネントシステムで具䜓的に感じられる叀兞的な脆匱な基本クラスの問題がありたす。 䜍眮C ++ vtableレむアりトに基づくCOMのようなものです。

@RossTateず@titzerが䜕を提案しおいるのかを理解した堎合、これはホストレむダヌで解決する必芁のある問題であり、ホストがそのホストに適切な名前を導入できるようにしたす。 私が芋おいる問題は、その答えに残っおいるずいうこずです。それは、wasmツヌルの゚コシステムをホストごずに本質的に分割しおいるずいうこずです。 たずえば、clangが䜕らかの圢のリンクを実行したい堎合たずえば、䞀般的なlibcを陀倖するため、「clangタヌゲティングwasm」を䜿甚するこずはできたせんこれは、この新しいカテゎリの高床な最適化で重芁です。マルチモゞュヌルwasm実行プラットフォヌム-タヌゲットずしおいるすべおの異なる具象ホストに぀いおclangに教え、ホストをclangのパラメヌタヌにする必芁がありたす。 さらに、生成された出力はそのホストでのみ実行できるようになり、ホスト間で再利甚可胜な.wasmモゞュヌルを生成できなくなりたした。 共有ツヌルず再利甚可胜なモゞュヌルを実珟するには、リンクに察応するある皮の共通の抜象コンパむルタヌゲットが必芁です特に、名前ずむンスタンスの間に11の関連付けを想定しおいないもので、倚くのナヌスケヌスには䞍十分です -これはたさにモゞュヌルリンクの提案が確立するこずを望んでいたものです。

そうは蚀っおも、モゞュヌルリンクがホストに䟝存しないスペックレむダヌずしおコアwasmの䞊ずJSAPIの䞋に远加されるハむブリッド゜リュヌションを想像するこずができたす。 これにより、ホストに䟝存しないツヌルずモゞュヌルを䜜成できこのホストに䟝存しないスペックレむダヌをタヌゲットに、ホストの埋め蟌みでこのレむダヌを完党に回避し、特殊なリンクスキヌムを䜿甚しおコアモゞュヌルを盎接むンスタンス化できたす。

それは、これらの盞反する目暙を解決するための合理的な方法のように聞こえたすか

@lukewagner 、私ず䞀緒にいおくれおありがずう あなたが蚀ったこずは、私がどこから来たのかをより正確に理解しおいるように聞こえたすが、同時に、脆匱性ずツヌル/゚コシステムに぀いおのあなたの懞念も聞いおいたす。

ハむブリッド/ 2局゜リュヌションは私が提案しようずしおきたものだず思いたす。2局は「内郚」ず「倖郚」のリンクに察応しおいたす。 内郚リンクは定䜍眮であり、モゞュヌルを構築/接続/むンスタンス化するための指瀺を指定したす。これは、すべおのWebAssembly゚ンゞンモゞュヌルリンクを䜿甚が実装する必芁があるものです。 倖郚リンクぱンベダヌ固有であり、他のファむルなどから䜍眮モゞュヌルを構築する方法を指定したす。たずえば、ファむル名や文字列名をむンポヌト/゚クスポヌトに関連付ける方法を指定したす。これは、WebAssembly゚ンベダヌが実装する必芁があるものです。 この関心の分離により、WebAssemblyプログラムの「コア」の偎面ずWebAssembly゚ンゞンの「コア」の偎面を耇数の゚コシステム間で再利甚しやすくなりたす。 たた、この分離により、内郚モゞュヌルのリンクの偎面がクリヌンアップされる可胜性があるず思いたす。

しかし、あなたが蚀及するように、2぀の倚くの「倖郚」カスタマむズがあるず、深刻な砎砕に぀ながる可胜性がありたす。 私は分離する必芁があるリンク「内郚」ず「倖郚」ず考えながら、そう、私はたた、「普通」の倖郚リンクの暙準があるず䟿利だず思いたす。 特定の゚コシステムの詳现にうたく適合たたは掻甚するために、より専門的な倖郚リンクシステムを開発する堎合もありたすがそうするために、より専門的なツヌルを䜿甚、倚くのプログラムのニヌズは単玔な共通の暙準に適合したす。

したがっお、芁玄するず、1぀の「内郚」リンクシステム䜎レベル、たずえば䜍眮が必芁であり、その䞊に耇数の「倖郚」リンクシステムが存圚

さお、この皮の倉曎が短期的に具䜓的に䜕を意味するかを考えるず、モゞュヌルリンクをコア仕様の䞊の「共通リンク」レむダヌずしお必芁に応じお、JS / Web仕様の䞋で再構成するこずは、コアスペックに䜕も远加する必芁はありたせん。 特に、コアモゞュヌルのむンポヌト/゚クスポヌトは定䜍眮のたたである可​​胜性があり、モゞュヌルリンクレむダヌはむンスタンス化を実行するずきにこれらの名前を完党に無芖したす。 これに基づいお、「いいえ」ずいう答えでこの問題を解決できたす。その堎合、その䞊の@titzerのポむントに"" 、 "a" 、 "b"を含めるように匷制するこずはありたせん。 "c" ...怜蚌を容易にするためだけに名前を゚クスポヌトしたす。

将来的には、モゞュヌル/むンスタンスの䜍眮バヌゞョンを䜿甚しおコアwasmを拡匵するこずに぀いお話すこずもできたすが、モゞュヌルリンクの提案で焊点を圓おた最初の䞀連のナヌスケヌスず芁件に远加で必芁になるずは思いたせん。

@rossberg @titzer @tlively思考

コアWasmのむンポヌトず゚クスポヌトが厳密に定䜍眮でなければならないこずをコヌド化するず、 https//github.com/WebAssembly/gc/issues/148のドアが閉たるのではないかず心配しおいimportexportメカニズムの導入を瀺唆しおいたす。茞入ず茞出の問題は必然的に非察称である。 提案されたメカニズムは、基本的にコアWasmレベルで型の匱いリンケヌゞを導入し、文字列識別子なしでどのように䜍眮的に機胜するかはわかりたせん。

GC提案をその方向に進めるためのコンセンサスがないため、これは明らかに仮説ですが、個人的には、GC提案にずっお十分に魅力的なオプションであり、このような無関係な開発によっお実珟可胜性が䜎䞋するのを芋るのは悲しいこずです。たった今。 その提案された倉曎が䜍眮的に機胜する方法、たたはこの問題を誀解する方法がありたせんか

ああ、興味深い぀ながり、@ tlively それは私にいく぀かのアむデアを考えさせたす。

1぀のアむデアは、静的リンクに関連しおいたす。 名前付きむンポヌトが倖郚にリンクされたモゞュヌルの倉曎可胜性に圹立぀のず同じように、デフォルトのむンポヌトも同様

別のアむデアは、ダむナミックリンクに関連しおいたす。 ここでは、文字列がグロヌバルキヌずしお䜿甚されたす。 importexport基本的に、「このキヌに関連付けられた倀をむンポヌトし、その倀がただ定矩されおいない堎合は、そのキヌに察応する倀ずしお以䞋をグロヌバルに登録する」ず蚀いたす。 繰り返したすが、これはすべお倖郚リンク局にありたす。

WebAssemby / gc148は名目型に関するものですが、䞊蚘の䞡方の考え方が䟋倖にも圓おはたるこずに泚意しおください。 静的リンクの堎合、モゞュヌルの䞀般的なパタヌンは、デフォルトで新しく生成される䟋倖むベントをむンポヌトするこずですが、非ロヌカル制埡を共有するために他のモゞュヌルむンスタンスず同じむベントを䜿甚するようにむンスタンス化できたす。圌らず䞀緒に。 ダむナミックリンクの堎合、䞭倮のランタむムモゞュヌル人々はすでに私の考えを知っおいたすがないこずを本圓に望んでいる堎合、䟋倖のある蚀語は、ダむナミックリンクされたモゞュヌルずimportexport間で䟋倖むベントを調敎する必芁がありたす

きちんずした 私が正しく理解しおいれば、 importexportメカニズムは、定矩されたタむプをむンポヌトするための「デフォルト」゚クスポヌトモゞュヌルを暗黙的に䜜成するこずにより、䜍眮のむンポヌトず゚クスポヌトにデシュガヌするモゞュヌルリンクレむダヌの䞀郚ず考えるこずができたす。 それは私には理にかなっおいるように思われるので、私はこの方向性に぀いおこれ以䞊心配する必芁はありたせん。

階局化の議論は䞡方の道を切り開くず思いたす。 同様に、im / exportsを明確にするために採甚する高レベル名、远加情報ペアスキヌムを䜎レベル名の明確なスキヌムにマッピングするのは、䞊䜍局の責任であるず䞻匵できたす。

䞋䜍レベルの堎合、可胜な限り明瀺的か぀明確であるこずが垞に望たしいように思われたす。 これにより、システムずシステムずのむンタヌフェヌスがシンプルに保たれ、すべおの人ではなく、システムを必芁ずする゚コシステムでより耇雑なスキヌムを凊理する負担がかかりたす。

別のレむダヌずしおのリンクの提案に぀いおは、抜象的には良いように聞こえたすが、それをスムヌズに機胜させるこずができるかどうかに぀いおは少し懐疑的です。 たずえば、この提案では珟圚、内郚モゞュヌルがモゞュヌルや型などの静的゚ンティティの倖郚名前空間を参照できるようになっおいたすが、これはかなり䞭心的であり、コア仕様にマッピングできたせんラムダリフティングず同等の倉換を陀いお、壊れたすむンポヌトの郚分適甚/むンスタンス化、぀たり「モゞュヌルクロヌゞャ」の圢匏も導入しない限り、意図された構成パタヌン。

たずえば、この提案では珟圚、内郚モゞュヌルがモゞュヌルやタむプなどの静的゚ンティティの倖郚名前空間を参照できるようになっおいたす。

これは、いく぀かの単玔化を䜿甚できるず私が感じた偎面の1぀でした。

むンポヌトの郚分適甚/むンスタンス化、぀たり「モゞュヌルクロヌゞャ」の圢匏も導入しない限り

これは、その単玔化を実珟するのに圹立぀ず私が考えた手法の1぀でした。

私は䞀般的に、リンク仕様をレむダヌの䞊に移動するずいう考えを支持したす。 それは基本的に私が䞻匵しおきたこずです。 ゚ンゞンは名前を知る必芁はありたせん。

@rossberg私は䞀般的に、「明確で曖昧さのない」は䞋䜍局に最適だず思いたすが、このむンスタンスは芏範的であるかどうかに関するものであり、䞋䜍局はそれらに関係のないこずに぀いお芏範的ではないようにうたくいくはずです。 IMO。

https://github.com/WebAssembly/design/issues/1399#issuecomment -808401005に関連する所芋がありi64匕数を省略しおWasm゚クスポヌトを呌び出すずきに呌び出しが倱敗する問題を説明しおいたす。 JSからWasmに呌び出すずきに、重耇した゚クスポヌトを蚱可し、䞀臎するアリティを持぀ものを遞択するこずは、コンテキストでの掚奚される゜リュヌションです。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

frehberg picture frehberg  Â·  6コメント

ghost picture ghost  Â·  7コメント

artem-v-shamsutdinov picture artem-v-shamsutdinov  Â·  6コメント

aaabbbcccddd00001111 picture aaabbbcccddd00001111  Â·  3コメント

cretz picture cretz  Â·  5コメント