Google недавно представила новый язык конфигурирования для генерации текстового формата обмена данными JSON. Этот проект с открытым исходным кодом получил название Jsonnet.
Jsonnet был создан Google несколько месяцев назад как язык программирования для определения данных, но широко об этом не сообщалось. Посвященный Jsonnet сайт называет Jsonnet языком создания шаблонов данных. Jsonnet не только генерирует JSON, но и является расширением JSON, написал в корпоративном блоге про новый язык Дэйв Куннингем, состоящий в группе New York Technical Infrastructure компании Google. «Добавляя в пробелы существующего синтаксиса JSON новые конструкции, Jsonnet реализует новые полезные функции, не нарушая при этом обратной совместимости с JSON, — сообщил Куннингем. — Любой допустимый JSON-текст одновременно является и допустимой Jsonnet-программой, просто эмитирующей этот JSON-текст в неизменном виде, а существующие системы, умеющие работать с JSON (или с его кузеном YAML), можно легко модифицировать для приема данных с использованием полноценного языка Jsonnet. Соответственно Jsonnet является примером языка создания шаблонов данных, который конкретно ориентирован на данные JSON и менее подвержен ошибкам, чем другие техники».
Куннингем отметил, что посредством JSON можно конфигурировать многие системы, но писать JSON-текст вручную бывает трудно. «Jsonnet имеет полезные функции определения данных, расширяющие JSON для взаимодействия с другими системами», — заявил он.
JSON, или JavaScript Object Notation, представляет собой формат на основе открытого стандарта, использующий читаемый человеком текст для передачи объектов данных, образованных парами атрибут-значение. В первую очередь он используется при передаче данных между сервером и веб-приложением, будучи альтернативой XML.
Jsonnet является узко ориентированным языком конфигурирования, помогающим пользователям определять данные JSON. Он позволяет вычислять фрагменты JSON внутри структуры, принося в область структурированных данных такие же преимущества, какие дают языки создания шаблонов простого текста.
По словам Куннингема, название Jsonnet является контаминацией слов JSON и sonnet (сонет). Разработчики языка выбрали это имя, чтобы показать, что данные, выраженные в Jsonnet, легче писать и содержать в корректном состоянии, «поскольку этот язык более элегантен и лаконичен, как поэма». «Это связано не только с синтаксическими тонкостями, типа комментариев и более свободного использования круглых кавычек, но и с тем, что Jsonnet имеет все удобства современных многопарадигмных языков программирования, необходимые для упрощения работы с ними. Одним из его главных преимуществ является возможность использовать функции подмешивания и импорта для написания библиотек модульных конфигурационных шаблонов, что позволяет создавать узко специальные языки конфигурирования для конкретных приложений», — пояснил Куннингем.
По его словам, Jsonnet был инновационным замыслом, использующим как академические методы, так и собственный опыт Google в реализации продуктивных языков. «В отличие от большинства языков конфигурирования, Jsonnet обладает полной операционной семантикой, обеспечивающей согласованность с точки зрения сторонних реализаций и математического анализа. Это очень компактное и тщательно проработанное расширение JSON, допускающее применение и объектно-ориентированного, и декларативного стиля».
Еще важнее, говорит Куннингем, что в отличие от обычных языков программирования Jsonnet является герметичным в том смысле, что результат его применения «не зависит от любых неявных внешних факторов, и сложная конфигурация всякий раз будет выстраиваться в одинаковом виде».
Jsonnet поставляется как библиотека с привязкой к языкам C и Python, а также как утилита командной строки.