Skip to content

Coming from another language ​

CeeSafe borrows deliberately from several languages, and each will feel partly familiar:

  • its syntax from C# and TypeScript: braces, fn name(x: T) -> R, let and var, generics in <…>;
  • its ownership and borrowing from Rust, with less annotation and a simpler checker;
  • its explicit allocators from Zig, with use-after-free made a compile error;
  • its regions from Cyclone, and its compile-through-C design and compiler-managed memory from Goose;
  • its deterministic destruction from C++'s RAII, without the undefined behaviour.

These pages map what you know to CeeSafe, show the same program side by side, and point out the differences that will trip you up.

If you knowReadThe biggest changes
RustCeeSafe for Rust programmersno lifetime syntax on plain borrows; allocators per allocation; checks in every build; no macros or traits-as-types
ZigCeeSafe for Zig programmersuse-after-free and dangling references are compile errors; checks never turn off; generics instead of comptime
C or C++CeeSafe for C and C++ programmersthe compiler tracks ownership and borrows; no undefined behaviour; no preprocessor
C#, Java or TypeScriptCeeSafe for C#, Java and TypeScript programmersno garbage collector, no classes or inheritance, no exceptions, no null references
GoCeeSafe for Go programmersno garbage collector; errors propagate with ?; interfaces are explicit and static; no goroutines yet

A comparison of the languages as a whole, in one table, is on the repository's README (Nova's, the same language at the fork).

Pre-1.0: the language and its tools are still changing. CeeSafe forked from Nova 0.6.0.