Plosurin: Perl реализация Closure Templates

Мой процесс избавления от Template::Toolkit [1] и вообще шаблонизаторов в какой-то момент замедлился. Причиной тому стали ситуации, когда перенос представления на сторону клиента грозил появлением новых проблем.

Вот пару типичных случаев:

  • статический текст из документации

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

    Проблема здесь вполне очевидная: растет объем загружаемых данных. К тому же, не факт, что некоторые из них могут пригодится. Есть решения: это сжатие библиотек, использование отложенной загрузки требуемых частей (например, в GWT можно подгружать как код, так и ресурсы). Подобные рецепты приходится использовать, несмотря на привнесение некоторого усложнения разработки.

  • форматирование потока данных

    Зачастую, возникают задачи потоковой обработки данных. К примеру, нужно сформировать объемную страницу (это может быть XML, HTML или тот же JSON) из потока данных, извлекаемых из базы. В этом случае проще формировать результирующий текст по мере извлечения записей. К тому же, браузер или устройство может обладать ограниченными возможностями, чтобы собрать страницу. Например, не хватит памяти в игровой приставке или телевизоре :-).

В client-side разработке я использую GWT и Google Closure, где тоже есть шаблоны. Я имею в виду Closure Templates, которые транслируются в программный код JavaScript и Java.

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

Таким образом появилось желание реализовать Closure Templates [2] для Perl. Транслятор Closure Templates реализован на Java и в Google работает небольшая команда (буквально пара-тройка) разработчиков, которые не в состоянии регулярно поддерживать сторонние языки. Поэтому логично было реализовать эту систему целиком на Perl [3].

Plosurin - Perl реализация Closure Templates

Perl реализаций на сегодня две:

Perl 6 [4]
Благодаря шикарной встроенной поддержке синтаксического анализа я начал разработку с реализации на Perl 6. На данный момент есть вероятность, что изменения в предстоящем релизе Rakudo привнесут нестабильность для некоторых программ [5]. По этой причине реализация на Perl 6 отложена.
Perl 5 [6]
Данная реализация, конечно, еще далека от совершенства, но минимально необходимый функционал реализован. Plosurin понимает структуру файлов с шаблонами, грамматику шаблонов и умеет обрабатывать переменные в математических выражениях. К тому же есть режим, когда Plosurin превращается в web сервер и позволяет ускорить разработку шаблонов.

Наиболее важным для меня результатом является снижение «энтропии» в разработке, благодаря появлению единой системы шаблонов для серверной и клиентской части.

[1]Perl 5 модули, которые я использую реже и реже. zag.ru/b48j1

[2]Closure Templates Documentation. http://code.google.com/intl/ru-RU/closure/templates/docs/overview.html

[3]Сайт проекта Plosurin. plosur.in

[4] Perl 6 реализация Closure Templates. http://github.com/zag/plosurin

[5]‘nom’ branch is now default, release status. rakudo.org/2011/09/09/nom-branch-default/

[6] Perl 5 реализация Closure Templates. http://github.com/zag/p5-plosurin