рефлексируют ли роботы?

пишу под впечатлением от блиц-доклада Руслана Закирова на РИТе про перловый шаблонизатор Template::Declare

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

давайте посмотрим на задачу создания шаблонизатора. Он должен взять шаблон, распарсить его, сделать подстановки и, возможно, некоторые другие примитивные действия. Ключевое слово здесь «распарсить». Зачем мучиться, создавая новый, если у нас уже есть готовый парсер, который работает с самим языком? Благо перл довольно гибкий, а в шестой своей версии так и невероятно гибкий. Берем этот парсер, и используем его для создания хорошо структурированных шаблонов. Примитивный пример:

template simple => sub {
    html {
        head {}
        body {
            p {'Hello, world wide web!'}
        }
    }
};

нет, я не говорю, что это идеал, но сама идея мне очень понравилась : )

Артемий Трегубенко,

comments

  1. Такие html-генераторы есть во всех языках. Их регулярно изобретают, пару дней восторженно ахают, но в результате забрасывают в угол и так ими и не пользуются. Я сам такой изобрёл лет пять назад:)

    david_m,
  2. мда, то-то я сейчас начинаю вспоминать, что вроде бы и для лиспа нечто подобное видел : )

    интересно, почему так происходит?

    там ведь среди плюсов даже профайлер

    arty,
  3. потому что в реальности это очень не удобно :) 1. нужно учить новый синтаксис 2. нет возможности качественно работать с текстом (как формируются перносы строк? спец. символы?) 3. сверстаный HTML приходиться переверстывать под новый синтаксис 4. профайлер при верстке (на сревере) не нужен

    KBA,
    1. имхо синтаксис проще простого : )
    2. вот это реально интересно, хотя наверняка что-то для этого придумано
    3. ну это для любой смены шаблонизатора так ; )
    4. профайлер очень даже пригождается, мы вот сейчас смарти оптимизируем
    arty,