Skip to content

Instantly share code, notes, and snippets.

@espadrine
Last active December 14, 2015 04:29
Show Gist options
  • Save espadrine/5028426 to your computer and use it in GitHub Desktop.
Save espadrine/5028426 to your computer and use it in GitHub Desktop.
Things I like / don't like about TOML

4 Things I Find Great About TOML

  • Arrays allow trailing commas!
  • Comments! (From a JSON perspective, that's huge!)
  • Dates are UTC!
  • Simple syntax, no semicolon / commas, no need to check for matching braces!

4 Things I Don't Like About TOML

inGlobal = true
[keygroup]
inKeyGroup = true
# Here, you can't add a key to the global hash!
  • You can't have mixed data in arrays unless they're both one level deep!

    So, it feels like arrays are typed, except that empty arrays are not.

key = [ [1], ["foo"], [] ]
  • You can't have hashes inside arrays!
# That really should be an array.
[dependancy1]
groupId    = "com.google.api-client"
artifactId = "google-api-client"
version    = "1.13.2-beta"

[dependancy2]
groupId    = "com.google.api-client"
artifactId = "google-api-client-servlet"
version    = "1.13.1-beta"
  • The specification is lacking!
    • A document in UTF-16 / Windows 1252 must change encoding to UTF-8 in each string!
    • What happens when the keygroup is the empty string?
    • Lots of (informally-specified) things you can't encode: keys with = in them, keygroups with ] in them… (The current spec allows = in keys by not forbidding it.) Which special characters are allowed in keys anyway?

Alternative: the Settings File Format.

@espadrine
Copy link
Author

Eh? I think the wording is off here. That array is allowed now. But if my proposal is accepted, then it won't be allowed.

Yes. What I meant is "Until the patch gets merged…"

Your format may be nicer, but alas, we plebians cannot release something and have the instant benefit of some level of adoption. And with a configuration file format, adoption is a big ingredient.

That's the trick, isn't it?
My format is a subset of YAML, so there already are parsers everywhere!
(Of course, having dotset-specific parsers is nicer and safer!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment