Читаем Журнал «Компьютерра» № 10 от 14 марта 2006 года полностью

«Создавать языки под каждый конкретный проект? Вздор!» — скажет вам любой специалист, хорошо знающий, как дорого обходится проектирование формальных языков с нуля. Действительно, при классической схеме разработки любого языка нужно написать много кода для распознавания исходных текстов на этом языке и их погружения в объектную модель, пригодную для дальнейших манипуляций. Кроме того, даже при условии, что эта работа проделана, возникает ряд вопросов.

Как отображать и редактировать программы на таком языке? Понятно, что в век высоких скоростей и мощных сред разработки ограничиться простым текстовым редактором a-la «Блокнот» уже не получится: представления о производительности труда разработчика ныне совсем не те, что в «далекие» 90-е годы XX века.

Какова стоимость внесения изменений в разработанный язык? Если для того, чтобы изменить какое-то понятие предметной области, нужно «перекроить» весь код распознавателя, выгода от использования такого подхода равна нулю.

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

Языковые инструментарии

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

Речь идет о новом типе программного обеспечения — так называемых языковых инструментариях (language workbenches), которые являются полноценными средами разработки, специально заточенными под DSL. И хотя существуют пока лишь прототипы таких систем, совершенно непригодные для использования в реальных проектах, главные особенности языковых инструментариев можно наглядно продемонстрировать уже сейчас.

