5 ms·
> Why are so few configuration languages not backed by a real language? In many cases, not having a full featured language is helpful as you have some addition
by Znafon 6y ago
> Why are so few configuration languages not backed by a real language?
In many cases, not having a full featured language is helpful as you have some additional guarantees that comes with a non Turing complete language like guaranteed completion.
In some cases though, you do need a full pledged programming language. For those cases, HashiCorp recently announced CDK support for Terraform: https://www.hashicorp.com/blog/cdk-for-terraform-enabling-python-and-typescript-support/ https://www.hashicorp.com/blog/cdk-for-terraform-enabling-py...
- default-kramer 6y agoCool, I hadn't seen CDK for Terraform before. But doesn't this support my point? If they had just used Typescript from the start, they wouldn't have to add Typescript support later. I suppose guaranteed completion matters if you are running untrusted code, but wouldn't sandboxing solve that? Are there any other guarantees that sandboxing wouldn't solve?
- Znafon 6y ago> I suppose guaranteed completion matters if you are running untrusted code, but wouldn't sandboxing solve that? Are there any other guarantees that sandboxing wouldn't solve? There is more benefits than just that, by restricting the possibilities you know there won't be unbounded loops, analysis and code review is easier (and infrastructure teams are often seriously lagging in this regard), it can be easier to maintain, update and test. In some cases, you can have a project where this is seriously limiting though because you have some very complex and specific thing you need to express. For this you can use CDK. I would say both approach are complementary, not exclusive. In my experience I would say nearly all infrastructure projects can be expressed as Terraform rather easily, but YMMV.
- zelphirkalt 6y agoYou can bring that argument, but only until you decide to use YAML, instead of something declarative and simple like JSON. Once you switch to something as powerful as YAML, you might as well reach for a real programming language.
- tyfon 6y agoAlso, YAML is kind of a hack. Living in Norway I've had quite a few of these situations where no is parsed to False [1]. [1] https://hitchdev.com/strictyaml/why/implicit-typing-removed/ https://hitchdev.com/strictyaml/why/implicit-typing-removed/
- ithkuil 6y agoIt has been fixed since yaml 1.2 That said, yeah :facepalm:
- ithkuil 6y ago> powerful as yaml Can you make an example of the power of yaml that makes it more like a programming language (in particular vs JSON)?
- riffraff 6y agonot OP but: tags (custom data types), more builtin data types (dates etc), more syntax variations (heredocuments, multiple ways to write a string,a boolean, etc), comments, references+aliases. The language is vast, and most people use it without knowing it. I love YAML, but I wish there was a "strict&sane yaml subset".
- ithkuil 6y agoAll those are good examples of yaml complexity but none of that is anywhere near what even a simple programming language can unleash (variables, loops, functions, recursion etc)
- deleted 6y ago[deleted]
- Znafon 6y agoYou can do recursion in YAML, and it ends badly: https://en.wikipedia.org/wiki/Billion_laughs_attack#Variations https://en.wikipedia.org/wiki/Billion_laughs_attack#Variatio...
- rectang 6y agoCan a config mechanism where shell commands are embedded as strings still be considered as offering these additional guarantees? Perhaps certain things are easier: it's easier to parse, to isolate the code portions, and to read data portions. But then validating what's inside those code portions is a challenge. It seems like there's an opportunity for a programming language purpose built for the task of configuration. Its chief feature would be the ability to provide a lot of information when read in "inert data" mode, yet also provide full programming language power when read in "run" mode. ETA: Perhaps embed Python inside something similar to YAML, and support active code via a "lambda" type. Use indentation for delimiting. project: "Foo" version: "1.0.1" email: "me@example.com" load: lambda file_path: pass