Некоторые дополнительные мысли
- Почему сначала класс объекта, а потом необязательный идентификатор (имя)?
- Потому что шаблон принципиально работает с объектом еще до его создания, то есть, на самом деле шаблон для разработчика и для шаблонизатора должен формировать новый объект из заданного класса. Зачастую, этого достаточно, а если недостаточно, то уже можно обращаться к конкретному объекту.
- Как будет обеспечиваться модульность шаблонов?
- Скорее всего, модульность шаблонов будет обеспечиваться таким же образом, как и в
LOMO
, то есть, вложенных шаблонов не будет, один шаблон - одна импортируемая сущность. Что не исключает возможности группировки шаблонов в подсистемы чисто организационно, на уровне файловой системы и полного квалификатора имени. Так же возможно будут экспортированные константы и объекты внутри сущностей (например, стандартные аттрибуты html).
- Скорее всего, модульность шаблонов будет обеспечиваться таким же образом, как и в
- Шаблоны декларативные или императивные?
- Описание шаблона мультипарадигменное, тут и декларативная часть, и императивная часть и работа с контекстом, который каждый раз меняется под действием самого шаблона.
- Процедуры и модульность внутри
LEAF
, импорт юнитов вLOMO
?-
Так как менять языки не хочется, скорее всего импорт из любого модуля будет возможен на этапе выполнения шаблона. Допустим это будет выглядеть так:
CORE.TEMPLATE(my-little-tree): CHESS: DO! IMPORT Strings PROCEDURE Invert VAR i+, o- STRING BEGIN o := i[\LEN i .. 0] (* range-нотации пока нет в LEAF *) END Invert VAR s STRING BEGIN Invert(o: "K F G", i -> s) THIS: move = s; END; CALC! VAR x INTEGER PROCESS 2 -> x x ^ 2 -> THIS number; END; ; ;
-
- Громоздко!
- императивный код -> декларативный код -> шаблонный код, чем дальше тем хуже. Но попробовать стоит. Конечно, для поддержки инструкций шаблонов внутри встраиваемых языков их компиляторы придётся доработать, но формально это останутся те же языки с полным набором фич. Заодно можно попробовать наконец-то сделать обобщенную кодовую базу для всех языков.