The most important aspect of a system programming language, besides performance, is the readability of the code.
It will always be more difficult to read (and understand) a program than to write it, so, unless this is some throw away code, ease of reading should be the priority.
Unfortunately, the speed/ease of writing is often used instead.
Ease of reading means linear, boring, plain English with minimal use of arcane symbols or regex-like expressions.
In this regard, meta-programming is very often counter-productive, as it can introduce new idioms and constructs in the language that have to be understood before reading the program itself.
Overuse of C macros or C++ templates comes to mind, but I think that lack of readability was also a huge problem for LISP and Forth.
It will always be more difficult to read (and understand) a program than to write it, so, unless this is some throw away code, ease of reading should be the priority.
Unfortunately, the speed/ease of writing is often used instead.
Ease of reading means linear, boring, plain English with minimal use of arcane symbols or regex-like expressions.
In this regard, meta-programming is very often counter-productive, as it can introduce new idioms and constructs in the language that have to be understood before reading the program itself.
Overuse of C macros or C++ templates comes to mind, but I think that lack of readability was also a huge problem for LISP and Forth.