| I used Zig (not MicroZig, just rolled my own HAL) for the bootloader and firmware on a soft RISC-V SOC + custom peripherals recently and had somewhat mixed, though positive feelings about it. On the positive side: - As a 'safer c', getting things up and running was a breeze, writing code largely felt intuitive. - The additions to C (slices/iterators, enhanced structs, arbitrarily sized integers) are excellent - It produces fairly small firmware images (useful when stuffing a boot rom in logic/EBRAM) - Easier (than C IMO) to get up and running with formatted IO vs retargeting libc - Comptime is neat, and you can build some decent low-cost abstractions with it (ex: I built a comptime heavy write-through cache for key-value storage that required very little overhead and largely self-generated based on a simple struct) - I really enjoy the use of structs for function+data organization. It maps well to hardware instances, giving you an 'object' like feeling without OOP ick. On the negative side: - The compiler is still a seriously moving target. Upgrading sometimes meant rather large refactors. - Documentation is somewhat poor IMO. - As a long time user of Nim (including on really lean embedded targets), compared to hygienic macros, comptime falls way short. - The lack of first class interfaces/traits/typeclasses is not my favorite. The currently suggested alternatives are so un-ergonomic I'd almost call them hostile. All-in-all, I'm excited to see where Zig ends up. After nearly 20 years writing embedded code I'm really (really really really) tired of C. The embedded systems community really needs to embrace better tools. |
Hear hear, brother!
I get particularly frustrated about the second point, and I've made it my career goal to get my teams to update their tools and processes. For example, when I joined my current team, they didn't compile debug symbols and didn't know how to use a debugger on our system! Hell, in 2024 I still have colleagues who prefer to use a .dis and .map file than leverage the debug symbols... "What is this "mixed code and disassembly" display you speak of"