<div dir="ltr"><div>Hi</div><div><br></div><div>Summary: Perhaps we can learn something from C++ that will improve Latex error messages. And we see the phrase "absolutely useless barf".<br></div><div><br></div><div>It is I think well known that errors in TeX documents are detected late rather than early. For example</div><div>    \goodmacro{this and that and \undefined}</div><div>will produce an error only AFTER \goodmacro has started executing. Worse, if this line of code might be guarded by a conditional then not even the \goodmacro in it is invoked. Perhaps it takes two parameters!<br></div><div><br></div><div>With complex macro packages such as Latex this can result in error messages that are not easily comprehensible to many ordinary users. This also causes issues regarding testing code. For example a typo in the name of an internal macro remains undetected until a test (or a user) tries to execute the misnamed command.</div><div><br></div><div>In fairness, Python again has few compile time errors. It does have syntax errors, which are compile time. But Python's NameErrror is a run-time error.</div><div><br></div><div>So why mention C++ in this context. Well, a recent discussion on the Linux Kernel Mailing List produced the wonderful phrase "absolutely useless barf as error messages", which is surely what many authors feel when they're suddenly dropped into the task of debugging software, or more exactly erroneous input.</div><div><br></div><div>In 2014 it was proposed that the Linux kernel support modern C++ code. Not much happened until this week. Peter Anvin wrote that C++14 was the first version that supported "reasonable metaprogramming", but that C++20 was a "game changer" in that it "adds concepts, which makes it possible to actually get reasonable errors".</div><div><br></div><div>So there we are. The C++ templates are a form of metaprogramming. The addition of concepts, whatever they are, turns "absolutely useless barf" into "reasonable errors". This post is based on:</div><div><a href="https://www.phoronix.com/news/CPP-Linux-Kernel-2024-Discuss">https://www.phoronix.com/news/CPP-Linux-Kernel-2024-Discuss</a></div><div><br></div><div>Perhaps this provides a framework for improving Latex error messages (without introducing backwards incompatibilities). According to wikipedia, concepts are named boolean predicates on template parameters, which are evaluated AT COMPILE TIME (my emphasis). This makes them somewhat similar to Python's type hints. And as far I know, Latex3 naming conventions also use boolean predicates, which are however not evaluated at compile time. Here are some links:<br></div><div><a href="https://en.wikipedia.org/wiki/Concepts_(C++)">https://en.wikipedia.org/wiki/Concepts_(C++)</a></div><div><a href="https://mypy-lang.org/">https://mypy-lang.org/</a></div><div><br></div><div>Please comment on this if you have an opinion. My thoughts on this are only at an initial stage.<br></div><div><br></div><div>with kind regards</div><div><br></div><div>Jonathan<br></div></div>