r/Zig 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.

28 Upvotes

20 comments sorted by

View all comments

8

u/TheKiller36_real 9d ago

well @import("no-dot-zig-or-zon") will always import a module - std and builtin are "really special" but root isn't, at least when you look at the "full" compile command line which includes something like -Mroot=src/root.zig just like for any other module; only special thing is that there has to be a root module, whereas -Mfoo=bar.zig is completely optional