2 ms·
No. The fact that a feature is Turing complete doesn't make the language unparseable. C is Turing complete, but you don't need to run the program to parse C.
by kivikakk 13y ago
No. The fact that a feature is Turing complete doesn't make the language unparseable.
C is Turing complete, but you don't need to run the program to parse C. Likewise for parsing C++ templates.
- 0x0 13y agoBut is parsing C turing-complete? Because that's what I took away from reading about C++ templates - the turing-completeness happens at the parsing/preprocessing stage, before the compiler's code generator even starts translating. Was I wrong? Wouldn't a smart IDE that resolves types (for example for tab completion or type hints), looking at the Factorial<N> thing, have to solve for the value for Factorial<4>?
- kivikakk 13y agoNo. (You need parse all includes to know typedefs, but that's it.) C++ is awkward for a different reason, but there's nothing unparseable about it. Resolving types for tab completion/hinting is getting closer to static analysis (at least, with C++ it is), but parsing is well and truly done by that stage. There's nothing about template<4> that can't be parsed, and nothing about the templates or instantiations thereof causes the syntax to be interpreted differently; this is probably the requirement for a parser to be Turing complete. Perl is actually unparseable without execution: you can modify the allowed syntax mid-parse, based on some condition known only at runtime. Nothing about a template argument (for example) in some call causes a later template definition to be interpreted according to different syntax rules.
- 0x0 13y agoMakes perfect sense, and I see they're not the same now. Thanks for the explanation! :)
- ExpiredLink 13y ago> C++ is awkward for a different reason, but there's nothing unparseable about it. Some corner cases in C++ are ambiguous. Those are 'resolved' by guessing what may be more suitable in the current context.