MMR-Benchv1.0
English

外部計算判讀協定 0.9

沒有任何一個來源天生比較大。

這套協定拒絕在快取、求值器與外部引擎之間指定一個永久勝者。它只判讀三者之間的關係,再由判讀結果決定接下來允許發生什麼。

證據模型

對一個公式儲存格 c,協定同時持有三份讀數。

K(c)
檔內存著的 OOXML 快取 —— 上一個寫入的應用程式留在檔案裡的值。
M(c)
在 AST 白名單下算出的限界 MMR 結果。
E(c)
獨立外部引擎算出的結果。

協定不定義 E > M > K 這種永久性的全域排序。那種排序是把一項政策打扮成事實。

九種判讀類別

每個公式儲存格恰好落在其中一種。

判讀類別關係授權什麼
three_way_agreementK = M = E無需動作。
cache_stale_engines_agreeM = E ≠ K使快取失效,寫入另一份安全副本。
cache_missing_engines_agreeK = ∅,M = E無需動作。
external_only_cache_agreesM 不支援,K = E無需動作。
mmr_semantic_gapK = E ≠ M僅送覆核。
external_semantic_gapK = M ≠ E僅送覆核。
external_date_system_gap日期系統與 E 的結果衝突僅送覆核。
error_agreement所有來源落在同一錯誤類別無需動作。
engine_disagreement_review不存在安全共識僅送覆核。

寫入政策

九種之中只有一種會打開寫入 —— 而且那次寫入還是寫進另一份安全副本,動到的是快取值而不是公式。

授權

cache_stale_engines_agree 可授權在另一份安全副本中使快取失效。

永不

它不授權改寫公式。所有語意落差與日期系統落差一律僅送覆核。

結構化參照橋接

外部引擎無法直接解析 Table[Column] 形式的公式。橋接器把結構化參照展開為等價的 A1 範圍,同時保留已定義名稱,並記錄每一條被轉換過的公式。

僅覆核

正規化成功不等於原生語法支援。

引擎環境清單

每個結果都記下它是在什麼條件下產生的,這樣日後重播才分得出「真正的語意落差」與「環境變了」。

  • 引擎與版本。
  • Python 版本與平台。
  • 地區設定與小數點符號。
  • 時區。
  • 活頁簿日期系統。
  • 活頁簿計算模式。
  • 是否需要正規化,以及正規化了幾次。
外部引擎是什麼

一份由別人寫的獨立實作,有它自己的臭蟲,也有它自己的涵蓋範圍。

它不是什麼

它不是 Microsoft Excel。跟它一致,不足以建立普遍的 Excel 相容性。