@cella-lang/cpp 0.1.202610071953 → 0.1.202610080134

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/CHANGES.md +69 -0
  2. package/cpp.cell +0 -0
  3. package/index.json +619 -331
  4. package/package.json +8 -6
package/CHANGES.md ADDED
@@ -0,0 +1,69 @@
1
+ # @cella-lang/cpp 的變更
2
+
3
+ 給使用這個套件的工具(產生 `cpp.*` 項的翻譯器)看的 API 變更。每一版的完整邊界清單在 `README.md`。
4
+ 雜湊(每個定義的 own/merkle,見 `index.json`)在不穩定期可能改變;下面列出改變的定義。
5
+
6
+ ## 2026-10-08
7
+
8
+ ### 檢查器
9
+
10
+ - 非遞迴、頂層 match 在參數上的定義,在 scrutinee 卡住時保持折疊(history 294)。存下來的項變小:這個套件從 6.6 MB 變成約 2 MB,載入更快。
11
+ - **雜湊改變**:許多定義的項因此改變,語意不變。請以 `index.json` 的新雜湊為準。
12
+ - `docs/stable-defs.json` 裡守的定義有 8 個改變(都是定理,計算用的定義不變):`cpp.isPropInRange`、`cpp.toInt_add`、`toInt_sub`、`toInt_mul`、`toInt_div`、`toInt_rem`、`toInt_neg`、`toInt_inj`。`IntN`、`add`、`div` 等運算本身的雜湊不變。
13
+
14
+ ### 控制流
15
+
16
+ - **小步語意加了計數迴圈、函式呼叫、do-while、switch**。
17
+ - 新建構子:`cpp.sFor n body`(`body` 拿到 `k < n` 的證據)、`cpp.sCall enter body leave`、`cpp.sDoWhile c body`。
18
+ - switch 寫成 `cpp.sSwitchL e [(cpp.swCase k, 敘述), (cpp.swDefault, 敘述), …]`。
19
+ - 一致性定理 `cpp.execDenoteLoop` 涵蓋全部構造,不加前提。
20
+ - **雜湊改變**:`cpp.CStmt`、`cpp.Frame`、`cpp.step`、`cpp.exec`、`cpp.denote`,以及一致性證明裡的定義。
21
+ - **組合子層的呼叫**:
22
+ - `cpp.callS enter body leave`(敘述):被呼叫者有自己的狀態與回傳型別;`leave` 收到 `just v`(return)或 `nothing`(走到結尾)。
23
+ - `cpp.callV body args (cpp.returns ok)`(運算式):前置條件是「會回傳」。
24
+ - `cpp.callSR enter body leave`:參考參數。`leave` 收到 `cpp.retWith q`(中途 return,回傳值帶著參考參數)或 `cpp.retFell t`(走到結尾時被呼叫者的狀態)。
25
+ - `cpp.doWhileF fuel c body`;`cpp.switchS e [cpp.swBlock (cpp.swCase k) body, cpp.swBlock cpp.swDefault body, …]`,有 fallthrough,switch 吸收 break。
26
+
27
+ ### 數值
28
+
29
+ - **整數與浮點的混合運算**:依兩邊的種類挑函式。
30
+ - 整數 ⊕ 浮點:`cpp.addIF`、`subIF`、`mulIF`、`divIF`。
31
+ - 浮點 ⊕ 整數:`cpp.addFI` 等。
32
+ - 浮點 ⊕ 浮點(到較寬的格式):`cpp.addFF` 等。
33
+ - 比較:`cpp.ltIF`/`leIF`/`eqIF`(及 `FI`、`FF`)。`x > y` 寫成交換兩邊的 `lt`。
34
+ - 前置條件只有除以零:`cpp.fNonZero refl`,對的是轉換之後的除數。
35
+ - 兩邊都是整數照舊用 `cpp.addV` 這類。
36
+ - 結果型別的規則寫在 `cpp.arithT`。
37
+ - **`<cmath>`**:`cpp.fabs`、`ffloor`、`fceil`、`ftrunc`、`fround`(.5 離零)、`fmod`。結果都精確。
38
+ - **`pow(x, n)`(n 是整數)**:`cpp.fpowi x n`,正確捨入。指數不是整數的 `pow` 還沒有。
39
+ - **雜湊改變**:`cpp.fconvV`(改用另一種捨入算法,值不變;float/double 之間的大數轉換不再逾時)。
40
+
41
+ ### 容器與字串
42
+
43
+ - vector:
44
+ - `cpp.frontV`、`backV`、`popBack`,前置條件 `cpp.arrNonEmpty refl`;
45
+ - `emptyA`、`clearA`;
46
+ - `insertA a i x (cpp.insertOk refl)`(0 ≤ i ≤ size);
47
+ - `eraseA a i (cpp.inBounds refl)`;
48
+ - `resizeA a n`(新元素補零)。
49
+ - string:
50
+ - `cpp.strInsert`、`strErase`、`strReplace`,前置條件 `cpp.strSubOk refl`(i ≤ size);
51
+ - `strCompare`(−1/0/1);
52
+ - `stoi p s (cpp.stoiOk refl)`;
53
+ - `strFront`、`strBack`、`strPopBack`,前置條件 `cpp.strNonEmpty refl`;
54
+ - `strClear`、`strIsEmpty`。
55
+
56
+ ### 迭代器與演算法(F440)
57
+
58
+ - vector/陣列的迭代器是位置:`cpp.itBegin`、`itEnd`、`itDeref a k (cpp.itDerefOk refl)`、`itMove a k d (cpp.itMoveOk refl)`、`itNext`、`itDiff`。
59
+ - 範圍 for:`cpp.forEachA a (cpp.allInit refl) (fun x => …)`、`forEachIdxA`(`T&` 版本,本體拿到位置)。
60
+ - `cpp.findA`、`countA`、`reverseA`、`minElementA`、`maxElementA`;`cpp.flowState d r` 取出敘述正常結束時的狀態。
61
+ - 迭代器失效不在模型內:修改容器之後請重新取迭代器。
62
+
63
+ ### 定理
64
+
65
+ - 記憶體(對任意記憶體成立):
66
+ - `cpp.loadStore`:寫了再讀是寫的值;
67
+ - `loadStoreOtherCell`、`loadStoreOtherBlock`:寫別處不影響讀;
68
+ - `loadAddrOf`、`loadNewObj`:`&x`、`new T(v)` 讀回初值。
69
+ - vector:`cpp.lengthInsertA`、`lengthEraseA`。
package/cpp.cell CHANGED
Binary file