1. If indentation is significant and required, dotted notation should be optional:
2. Support include files. With #1 implemented, includes would be extremely powerful and flexible. Since indentation is required, no special syntax is needed to relatively position the included files. And without requiring dotted notation in keys, include files can be reused in a configuration (such as common settings in the [servers] section of the example).
I personally never jumped on YAML or JSON. I liked that they weren't XML, but they each felt like XML++ too much for me. There was still too much, I don't know, weirdness/typing/oops! Don't get me wrong, I think they were better than XML, but only marginally. It would be nice to see more of a phase change type of approach. I'd LOVE to see something like this (or something else) that involves much less typing/special characters/etc than YAML and JSON.
value = "example # no that's not a comment" # but here's one
As far as I can see both the C# and Python parsers don't handle this kind of comment correctly at the moment, and probably many implementations will have troubles with that. They should just drop this option in my opinion.
>>> value = "example # no that's not a comment" # but here's one
"example # no that's not a comment"
It seems there are now several other Python parsers, so some of them are probably getting it right.
Personally, of course, I think we should just use a slightly modified version of s-exprs which would be easier to parse.
where value can be an atom, list of atoms or a list of keyword value pairs. Comments could follow the Lisp convention and start with semi-colon and end with newline. Only 5 characters to escape, namely, '(', ')', ':', ' ' and ';'.
Can you tell at a glance what is wrong with this YAML snippet:
I had to spend half an hour debugging a bizarre side effect of that parsing to pinpoint the problem.
Edit, holy fuck all these are booleans:
kittyBreeds = ["Himalayan"
,"Cornish Rex" //rawr
//This is not a real cat! >:(
In other words, you know you're just gonna end up with this in your code after a few months:
kittyBreeds = ["Himalayan",
and not only is it now even worse for changing lines (correcting it and adding another will be -1+3 instead of just -1+2, the optimal +1 a distant memory), but it's just plain a mess and probably people don't know why they need to do it.
But I think the "square bracket list" things only ever occur in value position, and the headers only ever occur in root position, so it's not that hard.