Design: ディスカッションWebAssembly、Unicode、およびWebプラットフォヌム

䜜成日 2021幎05月22日  Â·  19コメント  Â·  ゜ヌス: WebAssembly/design

この号は、「WebAssembly、Unicode、およびWebプラットフォヌム」のディスカッションに付随するものです。 プレれンテヌションは事前に蚘録されおおり、 https//github.com/WebAssembly/meetings/pull/775で詊しおみるこずにしたした6月22日のCGビデオ䌚議に予定されおいたす。


クリックしお再生

CGメンバヌの間でよく知られおいるず思われるコンセプトをいく぀か挙げたしたが、それでも、トピックに䞍慣れな人にずっおもプレれンテヌションを芪しみやすいものにするために、それらを含めるこずにしたした。 フィヌドバックを歓迎したす

関連する問題

最も参考になるコメント

簡単な解決策の1぀は、無効なUnicode文字列を受け入れるたたは生成する蚀語/ APIで、意図を䌝達するのではなく、 (list u8)たたは(list u16) おそらくbyte_stringなどの優れた゚むリアスを䜿甚を䜿甚するこずです。 IT stringタむプ。IIRCは(list char)゚むリアスです。

これは珟圚私の奜みの解決策でもありたす- stringが珟圚(list char)゚むリアスずしお定矩されおいるのず同じように、 wtf16stringタむプは(list u16)の゚むリアスになりたす(list char) 。 ゚むリアスIIUCの倀は、たずえばJSによっお呌び出された(list u16)返す関数の結果が数倀のJSリストずしお衚瀺されるのに察し、 wtf16string返す関数の結果です。

ドラフトの正芏ABIにwtf16string゚むリアスを远加するこずは、比范的邪魔にならないようです。

党おのコメント19件

おそらく、怜蚎のために、これたでオフラむンフィヌドバックから収集したいく぀かの朜圚的な解決策です。

別のWTF-16

「むンタヌフェヌスタむプ」で、以䞋を定矩したす。

string   := list char
string16 := list u16

次の堎合に、リンク䞭に適甚される匷制を定矩したす。

| から| に| 期埅
| ------------ | ------------ | -------------
| string | string16 | UTF-8からUTF-16に再゚ンコヌドしたす
| string16 | string | WTF-16からUTF-8に再゚ンコヌドしたす眮換オプション

匷制により、 string16モゞュヌルがWASIホストでそれぞれ機胜し、 string string16モゞュヌルずstring堎合でも、盞互にむンタヌフェむスできるようになりたす。 string16モゞュヌルたたはホストは、同じstringたたはstring16゚クスポヌトを呌び出したすが、そうでない堎合はあいたいになりたす。

これはたた、 list u16をJSに枡すずUint16ArrayたたはDOMStringなる可胜性があるずいう、Web埋め蟌みのあいたいさをもたらしたす。 Uint16ArrayからDOMString Uint16ArrayぞのJS党䜓の匷制は望たしくないようですが、゚むリアスstring16 独自のバむナリID、 string16 :> list u16明瀺的に䜿甚するこずでJSタむプを瀺唆できたす。 list u16アダプタモゞュヌルむンチしたがっお、゚むリアス。 この堎合、 string16はDOMString 、 list u16はUint16Arrayたす。

私はstring16ずいう名前に特に執着しおいるわけではなく、他の名前や、あいたいさを解決するために名前/ IDを必芁ずしない別の名前でも問題ありたせん。

list.countを䜿甚できるため、ここではlist.is_canonような最適化は必芁ありたせん。 たた、UTF-anyおよび朜圚的なLatin1最適化ぞの扉は、以䞋のように、 list.*_canonアダプタヌ呜什で将来のためにスペヌスを予玄するこずにより、開いたたたにするこずができたす。

UTF-任意

「むンタヌフェヌスタむプ」で、以䞋を定矩したす。

list.lift_canon $unit [...]
list.is_canon $unit [...]
list.lower_canon $unit [...]

where the $unit immediate is
  0: 8-bit (UTF-8, ASCII-compatible)
  1: 16-bit (UTF-16)
  2: 32-bit (UTF-32)
  3: 8-bit (Latin1, narrow UTF-16)

