Русский

Инструменты разработчика · Конвертеры синтаксиса

Почему существует TOML: цели проектирования Cargo.toml и pyproject.toml

· Фон

Томл форматы данных рабочий процесс разработчика

Таблица TOML с типизированными значениями, отображаемыми в простой объект, а комментарии остаются.
Оригинальная векторная иллюстрация ToolAcre

TOML был создан в 2013 как реакция как на строгость JSON, так и на двусмысленность YAML. В этом посте объясняются заявленные цели проектирования, принятые решения и почему Rust и Python стандартизировали его для конфигурации проекта.

Три формата конфигов в одном репозитории — JSON для редактора, YAML для CI, TOML для сборки и вопрос, почему существует третий

Репозиторий может использовать JSON, YAML и TOML для разных поверхностей конфигурации. ToolAcre не может объяснить выбор каждого проекта, но преобразование конкретизирует структурные различия: TOML начинается как корневая таблица, использует заголовки и пунктирные пути для вложения и переносит временные значения, недоступные в JSON.

Загрузите пример, а не спорьте по внешнему виду. Вложенные таблицы становятся объектами, таблицы в двойных скобках — массивами, а комментарии исчезают, когда значения входят в JSON. Эти наблюдаемые границы более действенны, чем общее утверждение о том, что один синтаксис по своей сути лучше.

Цели дизайна — минимальная, очевидная семантика, легко читаемая и формат, который однозначно сопоставляется с хеш-таблицей.

Поставляемый анализатор предоставляет очевидную семантику таблицы: заголовки — это пути, назначения принадлежат активной таблице, а скалярные токены имеют определенные типы TOML. Строки не становятся типизированными только потому, что их содержимое выглядит как даты; фактический темпоральный синтаксис создает объекты даты, которые ToolAcre намеренно нормализует.

В репозитории не указаны создатели формата, даты или заявленная философия, поэтому эта статья избегает представления запомнившейся истории как факта. Он сообщает о поведении, проверенном в smol-toml и собственном слое нормализации конвертера.

Наблюдаемые конструктивные свойства в поставляемом анализаторе без необоснованных заявлений о происхождении.

TOML не имеет значения NULL, а его корень документа не может быть массивом или скаляром. В этом сопоставлении не предусмотрены привязки или псевдонимы в стиле YAML. Комментарии существуют в созданном TOML, но не сохраняются анализатором значений и поэтому не могут пережить преобразование через JSON или YAML.

Пустые значения без кавычек соответствуют грамматике TOML, а не выбору схемы YAML. Анализатор либо принимает введенное значение, либо сообщает о недопустимом TOML с информацией о позиции. ToolAcre не добавляет неявный строковый режим для неверных присвоений.

Что поддерживаемая модель стоимости исключает или обрабатывает по-другому

Модель включает в себя строки, целые числа со знаком, числа с плавающей запятой, логические значения, четыре временных типа, массивы и таблицы. Массивы таблиц выражают повторяющиеся записи объектов. Большие целые числа со знаком, превышающие 2^53, при преобразовании становятся десятичными строками, поэтому JavaScript не округляет их автоматически.

Временные значения становятся ориентированным на источник текстом для смещения даты и времени, местной даты и времени, местной даты или местного времени. Предупреждение сохраняет вид в прозаическом виде, но JSON получает только строку. Поэтому обратное преобразование цитирует его и теряет собственный тип TOML.

Принятие — Груз из самых ранних дней Rust, PEP 518 выбор pyproject.toml и спецификация 1.0.0 в 2021

Принятие Cargo и pyproject является историческим и экосистемным заявлением, требующим источников, отсутствующих в репозитории конвертера. Здесь они намеренно опущены. Путь или имя файла не являются свидетельством хронологии, версии спецификации или решения по стандартам.

Операционный вопрос заключается в том, читает ли целевой инструмент TOML и какие таблицы он ожидает. Проверьте текущую документацию этого инструмента. Преобразователи синтаксиса знают синтаксис и сопоставление значений, а не контракты конфигурации менеджера пакетов.

История внедрения экосистемы опускается без источников репозитория.

Глубокую вложенность сложнее сканировать, поскольку контекст таблицы сохраняется во всех строках, а большие массивы таблиц распределяют один логический список по повторяющимся заголовкам. JSON делает всю иерархию явной, но добавляет фигурные скобки и кавычки. Ни одно из представлений не устраняет сложность базовой конфигурации.

Синтаксический анализатор ограничивает вложенность 100 и длину исходного кода двумя миллионами символов. Это границы отказа, а не утверждения об идеальном размере конфигурации или универсальных TOML ограничениях.

Что здесь не распространяется — выбор парсера TOML на каждом языке и доступность только для чтения некоторых реализаций стандартной библиотеки.

Выбор парсера на каждом языке выходит за рамки, как и возможности записи стандартной библиотеки. ToolAcre динамически использует smol-toml и оборачивает свои ошибки. Другая реализация может форматировать допустимый вывод по-другому или предоставлять другой API, представляя те же данные.

Используйте кросс-инструменты для временных значений, больших целых чисел, массивов и ключей с точками, когда важна совместимость. Файл, принятый здесь, не принимается автоматически каждым потребителем TOML.

Вывод: TOML считается форматом конфигурации — и как панель конвертеров синтаксиса позволяет вам видеть любой файл JSON или YAML в этой форме.

TOML имеет определенное мнение: корень таблицы, явные типизированные значения, собственные временные типы и отсутствие нулевых значений. Конверсия раскрывает эти варианты и их несовместимость с целями в форме JSON без необходимости мифа о происхождении.

Используйте панель для осмотра дерева и выявления предупреждений. Затем вернитесь к схеме назначения и создайте макет таблицы, который будут поддерживать люди. Конвертер предоставляет данные о значениях, а не вынесение вердикта о предпочтениях формата.

Та же дисциплина применяется, когда TOML является лишь промежуточным представлением. Сохраняйте исходный код, сравнивайте нормализованные значения и отмечайте каждое временное или целое преобразование, прежде чем оценивать читаемость. Компактный макет таблицы по-прежнему может скрывать измененный тип, тогда как подробный массив таблиц может быть семантически точным. Выбор формата должен соответствовать контракту на конфигурацию и рабочему процессу обслуживания, а не визуальной аккуратности одного сгенерированного образца.