2 ms·
Macros and compile-time function evaluation are different and fill different roles. Macros define new syntax, while compile-time function evaluation evaluates e
by pcwalton 6y ago
Macros and compile-time function evaluation are different and fill different roles. Macros define new syntax, while compile-time function evaluation evaluates expressions written using the existing syntax. The corresponding Rust feature for the latter is not macros, but rather "const fn".
- chubot 6y agoI think they both have potential performance issues in the compiler though, and both can be compared with textual code generation. I think of one as metaprogramming with the parser and the other as metaprogramming with an interpreter. (And the C preprocessor is metaprogramming with only a lexer. Code generation is the kind of metaprogramming that every language supports :) ) Although maybe you're saying Zig doesn't have the functionality of Rust macros, and that could be true; I haven't played with it enough. However I do think there is overlap as Zig implements printf with compile-time evaluation and Rust does it with macros: https://ziglang.org/documentation/master/#Case-Study-printf-in-Zig https://ziglang.org/documentation/master/#Case-Study-printf-... https://andrewkelley.me/post/zig-programming-language-blurs-line-compile-time-run-time.html#case-study-printf https://andrewkelley.me/post/zig-programming-language-blurs-...
- AndyKelley 6y agoIn zig you get a compile error if you exceed 1000 backwards branches (e.g. a loop or a function call). If you want to raise the quota you bump it with e.g. `@setEvalBranchQuota(2000);`. This is how we solve the halting problem :) Anyway if you want to know why your compile time is slow in a given zig project, you can probably get pretty far by grepping for calls to that builtin.