Oops, I chopped off the end:


Special value   #!any-plain-symbol
Special type    #any-plain-symbol{exprs}

These are good on human readability and simplicity, but not so good for stability.  Are they really safe to ignore if you don't understand them?  (I wish ASN.1 had such a must-understand flag.)  In practice, people will use these to refer to concepts that other programmers don't get and will misunderstand or misuse.  Worse, one group may use #hash and another #dict, and who will know that they are the same concept?  As mentioned above, when a JSON reader or writer is finished, it's *finished*, and that's a great thing.  A list whose first element is a meta-symbol like $hash should be good enough; if you don't expect a list in a particular place, you blow up at the semantic level rather than in the parser.  A registry would then just be a matter of convenience ("is there a usual way to represent this?") rather than a necessity.

However, I think JSON has shown that dictionaries are important enough that they should be first-class.  I currently recommend {key value ...}.

Line comments should be provided: they are one of the things often asked for in JSON.