DSL прокладывают путь к новым моделям программирования
Мир разработчиков ПО должен начать движение от использования статичных, процедурных языков и моделей к программированию, ориентированному на языки.
Выступая на симпозиуме Java в марте в Лас-Вегасе, Нил Форд, старший архитектор приложений компании ThoughtWorks, предложил концепцию Domain Specific Languages (DSL) и рассказал, как они могут изменить всю ситуацию с разработкой ПО.
DSL — это языки программирования, созданные для специфических задач, каждый из них может очень хорошо решать какую-либо одну разновидность таких задач.
Форд цитирует своего коллегу по ThoughtWorks Ола Бини (энтузиаста Ruby), точнее, его описание перспективного набора инструментов разработчика, состоящего из “стабильного языка” в основе, динамических языков на верхних уровнях и DSL в качестве верхнего уровня инструментария для программистов будущего.
Он также пропагандирует концепцию “программирования для полиглотов”, или процесса подстраивания существующих платформ к языкам, подходящим для решения конкретных проблем: “Пришло время работать именно по такой схеме”. Форд считает, что DSL улучшают процесс разработки ПО за счет устранения “шума”. Сам он использует схему разработки приложений Ruby on Rais.
По его словам, программисты, искушенные в динамических языках, стремятся построить DSL поверх языков более низкого уровня: “ DSL позволяют развивать тот путь, по которому мы строим и используем решения, перемещая уровень нашей абстракции ближе к проблеме и отодвигая его дальше от деталей внедрения. Это эволюция, а не революция. Просто DSL — гораздо большая абстракция, чем XML”.
Форд говорит о работе с внешними DSL как о “применении ваших собственных языков, используемых для того, чтобы работать с инструментами старой школы типа Lex и Yacc” — двух, по его словам, изрядно примитивных Unix-утилит для программистов.
Новые инструменты, в частности ANTLWorks (основан на ANTLR — Another Tool for Language Recognition), лучше, но все еще недостаточно хороши, считает он.
“Мы движемся к необходимости учета параметров работы языка”, — утверждает Форд. По его словам, например, компании International Software и Microsoft с технологией Software Factories уже внедрили эти параметры, но, вероятно, лучший пример — Jet-Brains MPS.
MPS — это метапрограммная система JetBrain, “…новая программная среда разработки, которая позволяет вам просто определить ваши собственные специализированные языки и использовать их вместе с прочими языками, — такое определение дано на сайте JetBrains. — Ваши языки имеют полную поддержку IDE (Integrated Development Environment): завершение кода, навигацию, рефакторинг и многое другое, к чему вы можете добавить собственную специализированную поддержку (такую, как специальные редакторы, например), если считаете нужным. Вы можете даже развивать существующие языки и добавлять к ним собственные возможности. MPS устраняет зависимость программиста от языка и окружения, предоставляя ему больше свободы и мощи и в конечном счете делая программирование более простым и продуктивным”.
Более того, MPS — это и есть внедрение программирования, ориентированного на языки, цель которого состоит в том, чтобы определить языки столь же естественно и натурально, как происходит определение классов и методов сегодня.
“В этом году должен произойти переход к открытому коду, — заметил Форд о JetBrains и MPS. — Это первая волна параметров языка, которые вскоре станут доступны всем”. Он подчеркнул, что разработчики Java используют XML для связывания данных и начали использовать XML в качестве внешнего языка DSL, потому что в нем просто разбираться.
“Сырой” XML-код выглядит пугающе. “Он пугает непрограммистов, он выглядит хуже, чем код Java, — считает Форд. — Однако XML можно использовать как формат данных”.