套件
每個套件都是用 Cella 寫的函式庫,以編譯好的模組包發布。程式的 JSON 決定用哪個套件:看它的 lang,C++ 再看有沒有 board。
| 套件 | 模型 |
|---|---|
@cella-lang/machine |
和語言無關的執行層:IEEE 754 二進位浮點數(正確捨入)、固定寬度的二補數整數、標準串流 |
@cella-lang/cfamily |
C 與 C++ 共用的核心:語法、把錯誤標在節點上的型別檢查、同一份記憶體模型上的小步語意、除錯工作階段 |
@cella-lang/c |
C11 |
@cella-lang/cpp |
C++17:class、template、多載、參考、例外、lambda,以及用 C++ 寫的標準函式庫 vector 與 string |
@cella-lang/arduino |
C++ 上的 Arduino 與 ESP32/ESP8266 板子:照 C++ 原始碼寫的 core 與函式庫、模擬的時鐘、隨時間給的感測器輸入 |
@cella-lang/python |
Python:堆積上的值、和 CPython 一致的運算與印法、例外 |
@cella-lang/programlogic |
和語言無關的程式邏輯:語言的一步與資源的分離代數上的最弱前置條件 |
每個模型都和真的工具做差分:clang 加上 UndefinedBehaviorSanitizer 與 AddressSanitizer、avr-gcc 與 simavr 模擬器、CPython。每條規則都有一對只差一處、落在判決兩側的最小程式;從模型拿掉那條規則,這一對就翻邊。