34 ms·
I agree with all the points brought up in this article except for this curveball: > Turing complete configuration languages shepherd you into writing complex l
by eyegor 7y ago
I agree with all the points brought up in this article except for this curveball:
> Turing complete configuration languages shepherd you into writing complex logic with them
Everything discussed in this post is a consequence of language design or best practices. I don't think shoving complex logic into yaml files would be considered either. This is more a possibility as a result of Turing completeness, I don't think the language design has anything to do with it. All the other "shepherding" examples are clearly intentional choices by the language designers.
- taeric 7y agoIt is a funny choice of examples. I configure Emacs with script. And, while I certainly have some bitrot in my config, it is still way more manageable than any other config I have had to deal with.
- SkyMarshal 7y agoFwiw, Emacs is usually single-user, and self-selects users better able to understand and manage their own complexity.
- taeric 7y agoI view it as yet another thing I have to maintain. Show some frugality in how you do it. And recognize it is a yak.
- jdfellow 7y agoI think that the author of the article specifically speaking of configuration DSLs that were intended to be Turing-incomplete but somehow grew full Turing-completeness and therefore became bastard languages. YAML as a config DSL is sub-par (but I'll take it over JSON any day), and truly declarative, Turing-incomplete config languages are great, as is just using a fully-featured scripting language such as a Lisp or Python, but the middle-ground with a custom config language that is also Turing-complete is usually just bad. Not sure I have any examples of what that might be. Perhaps nginx? or apache? Lots of complex software have very complex config languages that might accidentally be Turing-complete, but only fools would actually use them like that.
- ekimekim 7y agoOften the turing completeness comes not from the config _format_ but from the semantics. A good example of this is Logstash config, where your config is an array of steps to apply, each of which can filter things in certain ways based on certain conditions, and before you know it you've used 100 lines to badly and buggily implement a 5-line script in a real language.
- fsloth 7y agoAlthough not obvious from the context, the writer of the article is the author of a build system (https://mesonbuild.com/ https://mesonbuild.com/) used in a bunch of large non-trivial high profile projects (https://mesonbuild.com/Users.html https://mesonbuild.com/Users.html) including systemd, Nautilus and so on. While I dislike proof-by-eminence the author has history as an original, recognized contributor in this space.