22. 外部言語がいぶげんご追加ついかとrepository分離条件ぶんりじょうけん

1. 目的もくてき境界きょうかい

NEPL3のfoundationを、個別言語こべつげんご追加ついか変更へんこうしないことをアーキテクチャの不変条件ふへんじょうけんとする。これは既存きそん公開契約こうかいけいやく使つか拡張かくちょうについての条件じょうけんであり、共通機能きょうつうきのう欠陥修正けっかんしゅうせいや、理由りゆう記録きろくした互換性変更ごかんせいへんこう永久えいきゅう禁止きんしするものではない。現時点げんじてんではmonorepoを維持いじする。実際じっさいのrepository作成さくせい、crate公開こうかい権限変更けんげんへんこうはこの仕様しようだけで実施じっししない。

責務せきむつぎ五層ごそうける。

そう所有しょゆうするもの
Foundationsource、Origin、診断しんだん、schema、あたい予算よさん言語中立げんごちゅうりつ交換境界こうかんきょうかい
Language infrastructurereader、prefix engine、共通きょうつうエディタ機構きこう
Domain / Language packageGrammar、Doc、Math、Circuitおよび外部言語がいぶげんご意味いみ構文定義こうぶんていぎ
Backend / AdapterHTML・MathML・SVGとう出力しゅつりょく任意にんいのdomain間接続かんせつぞく
Compositionsuite、CLI、provider host、LSP、Web製品せいひん構成こうせい

Foundationとreader/engineのproduction・build依存いぞんからdomain、出力しゅつりょくbackend、apps、toolsへの逆依存ぎゃくいぞん禁止きんしする。Doc・Math・Circuit coreかん依存禁止いぞんきんしと、no_std + alloc、hostへのI/O集約しゅうやく維持いじする。markupはDoc固有こゆう意味いみたず、複数ふくすうbackendが共有きょうゆうする検査済けんさず出力契約しゅつりょくけいやく所有しょゆうする。

あたらしい構文こうぶん既存きそん意味いみモデルへlowerすることと、あたらしい意味領域いみりょういきつくることをける。べつfrontendやbackendの接続可能性せつぞくかのうせいは、Markdown frontendやPDF backendの実装済じっそうず宣言せんげんではない。

2. 拡張単位かくちょうたんい

共通基盤きょうつうきばん言語名げんごめい列挙れっきょするenumや、全言語ぜんげんごへcompile・evaluate・renderとう強制きょうせいする巨大きょだいtraitをもうけない。かくpackageがschemaと必要ひつよう操作そうさ所有しょゆうし、hostが明示登録めいじとうろくしたpackage・provider・資源しげんからProfileを解決かいけつする。公式四言語こうしきよんげんごおな公開契約こうかいけいやく使つかうreference extensionとし、言語名げんごめいによる特例とくれいをfoundationへれない。操作そうさ意味いみ能力不足のうりょくぶそく署名違反しょめいいはん、Invalid、Stopped、Awaitを区別くべつする。任意にんい未知みちoperationを成功せいこうとしてあつかわず、要求ようきゅう登録済とうろくずみschema/signatureを照合しょうごうする。

Rustない型付かたつ直接呼出ちょくせつよびだしと、NDFを使つかうportable provider境界きょうかい維持いじする。Rustのpointer、allocator、メモリじょうのenum配置はいち、trait vtableを外部がいぶABIにしない。optionalなDoc/Math/Circuit連携れんけいはadapterまたはsuiteが接続せつぞくし、構文こうぶんんだだけではguestを評価ひょうかしない。

現在げんざいじつコードにはLanguagePackage、SchemaRegistry、ParseProfile/RuntimeCatalog、reader providerとtyped adapterがある。これだけから、LanguagePackage/Profileの完全かんぜん交換こうかん動的どうてきロードや、Invoke/Resume/Reply/Cancel/Closeをとお汎用はんようprocess providerの完成かんせい推定すいていしない。未実装経路みじっそうけいろはT26の未達範囲みたつはんいとして実装じっそうする。

3. ふたつの互換性境界ごかんせいきょうかい

