• renzev@lemmy.world
    cake
    link
    fedilink
    English
    arrow-up
    0
    ·
    10 days ago

    The complaints about yaml’s quirks (no evaluating to false, implicit strings, weird number formats, etc.) are valid in theory but I’ve never encountered them causing any real-life issues.

    • AnyOldName3@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      10 days ago

      no doesn’t become false, it becomes Norway, and when converted to a boolean, Norway is true. The reason’s because one on YAML’s native types is an ISO country code enum, and if you tell a compliant YAML implementation to load a file without giving it a schema, that type has higher priority than string. If you then call a function that converts from native type to string, it expands the country code to the country name, and a function that coerces to boolean makes country codes true.

      The problem’s easy to avoid, though. You can just specify a schema, or use a function that grabs a string/bool directly instead of going via the assumed type first.

      The real problem with YAML is how many implementations are a long way from being conformant, and load things differently to each other, but that situation’s been improving.

        • JackbyDev@programming.dev
          link
          fedilink
          English
          arrow-up
          0
          ·
          9 days ago

          I believe they’re getting themselves confused. no was false prior to YAML 1.2. This is known as the “Norway problem.”

      • JackbyDev@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        ·
        9 days ago

        Are you sure? I’ve always heard it the other way around and a quick search for "YAML norway’ gives this

        The reason to why this is problematic in some cases, is “The Norway Problem” YAML has: when you abbreviate Norway to its ISO 3166-1 ALPHA-2 form NO, YAML will return false when parsing it

        Also, YAML 1.2 (2009) changed the format of booleans to only be case insensitive true and false. “No” no longer is false if you’re parsing as a version 1.2 document.

        • AnyOldName3@lemmy.world
          link
          fedilink
          arrow-up
          0
          ·
          9 days ago

          Yeah, looks like I’d remembered it backwards. It’s still an easily solvable problem by not using a load everything as whatever type you feel like function.