この朜圚的な解決策は、敎圢匏が必芁な堎合に怜蚎できたす。 これにより、二重の再゚ンコヌドのオヌバヌヘッドずコヌドサむズぞの間接的な圱響を回避できたすが、代理の問題は解決されたせん。 $unit 1-3は、さらなる最適化ずしおMVP埌に远加される堎合がありたす。たたは、それらの䞀郚からすぐに開始する堎合がありたす。

WTF-任意

「むンタヌフェヌスタむプ」で、以䞋を定矩したす。

list.lift_canon $unit [...]
list.is_canon $unit [...]
list.lower_canon $unit [...]

where the $unit immediate is
  0: 8-bit (WTF-8, ASCII-compatible)
  1: 16-bit (WTF-16)
  2: 32-bit (Code points except surrogate pairs)
  3: 8-bit (Latin1, narrow WTF-16)

この朜圚的な解決策では、 charをUnicodeスカラヌ倀からUnicodeコヌドポむントに再定矩する必芁がありたすが、 charリストにサロゲヌトペアが含たれないように制限したすただし、分離されたサロゲヌトを蚱可したす。 繰り返したすが、MVPの具䜓的な$unitは議論の䜙地がありたす。

これはそれ自䜓で損倱をもたらすものではないため、他のすべおは実際にMVP埌の最適化になりたす。

統合されたW / UTF-任意

むンタヌフェヌスタむプで、以䞋を定矩したす。

  • 「サロゲヌトペアを修正するUnicodeコヌドポむントのリスト」を持ち䞊げたすが、「Unicodeスカラヌ倀のリスト」を䞋げたす。 これは機胜しない蚭蚈です。16ビットのリフティング䞭にのみ適甚された堎合にのみ倉曎されたす。
  • 「Unicodeコヌドポむントのリスト」を取埗するために䞋げるずきに、オプションのpassthroughオプションを远加したす。 これは、ロスレスパススルヌを可胜にする機胜远加です。

そうするこずで、次のこずが達成されたす。

  • デフォルトで敎圢匏
  • オプションずしおのWTF蚀語のロスレス゚ンコヌディング
  • https://github.com/WebAssembly/interface-types/issues/136#issuecomment -861799460ず組み合わせるず、サポヌトしたいほずんどのすべおの蚀語甚の組み蟌み゚ンコヌダヌ

IIUC、根本的な問題は、ITが文字列をUnicodeコヌドポむントのシヌケンスにするこずを望んでいるこずですが、䞀郚の蚀語では、文字列を敎圢匏のUnicode文字列に察応する堎合ず察応しない堎合があるi8たたはi16倀のシヌケンスず芋なしたす。 簡単な解決策の1぀は、無効なUnicode文字列を受け入れるたたは生成する蚀語/ APIで、意図を䌝達するのではなく、 (list u8)たたは(list u16) おそらくbyte_stringなどの優れた゚むリアスを䜿甚を䜿甚するこずです。 IT stringタむプ。IIRCは(list char)゚むリアスです。 それを行うこずのトレヌドオフに぀いおは、ただどこかで議論されおいたすか

この問題はもう少し埮劙な違いがあるず思いたす。IT郚門はcharを「Unicodeスカラヌ倀」ずしお定矩したいのですが、サロゲヌトコヌドポむントがある堎所に穎が開いおいるため、孀立したサロゲヌトを衚すこずはできたせん。 。 䞀方、WTFはこの制限のない「ナニコヌドコヌドポむント」ですが、シヌケンスにはサロゲヌトコヌドポむントのペアが含たれないように制限されおいたすこれらは補足コヌドポむント> U + FFFFに眮き換えられたすが、分離されたサロゲヌトは問題ありたせん。 これはあなたが意味したこずですか

それ以倖は、 const char*時点でCのようなバむト文字列はただ議論されおいないず思いたす。 しかし、私はそれを芋逃したかもしれたせん。

簡単な解決策の1぀は、無効なUnicode文字列を受け入れるたたは生成する蚀語/ APIで、意図を䌝達するのではなく、 (list u8)たたは(list u16) おそらくbyte_stringなどの優れた゚むリアスを䜿甚を䜿甚するこずです。 IT stringタむプ。IIRCは(list char)゚むリアスです。

これは珟圚私の奜みの解決策でもありたす- stringが珟圚(list char)゚むリアスずしお定矩されおいるのず同じように、 wtf16stringタむプは(list u16)の゚むリアスになりたす(list char) 。 ゚むリアスIIUCの倀は、たずえばJSによっお呌び出された(list u16)返す関数の結果が数倀のJSリストずしお衚瀺されるのに察し、 wtf16string返す関数の結果です。

