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

付録D. コード生成ターゲット一覧

本付録は CADL v0.2 が規定するコード生成ターゲットを列挙し, リファレンス実装のディレクトリ構成との対応を示す。 付録A §A.9 が codegen: の項目の EBNF を定義する。 本付録では,各ターゲット名をカテゴリ・生成物・ リファレンス実装(cadl 0.3)内の モジュールと対応づける。

D.1 ターゲット一覧​

ターゲット名カテゴリ生成物リファレンス実装モジュールコマンド
pythonランタイムコードPython パッケージ(アクター,契約モニター,プロトコル,モードコントローラ,メトリクス,ランタイム)cadl.codegencadl codegen -t python
solidity制度契約Solidity [Solidity Documentation] スマートコントラクト(契約ごとに 1 つ)cadl.codegen.soliditycadl codegen -t solidity
opa制度ポリシーRego / OPA [Open Policy Agent] ポリシー(契約ごとに 1 つ)cadl.codegen.opacadl codegen -t opa
unity-csharpランタイムコード付録E のライフサイクルとモニターを実行する Unity C# クラスcadl.codegen.unity_csharpcadl codegen -t unity-csharp
unityシミュレータ設定Unity ベースのシミュレータ用 JSONcadl.sim.gen_unitycadl sim-gen -t unity
goシミュレータ設定Go ベースのシミュレータ用 JSONcadl.sim.gen_gocadl sim-gen -t go
python(シミュレータ)シミュレータ設定Python ベースのシミュレータ用 YAMLcadl.sim.gen_pythoncadl sim-gen -t python
ros2ランタイムノードROS 2 [Macenski+, 2022] ノードの雛形cadl 0.3 では未実装—
その他の名前(ユーザ定義)プラグインプラグインが出力するものcadl 0.3 にはプラグイン機構がなく,その他のターゲット名はコマンドラインでは拒否され,codegen: の項目では警告になる—

codegen: の項目では,名前 python はランタイムコードのターゲットを指す。 同名のシミュレータ設定は cadl sim-gen で生成する。したがって,v0.2 では Python のシミュレータ設定を codegen: の項目から要求することはできず, cadl sim-gen -t python を用いる。リファレンス実装(cadl 0.3)では, 最右列に示すとおりコマンドラインでターゲットを選択する。ファイル中の codegen: の項目は構文解析されるが,まだ生成を駆動しない。cadl 0.3.9 からは, 実装が出力できないターゲットを指定した項目に警告が出る(D.4)。

D.2 二層ジェネレータ構成​

リファレンス実装は,出力が契約を強制または実行するコードであるか, シミュレータの設定であるかに応じて codegen を二層に分割している:

src/cadl/
├── codegen/ ← コード層(cadl codegen)
│ ├── *_gen.py ← Python ランタイムパッケージ
│ ├── solidity/ ← 契約のスマートコントラクト強制
│ ├── opa/ ← 契約のポリシー強制(Rego)
│ └── unity_csharp/ ← Unity C# のライフサイクル/モニター実行系
└── sim/ ← シミュレータ層(cadl sim-gen)
├── ir.py ← 三層シミュレータ IR
├── gen_unity.py
├── gen_go.py
└── gen_python.py

単一の CADL ソースファイルは,両層のターゲットを同じ codegen: ブロック内で宣言してよい。処理系は各ターゲットを独立に対応層へ ディスパッチすることが望ましい。

D.3 選択指針​

  • unity: 多エージェントシミュレーションを視覚的に観察する場合。 契約のライフサイクルとモニター(付録E)をそのシミュレーションの 中で実行する場合は unity-csharp。
  • python: アクター,契約モニター,プロトコルの実行可能な ランタイムの骨格が必要な場合。ros2 は実ロボットの駆動のために 予約されており,cadl 0.3 では未実装。
  • solidity: Institution 層契約をオンチェーン(ブロックチェーン) で強制する場合。
  • opa: 契約を API/サービス境界のポリシー(policy-as-code) として強制する場合。

同一ファイルでの複数ターゲット指定は許可されるが, 結果の成果物は独立である。たとえば同一ソースから生成された Unity のシミュレータ設定と Solidity 契約のランタイム相互運用性は,CADL ツール チェーンでは保証しない。

D.4 準拠性​

処理系は,各層から少なくとも 1 ターゲット (たとえば unity と,solidity または opa)を サポートするとき codegen コア準拠。

要求されたターゲットを生成できない場合,処理系は明確な診断 (例: 「codegen ターゲット ros2 は本処理系で未対応」) を出力しなければならない。無言でスキップしてはならない。

D.5 相互参照​