Skip to content

バインディング

binding はホスト環境にワークブック操作を公開し、計算は core に残します。それぞれの binding は片側でホスト言語の慣用、もう片側で C ABI を話します。

用語: binding(バインディング)

ホスト型(Uint8Array / bytes / bytearray / std::span など)を engine 入力に、engine 出力をホスト型に変換する薄い層。binding は数式の意味論を実装せず、データの形を整え、ライフタイムを管理します。

担当すること

  • ホスト buffer を C ABI が受け取れるワークブックバイトに変換する。
  • ワークブックハンドルとライフタイムを管理する(WASM の delete()、Python の context manager、Native Node の GC 紐付け、CLI / MCP のプロセス寿命)。
  • スプレッドシート値をホスト値に変換し、ValueKind を保つ(セルエラーが例外ではなく値であり続けるように)。
  • 計算エラーと IO エラーを公開する(スプレッドシート error 値を失わない形で)。
  • 各ホスト用の API を公開する。

担当しないこと

binding は次のことを しません

  • 数式の意味論を実装する(パーサ / 評価器は core)
  • ワークブックのパースを重複実装する(OOXML / XLSB の reader は core)
  • profile 固有挙動を追加する(profile はワークブック状態であり、C ABI 経由で設定される)
  • 独自の dirty 集合・依存関係グラフ・recalc scheduler を導入する(すべて core 側)

binding で Excel を再実装しないこと

ある関数結果を特別扱いしたい、ある値を core と違う形で coerce したい ─ そう思ったら正解は core 側にあります。評価器にケースを追加し、oracle fixture を追加すれば、全 binding が同時にその挙動を取り込めます。binding ごとに patch すると drift が速いです。

実例

Binding扱うホスト慣用触らない領域
WASMUint8Array、status envelope、ValueKind enum、async モジュールファクトリ関数意味論・ファイルパース・計算グラフ
Native NodeN-API Buffer、同期 API、GC 紐付けハンドル関数意味論・ファイルパース・計算グラフ
Pythonbytes、context manager、FormulonErrorValue.to_python()関数意味論・ファイルパース・計算グラフ
CLIargv、stdin / stdout / stderr、終了コード関数意味論・ファイルパース・計算グラフ
MCPJSON 入出力、session map、allowlist dispatch関数意味論・ファイルパース・計算グラフ

次に読むもの