Dev logs: Migrating to Zig 0.16.0

I have had a lot of time on my hands during the weekends and I have decided to revisit my long-lost dream of building a game engine, I started learning how to code because I wanted to build games, so a couple of weeks ago, I started a game engine project in Zig.

This weekend, I finally worked up the courage to upgrade the project to support the new Zig 0.16.0. I really do not know a lot about Zig and this project is going to be the first time I actually use it.

I understand Zig has not reached a stable version yet and the new version broke a couple of things. I had to do a bit of work to get everything working again. The existing system used a circular buffer to store events, and there is an event manager which uses Zig's mutex and condition to determine if a new event has arrived then proceeds to handle the event, the new version requires an I/O instance to be passed in order to use mutexes and conditions and I ended up having to thread an I/O instance through basically everything.

I read the 0.16.0 release notes and I largely agree with why they're approaching I/O as an interface this way. I know a couple of languages like Haskell with its IO monad and effect system do something similar but I have not had the chance to play with them so this is refreshing, I am actually looking forward to playing with this and swapping out different concurrency models.

I am moving on to adding windowing support and drawing a triangle, no idea how long this is going to take as my weekends are getting full again, fingers crossed I get the triangle on screen before July ends