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
![](/_next/./static/assets/plosurin-logo-175-bba0e11d68bfb7ff..png)
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