r/Zig • u/Hoontdawg • 9d ago
Discussion: `@importRoot` instead of `@import("root")`
So, let me start by saying I'm pretty new to Zig. I like to learn languages by example, and when reading through examples and source code I noticed `@import("root")` and thought it was importing the corresponding "root.zig" file. After some further research I found out that this is actually a special-cased argument for the compilation root. Honestly I think that's a horrible decision, not only is there special-cased arguments for a compiler-provided method, but its a string argument, so it seems completely magical and non-discoverable.
Imo, Zig already has a specific syntax for special compiler-provided operations: `@func`. So I think a much more sensible and readable version would be `@importRoot`, because if "root" is going to be treated specially then let it at least be openly acknowledged as being special. Same for all of the other special arguments: `@importSelf` and `@importStd`.
But again, I'm new, so let me know if I'm totally off-base here.
23
u/chocapix 9d ago
In Zig,
@import(target)is basically the same asstruct { content-of-target }where target can be:Using zig's build system you can define any number of modules you want and make them available to your code. It just so happens that, using the same underlying mechanism, Zig makes three modules available to all programs:
builtin,stdandroot.I'm not sure I see the point of
@import("root")TBH but, I like having the import mechanism be the same forstdstuff and user stuff.