Когда не следует использовать YAML
Удобство ручного ввода не всегда оправдывает сложность типов и загрузчика.
Цена выразительности
YAML позволяет записывать вложенные структуры без большого числа скобок, добавлять комментарии и использовать ссылки. Это удобно для конфигурации, которую регулярно читает человек. Но больше возможностей означает больше правил, которые должны одинаково понимать редактор, загрузчик и проверяющая программа. Если документ генерируется автоматически и почти не редактируется вручную, часть этой выразительности может вообще не давать пользы.
Для простого обмена объектами JSON часто делает ошибки заметнее благодаря более узкой грамматике. Для небольшой конфигурации TOML даёт комментарии и явные базовые типы без полного набора конструкций YAML. Это не соревнование форматов: задача состоит в выборе минимального набора возможностей, который сохраняет нужную модель и поддерживается конкретными инструментами получателя.
Неявные типы
Разные версии YAML и схемы разрешения типов могут по-разному трактовать похожие скаляры. Значение, которое автор считал строкой, загрузчик способен превратить в логическое значение, дату или число. Кавычки помогают выразить намерение, но не заменяют согласования версии и проверки схемы. Особенно осторожно обращайтесь с идентификаторами, ведущими нулями и словами, имеющими специальное значение в используемом диалекте.
При переносе между библиотеками полезно сравнить не текст, а типы и значения после разбора. Повторные ключи должны отклоняться, если контракт требует однозначности. Молчаливый выбор последнего значения скрывает опечатку и мешает проверке конфигурации. Не предполагайте, что безопасный загрузчик автоматически проверяет все предметные ограничения или одинаково обрабатывает дубликаты.
Доверие к загрузчику
Некоторые библиотеки поддерживают специальные теги и конструирование объектов языка. Для недоверенного документа используйте режим, который не создаёт произвольные объекты и не вызывает пользовательские конструкторы. Однако слово safe в названии функции не является полным контрактом ограничений ресурсов. Глубокая вложенность, большие значения и сложные ссылки требуют лимитов времени, памяти и размера входа.
Если задача — принять короткий внешний JSON от автоматического процесса, добавление YAML обычно расширяет поверхность неоднозначности без необходимости. В этом проекте будущие черновики должны приходить только как JSON фиксированной структуры. Они не являются программой, не выбирают путь записи и не могут добавлять неизвестные поля. Принятие формата — часть ограничения полномочий, а не только вопрос удобства чтения.
Ссылки и переносимость
Алиасы позволяют не повторять структуру, но делают изменение одного узла потенциально значимым для нескольких мест. Не каждый инструмент сохраняет комментарии и исходное представление при записи. Обычный parse-and-dump может полностью переформатировать документ, потерять пояснения или изменить стиль скаляров. Если важен редакционный round trip, нужен подходящий инструмент и отдельная проверка поведения.
Многострочные блоки имеют правила отступов и завершающих переносов. Ошибка может не нарушить синтаксис, но изменить строку, передаваемую следующей программе. Это особенно чувствительно для команд shell, шаблонов и подписываемого текста. Проверьте фактическое строковое значение после разбора, а не только внешний вид блока в редакторе. Подсветка синтаксиса не показывает все последствия folding и chomping.
Узкое подмножество как договорённость
Если YAML уже выбран экосистемой, ограничьте его профиль: версия, разрешённые типы, запрет пользовательских тегов, политика дубликатов и допустимость алиасов. Добавьте образцы пограничных скаляров и проверяйте схему после безопасного разбора. Укажите конкретный загрузчик, поскольку общая ссылка на спецификацию не описывает настройки программы и её расширения.
Не переходите на другой формат только ради формальной строгости, если это ухудшает поддержку существующих пользователей. Сначала определите реальные ошибки и стоимость миграции. Иногда достаточно кавычек, схемы и понятной диагностики. Но когда документ должен быть маленьким, машинным и однозначным, более простой формат снижает количество правил, которые всем участникам приходится помнить, реализовывать и заново проверять при смене библиотеки.