Another invisible problem with embedded-DSLs (like maybe building within Yaml) is the inability to break the host language’s constraint, limiting utility of the desired DSL
But the only functional constraint is just how it looks when it is serialized. You can write any language’s AST to yaml; it will look like yaml, but the representation at least allows for Turing complete behavior.
I do have issues with how yaml deals with strings, but it’s the best popular format I think I can use, and seems appropriate for developers.
You can write any language's AST to YAML, but not the other way around.
YAML is extremely limited and a very bad choice for DSLs. CircleCI got it wrong. Their configuration files are extremely verbose and hard to abstract over - you have to use orbs and those come with a lot a of flaws. I'm a user for many years now and it's diminishing my productivity.
The solution isn't so hard - even Jenkins got it right. Use a regular programming language (maybe the one of your choice or one that is well suited for DSLs like Scala or Clojure) and then just expect your developers to build a datastructure in that language. This datastructure is your DSL.
Your users get a lot of stuff for free, including fully fledged code-completion and compile-time safety (if you use a statically typed language). It will also be easy to abstract over commong logic and even share it if the language has any kind of module/library system which almost every language has.
swid|3 years ago
I do have issues with how yaml deals with strings, but it’s the best popular format I think I can use, and seems appropriate for developers.
valenterry|3 years ago
YAML is extremely limited and a very bad choice for DSLs. CircleCI got it wrong. Their configuration files are extremely verbose and hard to abstract over - you have to use orbs and those come with a lot a of flaws. I'm a user for many years now and it's diminishing my productivity.
The solution isn't so hard - even Jenkins got it right. Use a regular programming language (maybe the one of your choice or one that is well suited for DSLs like Scala or Clojure) and then just expect your developers to build a datastructure in that language. This datastructure is your DSL.
Your users get a lot of stuff for free, including fully fledged code-completion and compile-time safety (if you use a statically typed language). It will also be easy to abstract over commong logic and even share it if the language has any kind of module/library system which almost every language has.