• NewPerspective@lemmy.world
    link
    fedilink
    arrow-up
    20
    arrow-down
    3
    ·
    9 months ago

    TOML and YAML both have the problem that if you receive an incomplete document, there’s a decent chance you can’t tell. JSON doesn’t have that because of the closing curly.

    • AMDmi3@lemmy.world
      link
      fedilink
      arrow-up
      30
      arrow-down
      3
      ·
      9 months ago

      That’s not a problem of a format and should be handled by transport or storage.

      • Turun@feddit.de
        link
        fedilink
        arrow-up
        7
        arrow-down
        3
        ·
        9 months ago

        It very much is an aspect of the format. You may deem it unimportant, but it’s a feature that is missing from toml and yaml.

        • AMDmi3@lemmy.world
          link
          fedilink
          arrow-up
          5
          arrow-down
          1
          ·
          edit-2
          9 months ago

          It’s not a responsibly of the format, so, at most, it’s a mere side effect. In any practical process which could result with truncated data, even if it handles data with such property, it should be wrapped in a container which includes length. At the very least, it would allow to trace the source of truncation, e.g. was the data originally truncated, or was it truncated in the process, and change the format without shooting in oneselves foot. And the generating side should always provide success flag which should be properly handled, since it may produce syntactically correct, but semantically invalid data. Such as checking exit code of process which generates json/yaml in question

      • NewPerspective@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        9 months ago

        What about processes that terminate before writing the whole thing? You can’t protect against everything. Blame other processes all you want but the language spec allows for confusion.

        • AMDmi3@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          9 months ago

          You just check the exit code, no? The other process may fail while generating syntactically correct data too, regardless of format.

    • suy
      link
      fedilink
      arrow-up
      6
      ·
      9 months ago

      Doesn’t YAML have a (seldom used) feature of a start and end of document marker? The “YAML frontmatter” that a few markdown documents have, uses this.

    • EmergMemeHologram@startrek.website
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      9 months ago

      On the other hand, I hate that with JSON you can only store one document per file.

      Some programs allow you to omit the outside braces, others require it.

      But I do hate toml, and I don’t much like yaml either (why are there like 8 whitespace permutations?!)

  • brettvitaz
    link
    fedilink
    English
    arrow-up
    11
    arrow-down
    2
    ·
    edit-2
    9 months ago

    Every time I have reached for TOML I have ended up using JSON. The first reason is that Python standard library can read but not write TOML, which is generally useless for me. The second reason is TOML does not add any benefit over JSON. It’s not that much easier to read and IMO JSON is easier to write by hand because the syntax rules are completely obvious.

    • Eager Eagle@lemmy.world
      link
      fedilink
      English
      arrow-up
      19
      ·
      9 months ago

      TOML is mainly for humans to write, certainly not a good choice if you’re programmatically writing files - comments and formatting would be lost.

      • Flipper@feddit.de
        link
        fedilink
        arrow-up
        6
        ·
        9 months ago

        It all depends on the library you use. Rust has you covered with toml_edit. It is what is used for all the cargo commands editing the Cargo.toml file.

      • brettvitaz
        link
        fedilink
        English
        arrow-up
        7
        arrow-down
        5
        ·
        edit-2
        9 months ago

        Agreed. Except that it’s not easier to write imo

            • spartanatreyu
              link
              fedilink
              arrow-up
              4
              arrow-down
              1
              ·
              9 months ago

              That doesn’t really work when you need two comments at the same level, since they’d both have the same key

          • brettvitaz
            link
            fedilink
            English
            arrow-up
            2
            arrow-down
            1
            ·
            9 months ago

            For settings files I always have an example file with sensible values filled in and along with descriptive keys that serves as reasonable documentation. If something is truly unknowable, I’ve probably done something wrong.

            • spartanatreyu
              link
              fedilink
              arrow-up
              2
              ·
              9 months ago

              How would you mark a flag in your json settings file as deprecated?

              • brettvitaz
                link
                fedilink
                English
                arrow-up
                1
                ·
                9 months ago

                In my opinion, the settings file isn’t where this information should be presented. I would put these notes in the release log and readme and example settings file. I have also written this information to logging during startup so a user knows what to do, or I write a migration that does the change automatically if that’s possible.

                This is only my opinion and you can use the comment method described like //“: “Deprecated” if desired.

        • suy
          link
          fedilink
          arrow-up
          6
          ·
          9 months ago

          The very first moment that I had to use JSON as a configuration format, and I was desperate to find a way to make a long string into a JSON field. JSON is great for many things, but it’s not good at all for a configuration format where you need users to make it pretty, and need features like comments or multi-line strings (because you don’t want to fix a merge conflict in a 400 character-wide line).

  • xmunk@sh.itjust.works
    link
    fedilink
    arrow-up
    9
    arrow-down
    1
    ·
    edit-2
    9 months ago

    I really don’t understand why people still insist on prohibiting trailing commas anywhere. The syntax is interesting but it looks like defining an array of objects would be needlessly difficult. I think the double square bracket syntax is far too easy to confuse.

  • QuazarOmega@lemy.lol
    link
    fedilink
    arrow-up
    3
    ·
    9 months ago

    I like the syntax so much, but I’m so missing variables like the ones in ConfigParser’s .ini format, I wish there was a good format where they’re actually standard

  • mrh@mander.xyz
    link
    fedilink
    English
    arrow-up
    1
    ·
    9 months ago

    I’ll never understand why we don’t just use s-expressions.

      • gornius@lemmy.world
        link
        fedilink
        arrow-up
        11
        arrow-down
        5
        ·
        edit-2
        9 months ago

        What?

        It’s simple and readable. You literally put somebody that has never coded in their life, show them the YAML file and they will probably get it. Worked both with my boss and my girlfriend.

        In Toml there are too many ways to do the same thing, which I don’t like. Also unless you know it deeply, you have no idea how the underlying data structure is going to look.

          • BarrierWithAshes@kbin.social
            link
            fedilink
            arrow-up
            10
            arrow-down
            4
            ·
            9 months ago

            Wow. I’ve never used yaml or even looked at it but damn that is horrid. Why do people even use this? JSON and XML are so better.

            • snoweMA
              link
              fedilink
              arrow-up
              12
              arrow-down
              4
              ·
              9 months ago

              Because no one ever uses those. Literally > and | are the only ones I’ve ever seen in over a decade and you will never need to worry about the differences between the two.

              XML as a configuration language is terrible. Yaml gets the point across in an easily readable way, which is exactly the point. Same for JSON except JSON you can’t even use comments (you need json5 or one of the numerous other alternatives to get those).

            • Eager Eagle@lemmy.world
              link
              fedilink
              English
              arrow-up
              3
              arrow-down
              1
              ·
              edit-2
              9 months ago

              It’s really unfortunate the devops world chose such a hot mess of a format. Extending JSON with comments would be a dumb choice and still do a better job for most config files.

              noyaml.com

      • matcha_addict@lemy.lol
        link
        fedilink
        arrow-up
        5
        ·
        9 months ago

        Yaml is already pretty popular, so I don’t think 927 applies here. It’s actually more common in newer projects than toml.

        Which begs the question, should I go with the flow or is there good reason to go with toml?

    • Lmaydev
      link
      fedilink
      arrow-up
      4
      ·
      9 months ago

      Significant whitespace is the devil’s play thing.