@cella-lang/cpp 0.1.202610080826 → 0.1.202610081421
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.
- package/CHANGES.md +28 -0
- package/cpp.cell +0 -0
- package/index.json +863 -187
- package/package.json +4 -4
package/CHANGES.md
CHANGED
|
@@ -13,6 +13,34 @@
|
|
|
13
13
|
- 型別提示(`type_at`)只為包住查詢位置的運算式算型別:之前每次約 1.1 秒,現在約 0.1 秒。結果不變。
|
|
14
14
|
- 命令列:每次檢查都印的成本行(`[F219 cost] …`)改成預設不印,要看時設 `CELLA_COST=1`,標籤改成 `[cost]`;診斷用的環境變數改成 `CELLA_` 開頭(`CELLA_COST_VERBOSE`、`CELLA_ALLOC`、`CELLA_CONV_TRACE`、`CELLA_UNIFY_TRACE`)。
|
|
15
15
|
- **檢查器指紋改變**(上面兩項與錯誤訊息的文字),套件已重建。
|
|
16
|
+
- **算得出不相等的 `refl` 立即拒絕**:兩邊算成不同的字面量或建構子時直接拒絕,錯誤訊息說出兩個值;之前會用光步數預算、判成無法判定。
|
|
17
|
+
- **`match` 的對象不是變數時不再一律完全正規化**:期望型別沒有提到對象的任何變數時跳過。在符號引數上的大計算(`match atanRat (…) … with`)之前會用光預算、定義的本體變成佔位洞。
|
|
18
|
+
- **自然數次方加速**(`power`,照 Lean 4 的 `Nat.pow`,指數 ≤ 2^24):數學函式的每一輪都要算好幾次 2 的冪,sinh 一筆從 5 秒變成約 0.1 秒;差分與測試都跟著變快。
|
|
19
|
+
- **拒絕的判決也帶其他定義的狀態**:一份檔有錯時,之前判決只有錯誤;現在其他定義照樣跑終止性檢查與第二個 kernel,`--json` 的 `unknown` 列出無法判定的定義(洞、預算用完、依賴被拒絕的定義),文字輸出也列出 `? 名字 — 原因`。`verdict` 仍是 `reject`;沒列出的定義是通過。
|
|
20
|
+
|
|
21
|
+
### 迭代器
|
|
22
|
+
|
|
23
|
+
- **API 改變**:vector/陣列的迭代器從單純的位置(`Nat`)改成 `cpp.It`(位置+取得時容器的版本)。`itBegin`/`itEnd`/`itMove`/`itNext` 回傳 `It`;`itDiff` 多了容器與前置條件(`cpp.itDiff pl a k2 k1 (cpp.itBothOk refl)`);位置用 `cpp.itPos`。`findA`/`minElementA`/`maxElementA` 照舊回傳位置,另有回傳迭代器的 `findIt`/`minElementIt`/`maxElementIt`。
|
|
24
|
+
- **迭代器失效**:結構性修改(`push_back`、`insert`、`erase`、`pop_back`、`clear`、`resize`)之後用舊的迭代器,前置條件證不出來;`cpp.eraseIt`/`cpp.insertIt` 回傳帶新版本的迭代器(`it = v.erase(it)`)。容量沒有建模,`push_back` 一律視為使所有迭代器失效。
|
|
25
|
+
- **set/map 的迭代器**:`cpp.setBegin`、`setEnd`、`setFindIt`、`setLowerBound`、`setUpperBound`、`setItDeref`、`setItNext`、`setItPrev`、`setItEq`、`setEraseIt`;map 的 `mapBegin`、`mapEnd`、`mapFindIt`、`mapLowerBound`、`mapItKey`、`mapItVal`、`mapItSet`、`mapItNext`、`mapItPrev`、`mapItEq`、`mapEraseIt`;範圍 for `cpp.forEachS`、`cpp.forEachM`。`insert` 不讓迭代器失效;`erase` 真的移除元素時讓所有舊迭代器失效(比 C++ 嚴)。
|
|
26
|
+
- `Arr`、`SetV`、`MapV` 多了版本欄位(建構子只在套件內部用到);相關定義的雜湊改變。
|
|
27
|
+
|
|
28
|
+
### 指標的轉換
|
|
29
|
+
|
|
30
|
+
- **`T*` ↔ `U*`**:`cpp.ptrCast t u p` 記得原本的元素型別,`cpp.ptrUncast t c (cpp.uncastOk refl)` 只有轉回原本的型別才得到原本的指標;透過非字元型別的 `U*` 存取物件沒有 API(嚴格別名)。
|
|
31
|
+
- **經由 `unsigned char*` 讀寫物件的位元組**:`cpp.asBytes`、`cpp.byteAdd`、`cpp.byteLoad`、`cpp.byteStore`、`cpp.bytesToPtr`(前置條件 `byteAddOk`、`byteDerefOk`、`bytesToPtrOk`,具體值寫 `refl`)。
|
|
32
|
+
- **指標 ↔ `uintptr_t`**:`cpp.ptrToInt pl t p (cpp.ptrIntOk refl)`、`cpp.intToPtr m i (cpp.intToPtrOk refl)`;抽象但確定的位址,只在 64 位元平台。
|
|
33
|
+
- **存進記憶體的大數讀回不再變慢**:`wrap` 的範圍證明改成先以計算得到(`cpp.byCompute`),一元遞迴的引理只在符號引數上用到。之前存 5 + 100000 再在型別裡讀回要 7.8 秒、存 0x01020304 跑不完。
|
|
34
|
+
- **雜湊改變**:`wrap` 的本體變了,依賴它的定義(算術、轉換、容器裡經過環繞的運算)merkle 都會變;`docs/stable-defs.json` 守的定義不變。
|
|
35
|
+
|
|
36
|
+
### `<cmath>` 的其餘函式
|
|
37
|
+
|
|
38
|
+
- **`asin`、`acos`、`sinh`、`cosh`、`tanh`、`asinh`、`acosh`、`atanh`、`cbrt`、`hypot`、`expm1`、`log1p`**:`cpp.fasin` … `cpp.flog1p`、`cpp.fhypot x y`,全部正確捨入。定義域外是 NaN(`asin 2`、`acosh 0.5`、`log1p (-2)`),極點是 ±∞(`atanh 1`、`log1p (-1)`),±0 的符號照 C 標準附錄 F。
|
|
39
|
+
|
|
40
|
+
### 物件表示
|
|
41
|
+
|
|
42
|
+
- **經由 unsigned char 讀寫物件的位元組、`std::bit_cast`、`memcpy`**:`cpp.objBytes x`、`cpp.byteAt x k (cpp.byteIndexOk refl)`、`cpp.setByteAt`、`cpp.bitCast t x (cpp.sameSize refl)`、`cpp.fObjBytes`、`cpp.fBitCastToInt`/`cpp.fBitCastFromInt`。小端序、二補數;NaN 的 payload 不保留。
|
|
43
|
+
- 檢查器:預算用完的定義不再被列成洞(之前印它的型別可能吃光記憶體)。
|
|
16
44
|
|
|
17
45
|
### 控制流
|
|
18
46
|
|
package/cpp.cell
CHANGED
|
Binary file
|