Одна беда — прекрасное пока еще далёко, а потребность в нем ощущается уже сейчас.
<?xml version="1.0" encoding="UTF-8" ?>
<статья
название=”Ориентация на язык”
автор=”Дмитрий Кириллов”>
<раздел название=”Введение”/>
<раздел название=”Языковые инструментарии”>
<раздел название=”Проектирование DSL”/>
<раздел название=”Создание редактора”/>
</раздел>
</статья>
Забавно, что практически сразу же после появления XML отовсюду посыпались различные идеи «разработки, основанной на метаданных» (metadata-driven development), созвучные концепции языковых инструментариев. Но... громоздкость конструкций (обратная сторона самоописательности XML), а также, мягко говоря, их ограниченная выразительность зачастую сводят на нет любые попытки построить практичный DSL на основе XML. Чтобы это понять, достаточно представить себе мир, в котором для формирования запроса к базе данных вместо простого и компактного оператора SELECT языка SQL каждый раз пишут монстров, пестрящих угловыми скобками.
Что же касается возможностей построения метапрограмм-генераторов, то, как показывает опыт развития средств разработки веб-приложений, связка XML/XSLT проиграла сражение на этом поле технологиям динамических серверных страниц (PHP, JSP, ASP.NET и т. п.). Причин много, но главных, пожалуй, две:
— сложность организации взаимодействия серверных компонентов при разработке средствами XML/XSLT;
— технологии динамических серверных страниц предоставляют возможность явной реализации принципов метапрограммирования.
B2B) . Например, в статье уже внесено в табличку виртуальное место для торговли (marketplace), типичным примером которого является amazon.com. Он не только торгует товарами с собственного склада, но и давно оказывает услуги другим компаниям по ведению их каталогов, ордер-процессингу и логистике служб доставки. Тот же amazon предоставляет сервис по ведению корпоративных аккаунтов компаний-покупателей (товары заказывают сотрудники, а расплачивается компания). О www.windowsmarketplace.com, на котором предоставлены программы и железо для Windows от различных продавцов, тоже давно известно. В Рунете по пути marketplace идет проект www.marex.ru от eHouse.
XML и XSLT
Появившись в далеком 1997 году, XML (eXtensible Markup Language, расширяемый язык разметки) произвел самую настоящую революцию, практически сразу же покорив сердца разработчиков и архитекторов, поскольку совместил в себе, казалось бы, две несовместимые вещи: доступность для восприятия человеком и возможность автоматического распознавания различными программами. Немного позже XML был дополнен технологией XSLT, наделяющей его возможностями метапрограммирования. Вот как выглядит документ XML для разработанного нами языка «Структура статьи в КТ»:<?xml version="1.0" encoding="UTF-8" ?>
<статья
название=”Ориентация на язык”
автор=”Дмитрий Кириллов”>
<раздел название=”Введение”/>
<раздел название=”Языковые инструментарии”>
<раздел название=”Проектирование DSL”/>
<раздел название=”Создание редактора”/>
</раздел>
</статья>
Забавно, что практически сразу же после появления XML отовсюду посыпались различные идеи «разработки, основанной на метаданных» (metadata-driven development), созвучные концепции языковых инструментариев. Но... громоздкость конструкций (обратная сторона самоописательности XML), а также, мягко говоря, их ограниченная выразительность зачастую сводят на нет любые попытки построить практичный DSL на основе XML. Чтобы это понять, достаточно представить себе мир, в котором для формирования запроса к базе данных вместо простого и компактного оператора SELECT языка SQL каждый раз пишут монстров, пестрящих угловыми скобками.
Что же касается возможностей построения метапрограмм-генераторов, то, как показывает опыт развития средств разработки веб-приложений, связка XML/XSLT проиграла сражение на этом поле технологиям динамических серверных страниц (PHP, JSP, ASP.NET и т. п.). Причин много, но главных, пожалуй, две:
— сложность организации взаимодействия серверных компонентов при разработке средствами XML/XSLT;
— технологии динамических серверных страниц предоставляют возможность явной реализации принципов метапрограммирования.