ドラフトの正芏ABIにwtf16string゚むリアスを远加するこずは、比范的邪魔にならないようです。

䞀方、WTFはこの制限のない「ナニコヌドコヌドポむント」ですが、シヌケンスにはサロゲヌトコヌドポむントのペアが含たれないように制限されおいたすこれらは補足コヌドポむント> U + FFFFに眮き換えられたすが、分離されたサロゲヌトは問題ありたせん。

ああ、それは、この远加制限があるため、WTF-8がプレヌンな(list u16)ず同じではないこずを意味したすか 私はそのニュアンスを理解しおいたせんでした。 私の盎感では、それは䞡方持っおやり過ぎだろうずいうこずですstring敎圢ナニコヌドスカラ倀の配列ならびに衚珟型wtf16stringほずんどであるタむプ(list u16)が、远加の制限がありたす。 無制限の(list u16)゚むリアスを䜿甚するず、Unicodeの敎圢匏性を匷制しないシステムで十分に機胜したすか WTF-8仕様のこの泚蚘は、そうなるこずを瀺唆しおいたす。

ああ、それは、この远加制限があるため、WTF-8がプレヌンリストu16ず同じではないこずを意味したすか

「UTF-8がUTF-16ず䞀臎するようにUnicodeテキストに人為的に制限されおいるように、WTF-8は、朜圚的に䞍正な圢匏のUTF-16ず䞀臎するために代理コヌドポむントペアを陀倖するように人為的に制限されおいたす。」 Iiucは、UTF-8が長すぎるバむトシヌケンスたたは切り捚おられたバむトシヌケンスを凊理する方法ず同様にこれらを凊理したす。 WTF-8は任意の(list u16)を衚すこずができたすが、すべおの(list u8)が有効なWTF-8であるずは限りたせん。

無制限リストu16の゚むリアスを䜿甚するず、Unicodeの敎圢匏性を匷制しないシステムで十分に機胜したすか

WTF-16は11をランダムなu16倀にマップし、これらの倀がどのように解釈されるかに䟝存するため、はい、 (list u16)は機胜したす。

IIUC、WTF-8は、任意のlist u8ずたったく同じではありたせん。 たずえば、「サロゲヌトペアバむトシヌケンス」は犁止されおいたすここを参照。

ただし、WTF-16はlist u16ず同じです。 圌らがネヌミングテヌマを共有しおいるのは少し奇劙です。

線集曎新する必芁がありたす:)

interface-types /135のサロゲヌトの質問だけに焊点を圓おた最初の質問/回答を投皿したした。 これが䞊䜍ビットだず思いたす。それに同意できれば、1぀以䞊の゚ンコヌド圢匏のサポヌトに関するその埌の説明が簡単になりたす。

ありがずう、ルヌク。

䞊蚘の「SeparateWTF-16」をサポヌトする堎合WASI APIぞのアクセスを有効にし、グルヌコヌドなしでJavaScriptずむンタヌフェむスするためには匷制が重芁です、提案されたchar満足し

サロゲヌトで提案しおいるように別のstring16タむプを䜿甚するず、 interface-types /135で抂説されおいるサロゲヌトに関するすべおの問題が発生するため、2぀の文字列タむプを䜿甚する方が良いずは思いたせん。 .1぀特にそれらが暗黙的に盞互倉換可胜である堎合;それらは意味のある別々の型ではありたせん。 2぀の文字列タむプがあるず、すべおのむンタヌフェむス蚭蚈者ず消費者に粟神的な負担がかかるため、事態はさらに悪化したす「なぜ、2぀のタむプがあるのか​​、違いは䜕ですかどちらをい぀䜿甚する必芁があるのですか」。 最埌に、WTF-16のサポヌトを远加するず、䞀般に、 interface-types /135でも蚀及されおいる将来の暙準進化ガむダンスWeb / IETFに反し

Web専甚のナヌスケヌスの堎合、JSたたはWebAPIの問題を解決するこずは理にかなっおいるず思いたす。 たずえば、wasmのむンポヌトず゚クスポヌトを「バむンド」するためのJSAPIを想像するのは簡単です。 これは、スタックスむッチングなどの他の新しいJS APIですでに採甚されおいるアプロヌチであり、Webを凊理できる䞀般的な「バむンドむンポヌト」/「バむンド゚クスポヌト」JSAPIがどこに行くのか疑問に思っおいたした。 -Promises、JS文字列、および型付き配列ビュヌの特定のケヌス。

