2 ms·
C++ templates are so overpowered. It has dependent types by accident.
by adamnemecek 8y ago
C++ templates are so overpowered. It has dependent types by accident.
- fjsolwmv 8y agoBy accident as in the creators didn't intend it but it was discovered later, or just not directly expressible in the language (so "by accident" is via anthropomorphism of the type language)?
- knome 8y agohttp://www.stroustrup.com/bs_faq.html#understand http://www.stroustrup.com/bs_faq.html#understand > I was very surprised when Jeremy Siek first showed my the compile-time if that later became std::conditional, but I had aimed for generalty (and gotten Turing completeness modulo translation limits). I opposed restrictions to C++ immediately when Erwin Unruh presented what is widly believed to be the first template metaprogram to the ISO Standards committee's evolution working group. To kill template-metaprogramming, all I would have had to do was to say nothing Discovered by users after being created as a side effect of the power of the template expansion defined by the committee, and then kept thereafter.
- Negitivefrags 8y agoI would say that you are misrepresenting the thing you are quoting. It was a side effect yes, but it’s not like a working compiler was released and a users found this. It was discovered during the design phase of templates by people involved in standardisation process. And it sounds like leaving it in was even a contentious point that others were against. So far from an accident, it was a feature that was extensively discussed and intentionally supported.
- earenndil 8y agoHonestly I wouldn't say overpowered so much as poorly designed. I don't think there's anything wrong with having a way to perform arbitrarily complex operations at compile time; in fact, ante[1] (and others) even have this as a selling point. The problem comes when you don't mean for this to happen and you're just trying to implement type erasure. 1: https://github.com/jfecher/ante https://github.com/jfecher/ante
- pietroglyph 8y agoAnte is super cool! I think the following passage neatly encapsulates the power of (thoughtful) compile-time extensiblity: > "Ante provides several different methods of memory management, including manual management. Don’t want to bother with any of it? Simply 'import GC' to use a garbage collector."
- earenndil 8y agoDo note that most of the language as specified isn't yet implemented yet. There's no GC nor is there (afaik) any form of memory management beyond malloc/free. Also pattern matching isn't there yet. However, development seems to be reasonably active so I'm sure those are in the pipeline.
- pjmlp 8y agoYes, the positive part is that while they might be clumsy from the point of view of Lisp macros or Idris, at least I get to use them at work without having to justify why the customer would need to migrate their tooling to another programming language. :)