Pracuji na specifikaci Concrete v2. První verze už má funkční kód a hodně jsme se naučili jeho implementací. Teď jsem přidal pár nových zajímavých funkcí, které pocházejí ze Zig, Austral, Lean/Coq. Navrhuji systémový jazyk kolem formálního ověřování od začátku s několika zajímavými funkcemi. Funkce: - jádro formalizované v Lean 4 - lineární typy (australský styl, nikoli Rustův afin) - půjčování bez celoživotních anotací - schopnosti sledování efektů - alokátor se považuje za schopnost (Zig-styl) - pure ve výchozím stavu - ! pro nečisté funkce (z Roc) Jak píšou: Lineární typy jsou základem. Každá hodnota byla spotřebována přesně jednou. Žádné úniky, žádné dvojité volné volné cesty, žádné použití po volném volném místě. Bezpečnost pamětí bez GC. Je to rozvláčnější, ale konkrétnější a jasnější než afinní typy. Půjčování umožňuje použití linearity. Dočasně odkazujte na hodnotu, aniž byste ji spotřebovali. Lexikální oblasti místo Rustových celoživotních anotací. Kompilátor odhaduje, co Rust nutí psát. Schopnosti sledují efekty. Funkce, která čte soubory, to deklaruje. Funkce, která alokuje, ho deklaruje. Žádné prohlášení znamená žádné účinky, zaručené. grep with(Network) najde každou funkci, která se dotýká sítě. Alokátor jako schopnost činí alokaci viditelnou. Kód bez with(Alloc) se prokazatelně nikdy nedotkne haldy. Vy určujete, který alokátor obsluhuje kterou kódovou cestu. Aréna, pool, alokace stacků, vše explicitní. Pure ve výchozím nastavení obrácí obvyklý model. Efekty vyžadují deklaraci. Běžný případ (čistý výpočet) nepotřebuje žádnou anotaci. Chudé jádro vše spojuje. Když kompilátor tvrdí, že váš program je bezpečný, toto tvrzení je podloženo důkazem.