サロゲヌトで提案しおいるような別のstring16タむプがあるず、interface-types / 135で抂説されおいるサロゲヌトに関するすべおの問題が発生したす。

技術的には正しいですが、文字列は、むンタヌフェヌスしおいるモゞュヌルの皮類に぀いおの事前の知識がなくおも、少なくずも垞に同じ蚀語、互換性のある蚀語、およびJavaScriptで別々にコンパむルされたモゞュヌル間で機胜するこずを芋逃しおいたす。 これは通垞、私が思うケヌスの倧郚分です。 そのため、私には劥圓な劥協案のように思えたす。たた、必芁なchar倀の範囲を敎圢匏USVの文字列専甚にするこずができるためです。

2぀の文字列タむプがあるず、すべおのむンタヌフェむスデザむナヌずコンシュヌマヌに粟神的な負担がかかるため、事態はさらに悪化したす「2぀のタむプがあるのはなぜですか違いは䜕ですかどちらをい぀䜿甚する必芁がありたすか」

時折の砎損の代替案は私にははるかに悪いように思われるので、それが必芁な堎合は、ほずんどの人がそれで倧䞈倫だず思いたす。 おそらく、この小さな問題を軜枛するには、2番目の文字列型 domstring の適切な名前で十分です。

最埌に、WTF-16のサポヌトを远加するず、通垞、将来の暙準進化ガむダンスWeb / IETFに反したす。

残念ながら、圱響を受ける蚀語の゚スケヌプハッチがない堎合、IT MVPが誰かのためにどこかで䜕かを壊し、ほずんど圹に立たない限り、誰かが䞻匵する傟向をどのように掚論するかは私にはあたり重芁ではありたせん私が取り組んでいるJavaScriptのような蚀語の堎合、私はそれに反察するこずしかできたせん。

ですから、私は誰もが䞀緒に暮らせる合理的な解決策や劥協点を芋぀けようずしおいたす。私たちが協力できれば幞いです。

あなたの蚀っおいるこずが、 interface-types /135で発生した問題にどのように察凊しおいるか、たたは新しいdomstringタむプを含めないずITが䞀般的に実行可胜匷力なガむダンスに察抗するには、より倚くの経隓に基づく蚌拠が必芁だず思いたす。

私たちはサロゲヌトの䞍圚に同意できる堎合FWIWは、私はそれがの正芏のABIで远加の゚ンコヌディングずしおU TF-16を支持に぀いお話をする意味になるだろうず思いたすstring 。しかし、それはず党䜓の別のトピックですいく぀かのオプションがあるので、最初に理解する必芁のある抜象的な文字列のセマンティクスず混同したくありたせん。

私はあなたの2番目の段萜に感謝したす、それはすでにいく぀かの非垞に厄介な問題を解決するでしょう。 UTF-16のサポヌトが個別に圹立぀こずに同意し、説明者/ MVPに远加しおいただければ幞いです。 私を数えおください

しかし、私は最初の段萜であなたの議論に埓うのに苊劎しおいたす。 おそらくあなたが私を信じおいないのなら、ここにLinus Torvaldsが、Linuxカヌネルを超えお拡匵するず私が思う非垞に重芁なルヌルを説明しおいたすそれが人々が䟝存するバグである堎合、それはバグではなく、機胜であり、続行するだけです。

システム党䜓の䞭で最もコアなラむブラリが、物事が「改善」され、ABIが「修正」される限り、問題が発生しおも問題がないのは本圓に悲しいこずです。

そしお、サロゲヌトに぀いお心配する必芁がないこずは確かに䞀皮の機胜であり、ナヌザヌはあちこちで䞍泚意なsubstring(0, 1)実行しおむンポヌトされた関数を呌び出すこずができたす。たたは、 split("")を枡しお、もう䞀床join()䜜成するか、 StringBuilderをモゞュヌルずしお䜜成したす。これにより、魔法のように二重眮換文字が生成されるこずはありたせん。 ぀たり、非垞に人気のある倚くの蚀語が敎圢匏の匷制に反察する理由があり、Wasmがこれらの蚀語ずそのナヌザヌを適切にサポヌトしたい堎合、Wasmがモゞュヌル化されるほど、境界が倧きくなりたす。関数がどのモゞュヌルに存圚するかを刀断するのが難しくなり、問題がより明らかになりたす。

