Небольшое вступление для тех, кто еще не использует YAML (позволю себе процитировать википедию )
YAML — человекочитаемый формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данныхмногих языков программирования.
Я использую YAML для разного рода конфигурационной информации.
Почему я использую YAML? :
- YAML краток и понятен;
- YAML очень выразительный и расширяемый;
- YAML допускает простой потоковый интерфейс;
- YAML использует структуры данных, родные для языков программирования;
- YAML легко реализуется, возможно, слишком легко;
- YAML использует цельную модель данных. Нет исключений — нет беспорядка.
Сабж
Идея YAML::Tiny - Читать/Писать YAML данные с минимальными затратами + минимум внешних зависимостей(не использует ничего, кроме стандартных модулей).
Просто заменив в коде:
use YAML 'LoadFile';
на
use YAML::Tiny 'LoadFile';
я сэкономил 4МБ памяти в каждом FCGI процессе!!!
Спецификация YAML невероятно огромна. И Pure Perl реализация - модуль YAML поддерживает ее полностью и съедает 4МБ оперативной памяти. Yaml::Tiny мал и быстр за счет того, что он не поддерживает все возможности описанные в спецификации.
ЗЫ: Если не хватает возможностей YAML::Tiny, тогда следует смотреть в сторону YAML::Syck
6 коммент.:
Я предпочитаю для подобных целей JSON, модуль соответственно JSON::XS. Быстрый до невероятия. Зависимостей тоже нет.
Но конфигурационные файлы — всё-таки Config::File и ему подобные. Оно привычнее как-то.
JSON::XS - согласен, что исключительно быстрый модуль ( даже писал когда-то про него http://koorchik.blogspot.com/2010/01/blog-post_26.html ) и использую его вовсю, но не для конфигурационных целей - для формирования JSON данных для браузера.
YAML нравиться тем, что для него реализован парсер практически на любом юзыке программирования.
Базовый конфиг обычно создаю просто дампом перловой структуры, а затем уже вношу изменения руками. И нравиться, что YAML ругается на любую ошибку.
Дык, попробую YAML как-нибудь на досуге. Но, имея уже один устоявшийся синтаксис для конфигов (апачевский .conf) и один — для сериализации структур (JSON), не хочется плодить сущности :)
YAML действительно прекрасный формат, но YAML::Tiny ужасен.
В основном потому, что в случае, если где-то есть ошибка identation, то YAML::Tiny не скажет, где именно, и поиски могут растянуться надолго..
Согласен с Alexey, что при битом файле - замучаешься находить ошибку в YAML::Tiny формате, была такая байда, но для простых key:value - работает надежно
Ну для поиска ошибки можно использовать полноценный модуль "YAML" и делать что-то типа
perl -MYAML -e 'YAML::LoadFile("file.yml")'
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)