4 ms·
> There are a few really amazing things which have been achieved in C++ like fmt, a compile time checked, userspace library for arbitrarily formatting variadic
by Yoric 1y ago
> There are a few really amazing things which have been achieved in C++ like fmt, a compile time checked, userspace library for arbitrarily formatting variadic generic parameters.
Anecdotal, but that's hardly unique to C++. So even if C++ were to disappear overnight (which we all agree won't happen), this wouldn't be a burning-library-of-Alexandria moment.
- tialaramex 1y agoWell. What other examples of this feat are you thinking of? To me the things which come to mind are either compiler magic (e.g. C printf) or they rely on RTTI (e.g. Odin and similar C-like languages) and neither of those is what fmt does, they're "cheating" in some sense that actually matters.
- int_19h 1y agohttps://doc.rust-lang.org/std/macro.format.html https://doc.rust-lang.org/std/macro.format.html https://zig.guide/standard-library/formatting/ https://zig.guide/standard-library/formatting/
- notmywalrus 1y agoRust is an example of "compiler magic" in this case. You're right about Zig, and reading the source [1] I'm still kind of impressed how unified they made comptime / runtime. [1]: https://github.com/ziglang/zig/blob/32a1aabff78234b428234189ee1093fb65f85fa3/lib/std/Io/Writer.zig#L536 https://github.com/ziglang/zig/blob/32a1aabff78234b428234189...
- int_19h 1y ago"Compiler magic" is generally used to describe things that are built into the compiler; I don't see why macros would qualify. And if they do, then why wouldn't template metaprogramming?
- Yoric 1y agoI co-implemented this in OCaml ~20 years ago, using no compiler magic (it did use a macro). Pretty sure that I've seen the equivalent in Haskell, too, and in variants of Scheme. Zig has it, too. And while, as you mention, the Rust implementation does use compiler magic, I'm pretty sure that it could be implemented as a macro, just more slowly. etc.
- Yoric 1y ago(sorry, it wasn't you who mentioned it, but it was a good remark nevertheless :) )