왜 TOML이 아닌가요?

7581 단어 tomlprogramming
# this is some TOML

name = 'TOML'

[created-by]
name = 'Tom Preston-Werner'
dob = 1979-05-27T07:32:00-08:00


TOML은 "개선된"INI file처럼 설계된 구성 파일 형식입니다.

처음에 TOML은 간단하고 읽을 수 있는 파일 형식처럼 보입니다. 작고 간단한 파일에 자주 사용하지 않는다면 괜찮습니다.

그러나 더 많이 사용할수록 TOML의 결함이 보이기 시작할 것입니다.

PyTOML의 창시자인 Martin Vejnar도 똑같은 말을 했습니다. 그는 처음에 TOML에 대한 열정으로 파서를 구축했지만 결국 포기했습니다.

TOML is a bad file format. It looks good at first glance, and for really really trivial things it is probably good. But once I started using it and the configuration schema became more complex, I found the syntax ugly and hard to read.



그렇다면 TOML의 문제점은 무엇입니까?

1. 장황하다



이것은 yaml 문서입니다:

json:
  - rigid
  - better for data interchange
yaml: 
  - slim and flexible
  - better for configuration
object:
  key: value
  array:
      - null_value:
      - boolean: true
      - integer: 1
      - alias: &example aliases are like variables
      - alias: *example
paragraph: >
   Blank lines denote

   paragraph breaks
alias: &foo
  bar: baz
alias_reuse: *foo


다음은 TOML에서도 마찬가지입니다.

json = [
  "rigid",
  "better for data interchange"
]

yaml = [
  "slim and flexible",
  "better for configuration"
]

paragraph = """
Blank lines denote
paragraph breaks
"""

[object]
key = "value"

  [[object.array]]

  [[object.array]]
  boolean = true

  [[object.array]]
  integer = 1

  [[object.array]]
  alias = "aliases are like variables"

  [[object.array]]
  alias = "aliases are like variables"

[alias]
bar = "baz"

[alias_reuse]
bar = "baz"


첫 번째 YAML 예제는 368자입니다. 두 번째는 455자입니다. 약 100자 정도 더 입력해야 합니다. TOML은 인간 친화적인 언어가 없애려고 하는 것, 즉 장황한 구문, 인용 문자열의 필요성 등을 다시 소개합니다.

이유는 분명합니다.
  • 배열이 있을 때 키를 계속해서 반복해야 합니다. ( [[object.array]] )
  • TOML을 지배하는 대괄호 및 따옴표와 같은 추가 구문이 많이 있습니다.
  • 별칭 시스템이 없습니다.

  • 프로그램을 더 작게 만들고 DRYer를 사용하면 버그 수가 크게 줄어듭니다. 구성 파일에도 동일하게 적용될 수 있습니다.

    2. TOML은 파서를 위해 설계된 것처럼 보입니다.



    TOML의 계층 구조는 . s에 의해 결정됩니다. 이것은 파서가 이해하기에 충분히 간단하지만 우리에게는 어렵습니다.

    그래서 많은 사람들이 이 스타일을 채택했습니다.

    [markup]
      [markup.tableOfContents]
        endLevel = 8
        startLevel = 1
      [markup.highlight]
        style = "solarized-dark"
    


    이렇게 하면 더 쉽게 이해할 수 있지만 점(및 대괄호)을 제거하고 들여쓰기만 사용할 수 있다면 훨씬 더 좋을 것입니다. 이것이 내가 파이썬 구문을 좋아하는 이유입니다.

    들여쓰기만 사용하는 것이 좋은 생각인지 여부에 대해서는 여전히 논쟁이 있지만 일반적으로 여기에서 논의한 바와 같이StackExchange question

    3. TOML에는 기능이 너무 많습니다.



    TOML의 작성자criticizes YAML은 너무 많은 기능을 가지고 있기 때문에 동일한 작업을 수행합니다. 아이러니하다.

    예를 들어 TOML에는 일등석 날짜가 있습니다. 일정 시간 동안 프로그래밍을 해 왔다면 날짜 및 시간과 관련된 문제를 알고 있을 것입니다(기침 순간 기침).

    제 생각에는 문자열, 숫자, 부울, 배열, 개체의 5가지 유형만 있어야 합니다. 이것은 JSON이 취한 접근 방식이며 좋은 결정입니다.

    4. 구문 입력



    이것을 보십시오:

    str = "string"
    num = 42
    


    TOML은 사용자가 사물의 유형을 결정할 수 있도록 합니다. 그러나 대부분의 경우 클라이언트가 어떤 유형을 가져야 하는지를 결정해야 하므로 이는 올바르지 않습니다. 유형이 올바르지 않으면 강제 변환되거나 오류가 발생해야 합니다.

    4. TOML의 규칙은 그렇게 명확하지 않습니다.



    대부분의 TOML은 분명하지만 전부는 아닙니다.

    예를 들어, [[syntax]]는 혼란스럽습니다. 주변에 추가[object] 쌍이 있는 []처럼 보이지만 배열을 나타내는 데 사용됩니다.


    제가 놓친 포인트가 있다고 생각하거나(많이!) 제가 작성한 포인트에 동의하지 않는 경우 댓글을 남겨주세요!

    나는 실제로 더 많은 요점을 말해야 하며 다른 날 더 긴 기사를 쓸 것입니다. 계속 지켜봐 주세요!

    게시물이 마음에 들면 팔로우하거나 더 멋진 게시물과 팁을 확인하세요!

    좋은 웹페이지 즐겨찾기