3 ms·
I think Zig really shines here: https://ziglang.org/documentation/master/#comptime https://ziglang.org/documentation/master/#comptime
by smcnc 9mo ago
I think Zig really shines here: https://ziglang.org/documentation/master/#comptime https://ziglang.org/documentation/master/#comptime
- Tiberium 9mo agoThere's also Nim, it shines even more in compile time and has proper compile time macros :)
- Zambyte 9mo agoA key difference is that in this C# package, `[Comptime]` is an attribute (annotation? not sure on the C# term) applied to methods. In Zig, the `comptime` keyword can be applied to pretty much any expression. In the C# package, if you want to do factorial at runtime and at compile time, (I think, from reading the README) you need to define the same function twice, one with `[Comptime]` and once without. Contrast this to Zig, where if you have a regular runtime factorial function, you can just execute it at compile time like: const x = comptime factorial(n); Another limitation of the C# package is it only works with primitive types and collections. Zig comptime works on any arbitrary types.
- hahn-kev 9mo agoYou don't. The way it works is that it intercepts the call site when the input args are constant. If they're not then it won't be replaced and it will call the original method. C# source generators can't replace method definitions, however a call site can be changed to another method via source generators.
- estimator7292 9mo agoDecorations in [square brackets] are Attributes in C#
- pjmlp 9mo agoD was already doing it in 2010 thereabouts, an then there is the whole reader macros in Lisp and Scheme.
- jibal 9mo agoAnd Nim, which has multiple levels of metaprogramming.
- pyrolistical 9mo agoI’m annoyed they called it comptime when it isn’t the same as Zig’s more powerful comptime. You can think of zig’s comptime as partial evaluation. Zig doesnt have a runtime type reflection system, but with comptime it makes it feel like you do.