One of the stated goals of the ZSF is “reusable” software.
We also see “zero dependencies” worn as a badge of honor for many zig projects.
How can these two ideas coexist? Should we not be encouraging depending on each other’s code?
Here is a concrete example: I have an application requiring data exchange in the CBOR format. I could very feasibly hand write the encoding for the ~10 fixed size types I need to encode/decode, or I could depend on r4gus/zbor: CBOR de-/serializer written for Zig - Codeberg.org. I chose to depend on ZBOR. It has been well maintained, and seems to have gotten the API right early on with few breaking changes in the last year for my limited use case. I am happy with this decision.
Another frustration I have is that it feels hard to produce truly reusable software. When I write a library, I believe I need to provide multiple allocation methodologies (gpa, arena, no-allocation, iteration) and multi-OS/multi-arch compatibility. I am even thinking about embedded… (Like I don’t want to accept a file… the user might not have a file system!). I don’t own a mac, I don’t know anything about windows either. This is hard. I think the writer changes alone have made this a lot easier lately, enabling a default abstraction. Hopefully the I/O changes make this easier too.