Средства разработки приложений



              

Мутация и гибридизация


При разработке специализированных встроенных языков часто играет важную роль мутация, иногда случайная, а иногда намеренная. Один из распространенных видов мутации состоит в добавлении к одному языку некоторого подмножества синтаксических конструкций другого языка (например, регулярных выражений). Этот тип мутации может реализовываться путем использования препроцессора, преобразующего одни высокоуровневые конструкции в другие или переплетающего синтаксис добавляемых конструкций с синтаксисом целевого языка. Мутации могут зайти настолько далеко, что в результате образуется новый гибридный язык. Наиболее известные примеры полностью гибридных языков представляют инструментальные средства построения синтаксических анализаторов yacc и bison. Грамматика целевого языка определяется в виде набора правил синтаксического разбора, переплетенных с кодом на языке С, который выполняется под управлением этих правил. В результате работы этих инструментальных средств порождается C-программа, включающая код для правил и код автомата синтаксического разбора на основе заданной грамматики.

Еще одним примером этого типа мутации в среде ранних вариантов Unix являлся препроцессор Ratfor (Rational Fortran), разработанный Брайаном Керниганом (Brian Kernighan). В программах на языке Ratfor позволялось писать Fortran-код с использованием выражений и логических блоков языка C. Препроцессор транслировал такую программу в программу на чистом языке Fortran с номерами строк и операторами goto, как это показано на рис. 4.



Рис. 4. Fortran и Ratfor, примерно 1975 г.

Еще более странным мутантным языком был гибрид языков C и Algol, реализованный с использованием препроцессора для языка C и применявшийся в коде adb. По-видимому, Стив Борн (Steve Bourne), автор алголоподобного синтаксиса shell, хотел, чтобы в будущих языках сохранялась часть генома языка Algol. Примерный код показан на рис. 5.



Рис. 5. Мутант C и Algol из раннего варианта adb

Увы, для облегчения сопровождения более поздние версии этого кода пропускались через препроцессор и сохранялись уже в преобразованном виде. Во многих дальнейших языках имелась более четкая гибридизация, облегчающая переход от одной среды к другой. Вслед за широким распространением языка C синтаксис его выражений стал использоваться в огромном числе новых языков, больших и маленьких, включая Awk, C++, Java, JavaScript, D, Ruby и многие другие. Аналогично, вслед за успехом языка Perl во многих других скриптовых языках были переняты его полезные расширения синтаксиса регулярных выражений как новая каноническая форма. Базовые концепции, такие как синтаксис выражений, часто образуют основную часть небольшого языка, и заимствования из какой-либо общепринятой модели позволяют быстро его реализовать и внедрить в практическое использование.




Содержание  Назад  Вперед