fn io::write(s: *stream, buf: const []u8) (size | io::error);
// ...
sum += match (io::write(s, buf)) {
case let err: io::error =>
match (err) {
case unsupported =>
abort("Expected write to be supported");
case =>
return err;
};
case let n: size =>
process(buf[..n]);
yield n;
};
Expression-based syntax and match statements remind me of Rust, but it implemented simpler without options...
Maybe you already used Hare in your project. Interesting to read your feedback...
Hare uses a static type system, manual memory management, and a minimal runtime
My question is: what does it provide that C/C++ doesn't? It doesn't seem to provide memory safety, C also has a minimal runtime, C/C++ also have a static type system... does it have better tooling? A package manager?