Из разработок в этой области хотелось бы упомянуть два перспективных проекта. Первым из них является Meta Programming System компании JetBrains. Система MPS ориентирована на совместное использование с фирменной IDE компании — средой разработки Java-приложений IntelliJ IDEA, которой автор уже восхищался в статье «Кодируй да радуйся» («КТ» #562). Другой проект, Software Factories, принадлежит перу софтверного гиганта Microsoft и выступает в качестве дополнения к недавно вышедшей Visual Studio 2005[Meta Programming System можно свободно скачать по адресу jetbrains.com/mps. Проект Software Factories в настоящий момент представляет собой набор инструментов DSL Tools, доступных для скачивания в составе SDK к Visual Studio 2005. Подробности можно узнать здесь: msdn.microsoft.com/vstudio/teamsystem/workshop/sf].

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


Что такое метапрограмма?

Грубо говоря, метапрограмма — это программа, формирующая в результате своей работы другую программу. Сложно? Тем не менее все это интуитивно понятно человеку, хоть раз занимавшемуся разработкой динамических серверных страниц. Действительно, для веб-дизайнера HTML является «программой для браузера», а для веб-разработчика тот же HTML выступает в роли данных, которые нужно сформировать в результате работы некоторого серверного кода.

Следует отметить важную особенность метапрограммирования: любая метапрограмма определяет не одну конкретную программу, а целый класс. Ниже приведен пример метапрограммы, которая определяет класс всех документов HTML, содержащих произвольное число параграфов. Текст метапрограммы (ASP.NET, С#) заключен между специальными операторами <%...%> и <%=...%>.

<%foreach(Paragraph p in Document) {%>

<%=p.Content%>

<%}%>

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2002 № 06
«Если», 2002 № 06

ФАНТАСТИКАЕжемесячный журналСодержание:Джеймс Блиш. БИ-И-ИП! рассказВл. Гаков. МИССИОНЕР (статья)Джин Вулф. ПОДМЕНЫШ, рассказШон Макмаллен. БАШНЯ КРЫЛЬЕВ, рассказМэри Терзиллоу. ДЕСЯТАЯ ЖИЗНЬ НЕФЕРТИТИ, рассказВидеодром*Рейтинг--- Дмитрий Байкалов. ЭЛОИ ПРОТИВ МОРЛОКОВ (статья)*Премьера--- Тимофей Озеров. УДАР ПО КАРМАНУ (статья)*Рецензии*Экранизация--- Вл. Гаков. ЧУЖАК В СВОЕЙ СТРАНЕ (статья)Алексей Калугин. РАССВЕТ ПОТЕРЯННЫХ ДУШ, рассказРаджнар Ваджра. ДЖЕЙК, Я И ЗИППО, рассказСвятослав Логинов. ДОЛИНА ЛОРИЭН, рассказ,Алексей Зарубин. КРАСОТА ОПЛАЧЕННОГО ДОЛГА, повестьКэрол Карр. И ВАМ ЕЩЕ КАЖЕТСЯ, ЧТО У ВАС НЕПРИЯТНОСТИ? рассказДмитрий Володихин. КАРАУЛ УСТАЛ (статья)Сергей Питиримов. МОРЕ ВОЛНУЕТСЯ РАЗ… (статья)РецензииОлег Дивов. БЕЛЫЙ КВАДРАТ НА ЧЕРНОМ ФОНЕ (статья), стр. 280-291Владислав Гончаров. ДО АПОКАЛИПСИСА ЕЩЕ ПОЖИВЕМ! (статья)Виталий Пищенко: «ПРИЯТНО НАЙТИ ПРОРОКА В СВОЕМ ОТЕЧЕСТВЕ»КурсорPersonaliaОбложка Игоря Тарачкова к повести Алексея Зарубина «Красота оплаченного долга».Иллюстрации: А. Балдин, В. Овчинников, А. Филиппов, Т. Филиппова, С. Голосов, С. Шехов, И. Тарачков.

Алексей Зарубин , Виталий Пищенко , Кэрол Карр , Раджнар Ваджра , Сергей Питиримов

Фантастика / Журналы, газеты / Фэнтези / Современная проза / Эссе
«Если», 2002 № 02
«Если», 2002 № 02

ФАНТАСТИКАЕжемесячный журналСодержание:Ллойд Биггл. КТО В ЗАМКЕ КОРОЛЬ? повестьПитер Гамильтон, Грэм Джойс. БЕЛОЕ ВЕЩЕСТВО, рассказВидеодром*Адепты жанра--- Евгений Харитонов. КОСМИЧЕСКАЯ ОДИССЕЯ ПАВЛА КЛУШАНЦЕВА (статья)*Экранизация--- Вл. Гаков. ХРАНИТЕЛИ ОТПРАВЛЯЮТСЯ В ДОРОГУ (статья)*Рецензии*Хит сезона--- Дмитрий Байкалов. НЕГР ИЗ КАЛИФОРНИИ ПРИ ДВОРЕ КОРОЛЯ ЛЕО (статья)Пол Ди Филиппо. ПОЖИЗНЕННОЕ ЗАКЛЮЧЕНИЕ, рассказЧарлз Стросс. АНТИТЕЛА, рассказДэвид Лэнгфорд. COMP.BASILISK.FAQ (отрывок из статьи в журнале «Нейчур»)Джо Холдеман. СЛЕПАЯ ЛЮБОВЬ, рассказКристофер Маккитрик. ПОТЕРЯВШИЕСЯ СОБАКИ, рассказАльберт Каудри. «КРУКС», повестьВладимир Березин. КТО ИДЁТ ЗА «КЛИНСКИМ»? (статья)Крупный план*Александр Громов. ГУД БАЙ, АМЕРИКА! (статья)РецензииКрупный план*Глеб Елисеев. ТРИ ДАРА ЛЕСТЕРА ДЕЛЬ РЕЯ (статья)Альтернативная реальностьМаксим Форост. РАДУГА ПЕРВОГО ЗАВЕТА, рассказЭдуард Геворкян. МЕДАЛЬ ЗА ВЗЯТИЕ КАНОССЫ (статья)Евгений Харитонов. ЖУРНАЛЬНАЯ ЛИХОРАДКА (статья)КурсорПерсоналииОбложка И. Тарачкова к повести Альберта Каудри «Крукс».Иллюстрации: А. Балдин, А. Юрьева, С. Шехов, В. Овчинников, А. Филиппов, И. Тарачков

Альберт Каудри , Джо Холдеман , Дэвид Лэнгфорд , Кристофер Маккитрик , Максим Форост

Фантастика / Фэнтези / Журналы, газеты / Научная Фантастика