珟圚の珟実を無芖する方法で䜕かを蚭蚈するこずが悪い考えであるこずを蚌明するためにどれだけ倚くの蚌拠が必芁か、私は本圓に知りたせん。 実際、これはむンタヌフェむスタむプでのみ問題ないようですが、他のすべおの提案は非垞に高い氎準に保たれおいたす。 私はこれに関する専門家ではありたせんが、USVを䞻匵するこずによっおUCS-2蚀語のニヌズに関しおこれずたったく同じ間違いを犯したのは、Unicode暙準自䜓であり、玄10幎分の同様に絶望的な結果に぀ながったず思いたす。議論スレッド党䜓を掚奚できたすが、特に沈黙する前の最埌のコメントは、2014幎に、WTF-8゚ンコヌディングである䞀般的に適甚される実甚的な゜リュヌションの説明で最高朮に達したした。

ビットストリヌムで文字゚ンコヌド゚ラヌが発生したずきに眮換文字を発行するこずは、危険なサむレントデヌタの砎損のよく知られた圢匏であり、敎合性を必芁ずするシステムはそれを犁止しおいるこずに泚意しおください。

関連しお、codePointAtが単独のサロゲヌトをヒットしたずきに䟋倖をスロヌする堎合、誰かが誀っおデヌタベヌス内の文字列の間違った䜍眮に絵文字を配眮したために、アプリケヌション党䜓を壊すバグが発生する可胜性がありたす。

残念ながら、ecmascriptを䜿甚するず、ペアになっおいない代理コヌドポむントを含む文字列を生成しないようにするこずが非垞に困難になりたす。文字列から最初の157 .length単䜍を取埗し、「...」を远加しお短瞮するのず同じくらい簡単です。 たた、BMP以倖のキャラクタヌはたれであるため、実際にそれが実際に発生した堎合、それは異垞な事故です。 Unicodeの衛生状態を改善するこずを期埅しお、危険を導入するこずには非垞に消極的です。

JS、Java、Cが文字列を持っおいる理由は、Unicodeが2バむトでは䞍十分であり、UCS-2が実行可胜ではないこずに気付いたずきたでに、倧量のコヌドがすでに蚘述されおいたため、これらの蚀語は単玔に蚘述しおいなかったためです。遞択肢はありたせん。 同様に、ナヌザヌスペヌスに公開されおいるLinuxシステムコヌルの堎合。 察照的に、ITで定矩されたAPIを䜿甚するコヌドは珟圚存圚しないため、同じ䞋䜍互換性芁件はありたせん。 倚くの理由で、wasmおよびInterface Typesは、既存の単䞀蚀語たたはsyscallABIを完党に゚ミュレヌトしようず意図的にはしお

もちろん、コンポヌネント内では、文字列は蚀語に適した方法で衚珟できるこずを匷調したいので、実際にはAPIのセマンティクスに぀いおのみ説明し

  1. サロゲヌトを枡す必芁がないそしお倚くの堎合意味がないず信じる理由はたくさんありたす
  2. カスタムJSAPIバむンディングを䜿甚する゚スケヌプハッチは垞にありたすWeb APIの100がWeb APIぞのJSグルヌレスバむンディングを持っおいる必芁はありたせん

したがっお、これらのWTF-16文字列セマンティクスを匕き継がなければITが実行可胜ではないこずを瀺唆する蚌拠はただないず思いたす。これは、MVPにずっお適切な質問だず思いたす。

私が同意しないいく぀かの点

あなたの蚀っおいるこずがinterface-types /135で発生した問題にどのように察凊しおいるかわかりたせん

これは珟圚別の問題であり、私が損倱を解決するための合理的な劥協案であるず私が信じおいるこずに぀いお話す前の投皿で。 特に、別の問題であなたの掚論に問題はありたせんが、ロスレスフォヌルバックが利甚可胜な堎合に限りたす。 これはどちらか/たたは私の意芋ではありたせん。 そうでない堎合は、WTF-8 / 16がより包括的で制限の少ない遞択肢であり、Wasmの高レベルの目暙の1぀がWebプラットフォヌムずシヌムレスに統合するこずであり、それぞれ䞋䜍を維持するこずであるため、私は意芋を残したす。 -Webの互換性。これは、むンタヌフェむスタむプにも適甚されたす。

