пятница, 25 декабря 2009 г.

Wыставка Wинтажных Wелосипедов

Павел Кудинов решил хвастаться коллекцией своих велосипедов. Ну что же, мне тоже есть что показать. Когда-то (года с 2005) я играл в игрушку PerlNomic (R. I. P.) и по ходу понаписал кучу забавного кода. В том числе под впечатлением от класса Template из PHPlib написал очень, на мой взгляд, симпатичный шаблонизатор.

Моя гордыня (hubris, знаете ли, страшная сила) не позволила выкладывать этот модуль в старом виде. Все-таки четыре года прошло, я за это время нельзя сказать, что сильно поумнел, но опыта немного поднабрался. Так что сегодня я сел и героически его переписал в том стиле, в котором я пишу сейчас.

Этот шаблонизатор — это мой идеальный шарик, которому не досталось своей кубической оправы. Это то, какими я хотел бы видеть идеальные шаблоны, а не та пыхапня в виде Template::Toolkit, HTML::Template и далее по списку, на которой приходится писать, зарабатывая на хлеб! (Теперь могу к этому списку могу с полным правом добавить Mojo::Template — спасибо Толе Шарифулину за его доклад на Saint Perl! :-) Этот модуль — эта именно та буква V из аббревиатуры MVC, про которую все думают, что это шаблоны! Люди, очнитесь! (Ну ладно, преувеличиваю, конечно, не все так думают.)

И вы не смотрите, что он маленький, на самом деле он очень могуч. И в следующей статье я это покажу, сделав от него производный класс или даже парочку, если хватит терпения (impatience, знаете ли, страшная сила). Template из PHPlib не позволял делать наследование и вообще отличался корявейшим и неинтуитивнейшим синтаксисом. Но все равно, спасибо ему, с тех пор я знаю, что такое настоящие шаблонизаторы. Из похожего стоит упомянуть Google CTemplate, CTPP, mustache, Template::Simple и мой прототип функционального шаблонизатора на Erlang. Но от Google CTemplate, CTPP и Template::Simple наследовать вроде бы нельзя, и не знаю, умеет ли mustache наследовать представления, а времени разбираться более подробно не было. Функциональный шаблонизатор на Erlang — это тот же идеальный шарик, вид сбоку, со стороны не объектно-ориентированного, а функционального программирования (осторожно, тот пост на тарабарском).

Наверняка уже все придумано до меня. Если кто натыкался на наследуемые шаблоны на Perl (или любом другом языке), отпишитесь в комментах, пожалуйста, а то времени познавать окружающий мир патологически не хватает, а ведь еще в чужом коде разбираться.

Короче, смотрите-завидуйте. Для тех, кому лень читать чужой код — хотя это и false laziness, но любая лень, знаете ли, страшная сила! — для тех цепляю еще ссылку на отформатированный pod.

Update: вторая часть.

P. S. Возможно, напишу для него тесты и выложу на CPAN. (Уже который год себе это говорю.)
P. P. S. Хотя на кой черт на CPAN'е нужен еще один шаблонизатор?

3 comments:

  1. Предвидя ехидные замечания, замечу, что на производительность код не проверялся и не оптимизировался, потому что в production никогда не ходил.
    ОтветитьУдалить
  2. Чего синтаксису языка шаблонов этого модуля действительно не хватает — это встроенной поддержки фильтров и форматов.
    ОтветитьУдалить
  3. а почему нет? на цпане есть куча всего что юзает десяток человек в мире :) зато если штука вменяемая, то можно украсть кусочек для своего велосипеда. а так- валяется где-то на диске и никому никакой пользі.
    ОтветитьУдалить