This is an especially hard ask, given how useful the FP-like features of Rust are, and I find it almost impossible to live without them. Basically, I am looking for a middle ground between C/Zig and Rust.
One such language I have found is Austral[0]. What other such languages are there?
[0] https://austral-lang.org/
codr7•2mo ago
A programming language is always going to make some kind of compromise; better at some things, worse at others.
Simplicity/power and safety pull the design in different directions.
hyperbrainer•2mo ago
codr7•2mo ago
But at the same time, I'm pretty sure that smaller/simpler is going to mean less safe.
uecker•2mo ago
hyperbrainer•2mo ago
SkiFire13•2mo ago
I don't think the "complicated" is part of the philosophy. Rather the idea is that a "strong" type system should ensure safety. The general consequence of this however is that the language becomes quite restricting and limiting. Hence the need for more more complex feature that allow for greater expressibility.
chrisrodrigue•2mo ago
> Beautiful is better than ugly.
> Explicit is better than implicit.
> Simple is better than complex.
> Readability counts.
What really sets Zig apart from the usual suspects (C, C++, Rust) is that it has first class compile-time reflection capabilities built into the language (comptime, @field, @typeInfo, etc.) rather than bolted on as macros or templates.
90s_dev•2mo ago
Funny you make that analogy. I remember back when the two contending C alternatives were Zig and Nim, with Nim being syntactically almost a Python clone.
It seems Nim has gone the way of Crystal (Ruby version of Nim) and is just kind of there but mostly forgotten and doomed to be abandoned unless it finds a niche.
> What sets Zig apart is compile-time
I see this claim a lot, but I'm not sure. I think it's the fact that Zig is more or less still C syntax and semantics, just... fixed. The way it does comptime does seem better than how other languages do it, but I haven't actually used it, much less for long enough to judge it properly.
aalhour•1mo ago
cb321•1mo ago
tauoverpi•1mo ago
As an example from my unfinished project, I use it to select the encoding to use [1] when resolving pointers to components [2] to reduce code size [3] as much as possible while keeping a high-level interface [4] where you don't need to care about any of it, just "map" a system over every matching entry within the database and it computes the "best" traversal for a single-thread. This is something that's generally difficult to both keep simple enough to work with and for it to generate good enough code to be worth it while retaining type safety.
Comptime enables such without much cognitive overhead as you're working in the same language as before just with lazy evaluation [5] and slightly more lenient rules around memory management making it easier to focus on working towards the desired the data model.
[1]: https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...
[2]: https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...
[3]: https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...
[4]: https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...
[5]: https://godbolt.org/z/P64Ezcrb7
nielsbot•2mo ago
https://saaramar.github.io/iBoot_firebloom/