Cargoのpackage versionはRust source APIの互換性ごかんせいあらわす。schemaのpackage/revision/digestはportable契約けいやく識別しきべつ使つかう。Rust APIだけの非互換変更ひごかんへんこうとwire/schemaの非互換変更ひごかんへんこう別々べつべつ検出けんしゅつする。すべての変更へんこう両方りょうほうはんげる規則きそくにはしない。両方りょうほう影響えいきょうする変更へんこうでは両方りょうほう移行条件いこうじょうけん記録きろくする。digest不一致ふいっち同一どういつでないことの検出けんしゅつであり、変更へんこう互換性ごかんせい意味いみただしさの証明しょうめいではない。schemaをえない挙動きょどう回帰かいきもconformanceで検査けんさする。

抽出前ちゅうしゅつまえに、固定旧版こていきゅうはんconsumerのcompile試験しけん変更へんこうしたschema/signatureの拒否試験きょひしけん互換更新ごかんこうしん正例せいれい用意よういする。path依存いぞん固定こていGit commitでの成功せいこうを、独立どくりつSemVerリリースの互換性検証ごかんせいけんしょうえない。

4. 段階だんかい分離ぶんり判定はんてい

T26はT01〜T05とT12の成果物せいかぶつ使つか横断的おうだんてき実装じっそう受入うけいれタスクとする。T01とう個別こべつタスク完了かんりょうをT26完了かんりょう依存いぞんさせず、foundationの抽出可能性ちゅうしゅつかのうせい最終さいしゅうT16の条件じょうけんにT26をく。Doc移行いこう・HTML・Pagesの先行作業せんこうさぎょうをT26へ依存いぞんさせない。

最初さいしょ実装段階じっそうだんかいでは conformance/extensions/hello/独立どくりつCargo workspaceをリポジトリがいへコピーし、公開こうかいfoundation APIだけでうごかす。hello <name> のschema・reader設定せってい・formはconsumerが定義ていぎする。解析結果かいせきけっか独立どくりつした期待値きたいち、UTF-8 byte位置いち、source revision、Origin、診断しんだん未知みちhead、NeedMore、停止ていし不正ふせいNDF拒否きょひ検査けんさする。typed ParseTreeをproduction wireで交換こうかんし、canonicalな意味値いみち一致いっち比較ひかくする。これはべつprocess providerの比較ひかくではない。

python tools/extensions/run.py固定こていtoolchainとconsumerのCargo.lockを使つかい、外部がいぶworkspaceのmember、foundation依存いぞんじつpath、実行前後じっこうぜんごのfoundation内容ないよう検査けんさする。format・Clippy・production API試験しけん実行じっこうし、source hash、consumer hash、はん、command、結果けっかなまlogを保存ほぞんする。現段階げんだんかいでは依存先いぞんさきのfoundationはmonorepoのpathであり、おやworkspaceからはなした配布物はいふぶつのbuildを証明しょうめいしない。

実際じっさいのrepository分離ぶんりには、つぎ全条件ぜんじょうけん必要ひつようとする。

  1. foundationよんcrateだけの配布はいふ・build/test/conformanceが成立せいりつし、おやmonorepoの生成器せいせいき・domain・私有しゆうfixtureを要求ようきゅうしない。

  2. べつworkspaceおよび独立どくりつrepositoryにある新言語しんげんご公開契約こうかいけいやくだけでparse・schema・source/Origin・診断しんだん・providerを提供ていきょうする。追加時ついかじにfoundation sourceを変更へんこうしない。

  3. Rust直接呼出ちょくせつよびだし、NDF loopback、実際じっさいべつprocess providerで、意味結果いみけっか位置いち診断しんだん失敗しっぱい停止ていし一致いっちする。

  4. schema/package/Profileの交換こうかん解決かいけつ署名しょめい/はん/digest不一致ふいっち未知みちoperation、資源しげん取消とりけし・継続けいぞく境界きょうかい検証けんしょうする。

  5. Rust APIとportable契約けいやく互換性検査ごかんせいけんさ別々べつべつ機能きのうする。

  6. 正式せいしきcatalogのX01とX02に実行じっこう独立どくりつレビュー証拠しょうこがある。

条件成立後じょうけんせいりつご最初さいしょ抽出対象ちゅうしゅつたいしょうをDocとし、その経験けいけん契約不足けいやくぶそく確認かくにんする。Circuitは条件じょうけんととのった時点じてんべつrepositoryで開始かいしする計画けいかくとするが、条件待じょうけんまちを理由りゆう既存きそんのCircuit実装目標じっそうもくひょう放棄ほうきしない。四言語よんげんご、CLI/WASI、provider、エディタ、TEA Playground、Pages、Doc文書移行ぶんしょいこう最終範囲さいしゅうはんい維持いじする。