Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

But comptime is kind of LISP's unique feature, it's just called macros.

EDIT: In fairness, Zig's presentation is pretty likeable. You can do a comptime expression pretty trivially in LISP, a comptime parameter or block would require actual effort.



No. There is a real difference between staged computation of the type that zig has and macros in common lisp, scheme/rust have (so much for lisp's uniqueness BTW). In common lisp you can do completely arbitrary computation at compile- (or read-)time in zig you cannot and crucially you are also not responsible for manually ordering the "stages". E.g. in common lisp you have use eval-when to make sure that stuff is available at the right phase, whereas zig works out the dependency for you.


Can you please provide an example of Zig "working out the dependency"? I'm struggling to make sense of your comment.


I could write a concrete example that will work in zig and fail in common lisp, but maybe this link is enough?

https://ziglang.org/#Order-independent-top-level-declaration...


Oh, so is the point that in Zig, functions with comptime parameters are more or less identical to regular functions in that regard?


Exactly. You can also use non-comptime functions in comptime, if it avoids certain types of stateful behaviour.


An example of this in the Zig math tests, where it tests calling the same function at both comptime and runtime: https://github.com/ziglang/zig/blob/33c4ad7f3a79aad5d7ea481a...


In common-lisp you could do something equivalent, but you'd have to wrap the definitions you want to be able at both compile and and run time in eval-when.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: