@cella-lang/cpp 0.1.202610081245 → 0.1.202610081453

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 +19 -0
  2. package/cpp.cell +0 -0
  3. package/index.json +780 -192
  4. package/package.json +4 -4
package/CHANGES.md CHANGED
@@ -18,6 +18,25 @@
18
18
  - **自然數次方加速**(`power`,照 Lean 4 的 `Nat.pow`,指數 ≤ 2^24):數學函式的每一輪都要算好幾次 2 的冪,sinh 一筆從 5 秒變成約 0.1 秒;差分與測試都跟著變快。
19
19
  - **拒絕的判決也帶其他定義的狀態**:一份檔有錯時,之前判決只有錯誤;現在其他定義照樣跑終止性檢查與第二個 kernel,`--json` 的 `unknown` 列出無法判定的定義(洞、預算用完、依賴被拒絕的定義),文字輸出也列出 `? 名字 — 原因`。`verdict` 仍是 `reject`;沒列出的定義是通過。
20
20
 
21
+ ### 輸出格式操縱子
22
+
23
+ - **`hex`/`oct`、`showbase`、`uppercase`、`boolalpha`、`showpos`、`setw`、`setfill`、`left`、`fixed`/`scientific`、`setprecision`**:格式描述 `cpp.OutFmt`(`cpp.defaultFmt` 與 `cpp.fmtBase`、`fmtShowBase`、`fmtUpper`、`fmtBoolAlpha`、`fmtShowPos`、`fmtWidth`、`fmtFill`、`fmtLeft`、`fmtMode cpp.fmFixed`/`cpp.fmSci`/`cpp.fmDefault`、`fmtPrec`),由呼叫端帶著;`cpp.coutVF fmt x st`、`cpp.coutFF fmt x st`、`cpp.coutStrF`、`cpp.coutLitF` 照它輸出。`setw` 只作用在下一次輸出:輸出之後把寬度設回 0(`boolalpha` 的 bool 例外,見邊界清單)。既有的 `coutV`、`coutF`、`coutG`、`coutFixed` 不變。
24
+
25
+ ### 迭代器
26
+
27
+ - **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`。
28
+ - **迭代器失效**:結構性修改(`push_back`、`insert`、`erase`、`pop_back`、`clear`、`resize`)之後用舊的迭代器,前置條件證不出來;`cpp.eraseIt`/`cpp.insertIt` 回傳帶新版本的迭代器(`it = v.erase(it)`)。容量沒有建模,`push_back` 一律視為使所有迭代器失效。
29
+ - **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++ 嚴)。
30
+ - `Arr`、`SetV`、`MapV` 多了版本欄位(建構子只在套件內部用到);相關定義的雜湊改變。
31
+
32
+ ### 指標的轉換
33
+
34
+ - **`T*` ↔ `U*`**:`cpp.ptrCast t u p` 記得原本的元素型別,`cpp.ptrUncast t c (cpp.uncastOk refl)` 只有轉回原本的型別才得到原本的指標;透過非字元型別的 `U*` 存取物件沒有 API(嚴格別名)。
35
+ - **經由 `unsigned char*` 讀寫物件的位元組**:`cpp.asBytes`、`cpp.byteAdd`、`cpp.byteLoad`、`cpp.byteStore`、`cpp.bytesToPtr`(前置條件 `byteAddOk`、`byteDerefOk`、`bytesToPtrOk`,具體值寫 `refl`)。
36
+ - **指標 ↔ `uintptr_t`**:`cpp.ptrToInt pl t p (cpp.ptrIntOk refl)`、`cpp.intToPtr m i (cpp.intToPtrOk refl)`;抽象但確定的位址,只在 64 位元平台。
37
+ - **存進記憶體的大數讀回不再變慢**:`wrap` 的範圍證明改成先以計算得到(`cpp.byCompute`),一元遞迴的引理只在符號引數上用到。之前存 5 + 100000 再在型別裡讀回要 7.8 秒、存 0x01020304 跑不完。
38
+ - **雜湊改變**:`wrap` 的本體變了,依賴它的定義(算術、轉換、容器裡經過環繞的運算)merkle 都會變;`docs/stable-defs.json` 守的定義不變。
39
+
21
40
  ### `<cmath>` 的其餘函式
22
41
 
23
42
  - **`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。
package/cpp.cell CHANGED
Binary file