Disclaimer: was borgcfg owner 2016-2019.
But GCL made it so whatever variable was actually being used by borgcfg was obscured by layers upon layers of imports.
Unfortunately there was no formal spec of the GCL language, so the new impl was based IIRC on reverse engineering the spec from the first implementation of the interpreter. It turned out our configs hit several cases where the original behaviour was either unsound (and thus the new impl sacrificed backwards compat) or we hit a bug in the new impl.
The main problem with the language (as opposed as issues with the implementations) was that finding the root of those behaviour differences was very hard. It was very hard to follow where the variables came from. The GCL scoping rules (and lazy evaluation) were indeed very unfriendly for debugging.
This was an extreme case of a pain that was felt on a daily basis by a lot of people I've been talking to.
A few executives are not friendly to borgcfg. Their agenda, appeared to me, has been to deprive it's resources so it can die from rotting. That's bad engineering and totally unnecessary. A healthy BCL/borgcfg will die easier, because they'll allow an easier path migrating to something new.
FWIW I'm the current maintainer of https://github.com/bitnami/kubecfg whose name is shameless xoogler bait.
1: https://github.com/cuelang/cue/blob/master/doc/tutorial/basi...
This is what Facebook does: Python emitting JSON.
Is it true that there are dozens of internal language and DSLs? Why does G have so many?
2. find a use case where you want a config with ~700 lines, most of it just a repeated variant of something
3. add more fields to your config to reduce the verbosity
4. realize that your configs are now obscenely complex, and build a limited-purpose DSL
5. five teams now use your limited-purpose DSL and make more feature requests
6. cry because you now maintain a DSL
7. ???
8. promo for cross-team impact