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

What? That's precisely the reason why static languages would have a hard time with heterogeneous arrays. Hence the proposal I linked to in my first response.

Right. I really hope it gets merged!

Tuples and arrays are completely different. Clearly you don't work with staticly typed languages.

Currently working in LAMP on Scala stuff gives me a free pass away from this accusation! ☺

That said, as long as the aforementioned patch gets merged, the design of arrays allows [ [1], ["1"] ], which can't be optimized that well for statically typed languages.
It will also be hard for current implementations to update that requirement, when the patch is applied.

TOML doesn't have multiple encodings. It is only UTF-8.

The current spec
has the example of working around a file encoded in Latin-1.
I believe files encoded in non-UTF-8 should simply be rejected as soon as a character clearly isn't UTF-8; that's how I specified dotset.

Part of the problem with the spec is that it hasn't been formalized—nor does it provide an EBNF. It's still in informal English. Give it some time to breathe before criticizing it for being imprecise.

I wished it was at least as precise as the format I published after him…
and I hope that patch gets merged.

@BurntSushi
Copy link

Currently working in LAMP on Scala stuff gives me a free pass away from this accusation! ☺

Ah, nice. I've heard good thing about Scala, but I keep my distance from the JVM if I can help it...

That said, as long as the aforementioned patch gets merged, the design of arrays allows [ [1], ["1"] ], which can't be optimized that well for statically typed languages.

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. (The problem is the use of the word "homogeneous." Arrays in TOML are homogeneous now and they will be if my proposal accepted. The wording is poor. The real change is how arrays are typed. Lots of people are getting confused by this.)

It will also be hard for current implementations to update that requirement, when the patch is applied.

I've already done it for my parser. It took maybe an hour or two. And it was fun. :-)

The current spec has the example of working around a file encoded in Latin-1. I believe files encoded in non-UTF-8 should simply be rejected as soon as a character clearly isn't UTF-8; that's how I specified dotset.

Dang. That is unfortunate. I hope it is changed to UTF-8 only.

I wished it was at least as precise as the format I published after him…

I'm not sure how smart mojombo is, but I suspect he left the spec imprecise for a reason. He wasn't trying to impose his idea of what the spec should be, but rather, lay fertile ground for plenty of other sources of input while providing some general principles for future development of the spec. At least, that's my opinion based purely on speculation (and it's what I would've done if I had his celebrity status).

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.

@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