既存のJSAPIは、境界で任意の倀の倉換を行うための汎甚゚スケヌプハッチをすでに提䟛しおいるため、この初期の時点で2番目の゚スケヌプハッチがどのように必芁かはわかりたせん。

カスタムJSAPIバむンディングを䜿甚する゚スケヌプハッチは垞にありたす

残念ながら、これは私たちの堎合には十分ではありたせん。珟圚、次のようなグルヌコヌドがありたす。

const STRING_SMALLSIZE = 192; // break-even point in V8
const STRING_CHUNKSIZE = 1024; // mitigate stack overflow
const utf16 = new TextDecoder("utf-16le", { fatal: true }); // != wtf16

/** Gets a string from memory. */
function getStringImpl(buffer, ptr) {
  let len = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2] >>> 1;
  const wtf16 = new Uint16Array(buffer, ptr, len);
  if (len <= STRING_SMALLSIZE) return String.fromCharCode(...wtf16);
  try {
    return utf16.decode(wtf16);
  } catch {
    let str = "", off = 0;
    while (len - off > STRING_CHUNKSIZE) {
      str += String.fromCharCode(...wtf16.subarray(off, off += STRING_CHUNKSIZE));
    }
    return str + String.fromCharCode(...wtf16.subarray(off));
  }
}

たず、ChromeずNode.jsを重芖しおいるため、UTF-16LE甚のV8のTextDecoderは、他の゚ンゞンよりもはるかに遅いこずがわかりたしたSMは非垞に高速です。したがっお、 String.fromCharCodeは実際には、V8では特定の損益分岐点たで高速です。 そこで、今のずころそれを䞭心に最適化するこずにしたした。 次に、WTF-16にはTextDecoderが存圚しないためこれは個別に煩わしい、最初に敎圢匏のUTF-16をデコヌドしようずしたす。それが倱敗した堎合は、スロヌしおチャンクスルヌにフォヌルバックしたす。はるかに遅いString.fromCharCode 。 スタックをオヌバヌフロヌさせる可胜性があるため、長い文字列にString.fromCharCodeを単玔に適甚するこずはできないため、チャンク化が必芁です。

䞀方、たずえばRustはこれを必芁ずしないでしょう。これが、珟圚のITが本来あるべきほど䞭立ではないず私が考える理由の1぀です。 䞀般的に、IT stringのポむントは、確かにJSずうたくむンタヌフェヌスできるこずだず思いたす。これは、䟝然ずしお私たちの䞻芁な盞互運甚タヌゲットです。

珟圚、ITで定矩されたAPIを䜿甚するコヌドは存圚しないため、同じ䞋䜍互換性芁件はありたせん。

ITはただ存圚しないため、前半は技術的には真実ですが、IIUCの芁件には、たずえば䞊蚘のグルヌコヌドの䞍噚甚なチャンクの説明など、既存のナヌスケヌスの改善が含たれたす。 できるだけ倚くの蚀語に理想的であるため、プレれンテヌションで述べたように、ポストMVPは確かに「単なる最適化」になりたす。 それどころか、今のずころITは基本的に、UTF-8゚ンコヌダヌ/デコヌダヌを利甚できる蚀語の最適化であるものから始たりたすが、これは䞭立ではないず思いたす。

wasmおよびInterfaceTypesは、既存の単䞀蚀語たたはsyscallABIを完党に゚ミュレヌトしようず意図的にはしおいたせん。

私はこれを私がこの意芋であるかのように読みたしたが、私はたったくそうではありたせん。 私はここで疑いの恩恵をあなたに䞎える぀もりですが、私の意芋では、ITは珟圚䞍必芁に制限されおおり、そのため非垞に特定の蚀語のセットにしかうたく機胜しないこずを付け加えたいず思いたす。 それどころか、WTF-8 / 16は、JS文字列にラりンドトリップするため、論理的なデフォルトになるず私が予想しおいたより包括的な゚ンコヌディングです。 ここでは同意したせんが、適切な゚スケヌプハッチがない堎合に限りたす。 実行可胜なロスレスの代替手段が存圚し、誰も壊れたり䞍必芁に䞍利になったりしない堎合は、デフォルトの文字列タむプの掚論で問題ありたせん。

サロゲヌトを枡す必芁がないそしお倚くの堎合意味がないず信じる理由はたくさんありたす

ここでは同意したせん。 特に、私のプレれンテヌションやコメントは、たれではあるが、非垞に意味のあるものになる可胜性があるずいう合理的な疑いを瀺しおいるず思いたす敎合性が必芁な堎合など。 Unicodeの衛生状態を改善するこずを望んでいる危険。」 ぀たり、可胜であれば、Java / C/ AS <-> JS、Java / C/ AS <->の重芁な堎合にも機胜するこずが保蚌されおいる方法で、正芏のABIを蚭蚈する必芁があるず思いたす。 Java / C/ AS。 他のパスでの眮き換えはおそらく避けられたせんが、少なくずも蚀語ずナヌザヌには遞択肢があり、たれにデフォルトがただ砎られおいない堎合がありたす。

これらのWTF-16文字列セマンティクスを匕き継ぐこずなしにITが実行可胜ではないこずを瀺唆する蚌拠はただないず思いたす

合理的な疑いがあり、合理的な劥協案であるず私が信じおいるこずを探求する意欲がない堎合、立蚌責任はあなたにあるず思いたす。 繰り返しになりたすが、私はデフォルトの文字列をあなたず敎圢匏の未来に任せたいず思っおいたすが、たれではあるがそれでも危険を考慮しないずいう犠牲を払うこずはありたせん。 倚くの人気のある蚀語はこれによっお圱響を受ける可胜性があり、それらが認識されるず、将来的にそれを正圓化するのは非垞に困難になる可胜性がありたす。

JSグルヌコヌドは理想的ではないこずに同意したすが、その正しい修正はJS APIたたはJSにあり、将来のコンポヌネント゚コシステム党䜓にwtf-16-stringの抂念を远加するこずではないず思いたす。 それを超えお、ただ応答されおいない応答する新しい情報は衚瀺されたせん。 目暙/範囲の質問に぀いおはほずんど意芋が分かれおいるようです。

TextDecoder異垞は、JSで修正するのがさらに難しいず思いたす。これは、これが範囲倖であるずすでに刀断されおいるためです。 JSのTextDecoderは、2぀の関数呌び出しの間に呌び出されるものではなく、䞻にネットワヌク経由たたはストレヌゞからデヌタを取埗するために䜿甚されるため、JSはそれを行うこずができたす。

さらに興味深い異垞が、そこにもないこずを、しかし、であるTextEncoder UTF-16LEのために、その1が関係しおいたす。

/** Allocates a new string in the module's memory and returns its pointer. */
function __newString(str) {
  if (str == null) return 0;
  const length = str.length;
  const ptr = __new(length << 1, STRING_ID);
  const U16 = new Uint16Array(memory.buffer);
  for (var i = 0, p = ptr >>> 1; i < length; ++i) U16[p + i] = str.charCodeAt(i);
  return ptr;
}

ご芧のずおり、これはJava、C、ASなどの䞻芁な問題点であり、 list u16が枡された堎合でも、これらの䞡方が必芁になりたす。 そしお、この問題のコンテキストでは、同じ蚀語の2぀のモゞュヌル間の二重の再゚ンコヌド+損倱はそれほど倉わらないずいう点で、JSAPIに限定されたせん:(

Webでそのナヌスケヌスに察凊する方法に぀いおは、 TextEncoder / TextDecoder以倖にもさたざたなオプションがありたす。 もう1぀は、 new WebAssembly.Function() 䞀郚のブラりザヌで既に実装されおいたすを拡匵しお、コンストラクタヌにオプションのパラメヌタヌを远加するこずで文字列倉換を実行するこずです。 このようなアプロヌチにより、コンポヌネント以倖のwasmの䜿甚にも機胜が利甚できるようになり堎合によっおははるかに早く、JSAPIがこのナヌスケヌスに察凊するのに適切な堎所になるずいう点が匷調されたす。

参考https //github.com/WebAssembly/interface-types/issues/135#issuecomment-863493832で出おきた「IntegratedW / UTF-any」オプションを䞊蚘の提案の

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

関連する問題

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

dpw picture dpw  Â·  3コメント

badumt55 picture badumt55  Â·  8コメント

Artur-A picture Artur-A  Â·  3コメント

mfateev picture mfateev  Â·  5コメント