V
vkuttyp/CeeSafe
CeeSafe: a memory-safe systems language with Java, C# and Typescript style syntax, compiled to portable C
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
- Star count
- 0 ★ · vkuttyp/CeeSafe · read from the repository page · (checked 2026-11-13 20:00:50)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-11-03 · last seen 2026-11-14 · seen 12× · listed by 1 sources
- Score
- score 103 · 1 sources · repo
FAQ (answers come from our records)
Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
vkuttyp/CeeSafe;first catalogued 2026-11-03;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# CeeSafe
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Memory-safe systems programming, compiled to C.
CeeSafe is a systems programming language with C#-, Java- and TypeScript-style syntax and Rust-style ownership and
borrowing.
ceesafec compiles it ahead of time to portable, readable C11, so a CeeSafe program runs wherever a C compiler does:
Linux, macOS and Windows, bare metal, and inside an operating system kernel. There is no garbage collector and no
reference counting; values are destroyed deterministically. The compiler is written in CeeSafe and rebuilds itself to
the same bytes.
Documentation ·
Getting started ·
Specification ·
Releases ·
Performance
ceesafe
struct Account {
id: u64;
balance: i64;
public fn deposit(borrow mut this, amount: i64) {
this.balance += amount;
drop {
Console.write("closing account ");
Console.writeLine(this.id);
fn main() {
var account = Account { id: 7, balance: 0 };
account.deposit(100);
Console.writeLine(account.balance);
text
100
closing account 7
## Why CeeSafe
In safe code (everything outside an unsafe block), CeeSafe rules out:
use after free and double free: every value has one owner and is destroyed exactly once;
dangling references: a reference cannot outlive what it refers to, checked without lifetime annotations in most
code;
conflicting access: while something is borrowed it cannot be changed, and while it is borrowed mutably nothing
else can read it;
out-of-bounds access and uninitialised reads: indexes are checked, and variables must be assigned before use;
silent integer overflow: overflow stops the program in every build; wrapping is written explicitly
(x.wrappingAdd(y)).
And beyond safety:
Structured async and threads. async fn and await run many waits on one thread (timers, sockets, files,
channels, DNS) with no garbage collector and no task that outlives its caller: Async.scope starts children that may
borrow the caller's locals and have all returned when it does, Async.tasks starts them as work comes (a task per
connection, up to a limit), Async.race and Async.all take two, a failure cancels the rest, and Async.timeout
bounds any of it. Each task's frame has a size known at compile time and never
moves. TCP and UDP sockets speak IPv4 and IPv6 on epoll, kqueue, iouring and IOCP, with socket options, vectored
sends, files sent by the kernel (sendfile, TransmitFile), datagrams with ECN bits and segments, and portable
network errors. Async.runWorkers spreads
tasks over threads; Thread.spawn, Thread.both, Arc, Mutex and atomics share data, with Send and Share
checked.
Explicit, pluggable allocation. Each allocation chooses its allocator: the system heap, an arena, a pool, a fixed
buffer, a scratch frame, or your own. Allocation failure is a value, Result , handled or propagated
with ?. A box that cannot escape its function is placed on the stack.
C you can read. Structured, warning-clean C11 for clang, gcc and MSVC, with #line maps back to CeeSafe source
for lldb and gdb, and a reference interpreter that runs the same programs.
Ready for kernels. A freestanding profile with no C library, context effects that reject sleeping under a spin
lock, lock guards and kernel objects, and an async executor over the kernel's own hooks. CeeSafe states C's own
CeeSafe is a systems programming language with C#-, Java- and TypeScript-style syntax and Rust-style ownership and
borrowing.
ceesafec compiles it ahead of time to portable, readable C11, so a CeeSafe program runs wherever a C compiler does:
Linux, macOS and Windows, bare metal, and inside an operating system kernel. There is no garbage collector and no
reference counting; values are destroyed deterministically. The compiler is written in CeeSafe and rebuilds itself to
the same bytes.
Documentation ·
Getting started ·
Specification ·
Releases ·
Performance
ceesafe
struct Account {
id: u64;
balance: i64;
public fn deposit(borrow mut this, amount: i64) {
this.balance += amount;
drop {
Console.write("closing account ");
Console.writeLine(this.id);
fn main() {
var account = Account { id: 7, balance: 0 };
account.deposit(100);
Console.writeLine(account.balance);
text
100
closing account 7
## Why CeeSafe
In safe code (everything outside an unsafe block), CeeSafe rules out:
use after free and double free: every value has one owner and is destroyed exactly once;
dangling references: a reference cannot outlive what it refers to, checked without lifetime annotations in most
code;
conflicting access: while something is borrowed it cannot be changed, and while it is borrowed mutably nothing
else can read it;
out-of-bounds access and uninitialised reads: indexes are checked, and variables must be assigned before use;
silent integer overflow: overflow stops the program in every build; wrapping is written explicitly
(x.wrappingAdd(y)).
And beyond safety:
Structured async and threads. async fn and await run many waits on one thread (timers, sockets, files,
channels, DNS) with no garbage collector and no task that outlives its caller: Async.scope starts children that may
borrow the caller's locals and have all returned when it does, Async.tasks starts them as work comes (a task per
connection, up to a limit), Async.race and Async.all take two, a failure cancels the rest, and Async.timeout
bounds any of it. Each task's frame has a size known at compile time and never
moves. TCP and UDP sockets speak IPv4 and IPv6 on epoll, kqueue, iouring and IOCP, with socket options, vectored
sends, files sent by the kernel (sendfile, TransmitFile), datagrams with ECN bits and segments, and portable
network errors. Async.runWorkers spreads
tasks over threads; Thread.spawn, Thread.both, Arc, Mutex and atomics share data, with Send and Share
checked.
Explicit, pluggable allocation. Each allocation chooses its allocator: the system heap, an arena, a pool, a fixed
buffer, a scratch frame, or your own. Allocation failure is a value, Result , handled or propagated
with ?. A box that cannot escape its function is placed on the stack.
C you can read. Structured, warning-clean C11 for clang, gcc and MSVC, with #line maps back to CeeSafe source
for lldb and gdb, and a reference interpreter that runs the same programs.
Ready for kernels. A freestanding profile with no C library, context effects that reject sleeping under a spin
lock, lock guards and kernel objects, and an async executor over the kernel's own hooks. CeeSafe states C's own
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/vkuttyp-ceesafe/)
- Source
- github · https://github.com/vkuttyp/CeeSafe
- Browse by field
- Open source
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.