I think I like the idea of managing almost everything with arenas like described in this talk (although my use of arenas in zig has been pretty minimal so far):
I guess with zigs Allocator interface there isn’t really a need to require a arena parameter everywhere, because we already have allocator everywhere, but maybe we can still use some ideas of the talk (It has been a while since I saw it and I didn’t take notes)
Regarding rust style ownership, the OCaml-ized version seems better to me, because it doesn’t force a straight jacket on you and still seems to give you 95% what was wanted: