Skip to content

アーキテクチャ ​

Formulon は 1 つの計算コアと、その周りを薄く包むパッケージング層で構成されています。WASM / Native Node / Python / CLI / MCP / formulon-cell のいずれも、同じ C++17 コアを C ABI 経由で利用します。

用語: C ABI 層

C++ 以外のホストにワークブックモデル・評価器・入出力を公開するフラットな C 関数インターフェースです。互換性を保つインターフェースはここだけで、バインディングはこれを呼び、実装はコア側にあります。詳しくは バインディング を参照してください。

用語: ワークブックモデル

開いたワークブックを表すメモリ上のデータです。シート、セル、スタイル、定義名、テーブル、依存関係グラフ、再計算が必要なセルの集合(dirty set)、プロファイル、再計算に必要なエンジン状態を持ちます。バインディングはパース後のバイト列ではなく、このモデルへのハンドルを保持します。

ホスト境界コア評価と入出力検証ホスト APIJS・Python・CLI・MCP・セル UIC ABI / バインディング層寿命管理と値の変換C++17 ワークブックモデルシート・セル・依存グラフパーサと評価器関数カタログ・tree walkerファイルの読み書きOOXML・XLSB・パススルーOracle と一致テストExcel の値・環境間の一致ホスト境界コア評価と入出力検証ホスト APIJS・Python・CLI・MCP・セル UIC ABI / バインディング層寿命管理と値の変換C++17 ワークブックモデルシート・セル・依存グラフパーサと評価器関数カタログ・tree walkerファイルの読み書きOOXML・XLSB・パススルーOracle と一致テストExcel の値・環境間の一致
どのホスト環境も C ABI を通じて同じ C++17 コアに届き、バインディングが担うのは値と寿命の変換だけで、計算には関わりません。

どこに何があるか ​

層役割
ホスト API言語別 API(JS / Python / CLI / MCP ツール / セル UI)
C ABI / バインディングリソースの寿命管理、ホスト値 ↔ エンジン値の変換
ワークブックモデルシート、セル、スタイル、依存関係グラフ、再計算が必要なセルの集合、プロファイル
パーサ / 評価器関数カタログ、評価器、エラー伝播
ファイル形式層OOXML / XLSB の読み込み・書き出し、未対応データの保持
Oracle / 一致検証テストExcel 由来の正解値、実行環境間の一致

コアはワークブック状態・数式の意味論・ファイルの読み込み・依存関係の追跡・再計算を担当します。バインディングはホスト値の変換とリソースの寿命管理を担い、計算挙動には関与しません。

評価器は、リリース・開発・テストビルドで共通です。すべての実行環境が同じコアを介して利用します。

なぜ分けるか ​

  • 共通の意味論: プロファイル、入力、時計、乱数の設定をそろえると、共有コアが同じ計算結果を返します。
  • 組み込み: コアは Node / Python / ブラウザの前提を持たないため、同じ C++ ソースから各環境向けの成果物をビルドできます。
  • テスト: Oracle テストは共通エンジンの計算結果を検証します。型変換やリソース管理など、各バインディング固有の処理はパッケージのテストで別途検証します。

次に読むもの ​