USGE10301TWO x50214..7050329...............................
SVCLTWO x10301MRP220050329..............................
SVCLHOHPE 10201DX0320050315........................
SVCLFOWLER 10101MS0120050313.........................
#123456789012345678901234567890123456789012345678901234567890
Вот пример таких данных:
Начну с самого простого примера языкоориентированного программирования и типичной ситуации, когда оно может понадобиться. Представьте, что нам нужна система, которая считывает файлы и создает на их основе некие объекты. В каждой строке файла хранятся данные для создания одного объекта. Эти объекты могут принадлежать разным классам, соответствующий класс обозначается четерехзначным кодом в начале строки. Далее в строке идут данные для полей класса, причем поля у разных классов могут быть разными. Поля определяются скорее своей позицией, нежели разделителями. Так, идентификатор клиента может располагаться между 4-ым и 8-ым символом записи.
Простейший пример языкоориентированного программирования
Пока я писал, выяснилось, что для одной статьи материала слишком много. Пришлось выделить некоторые части в отдельные небольшие статейки. Далее в тексте я буду указывать, когда стоит прерваться и переключиться на дополнительную статью. Ссылки на них вы найдете прямо под оглавлением. Обратите особое внимание на - там я показываю как создать DSL с помощью одного из существующих языковых инструментариев. Мне кажется, это лучший способ почувствовать, что будут представлять собой подобные приложения в будущем. Впрочем, сначала вам нужно обратиться к общему описанию, иначе от конкретных примеров будет мало толку.
Хотелось бы кратко описать ситуацию, сложившуюся в настоящий момент в сфере языкоориентированного программирования, показать на примере, что это такое, а также рассказать о всевозможных течениях, спорах и аргументах "за" и "против", которые существуют в этой области. Конечно, если вы уже наслышаны о языкоориентированном программировании, вам захочется пропустить эту часть. Однако я уже убедился, что много (можно даже сказать, абсолютное большинство) программистов не так уж хорошо в этом ориентируются. Давайте же разберемся сначала с общей концепцией, а потом перейдем к тому, что такое языковой инструментарий, и как существующие его разновидности могут изменить отношение к языкоориентированному программированию в целом.
В этой статье всего два новых базовых термина: "языкоориентированное программирование" (Language Oriented Programming) и "языковой инструментарий" (Language Workbench). Языкоориентированное программирование - это общее название для такого стиля разработки программного обеспечения, который строится вокруг использования ряда языков, специфичных для данной предметной области. Языковой инструментарий - это общий термин для всех видов приложений, разработанных для поддержки языкоориентированного программирования. Иными словами, языковой инструментарий дает возможность заниматься каким-то одним видом языкоориентированного программирования. Возможно, вам незнаком термин Язык предметной области (Domain Specific Language), чаще передаваемый аббревиатурой DSL. Это урезанная форма языка программирования, созданная специально для решения определенного вида проблем. В некоторых сообществах программистов под DSL принято понимать только языки, создаваемые для решения конкретной задачи, но я предпочитаю использовать термин DSL для описания языков, которые могут использоваться для решения некоторого ограниченного класса проблем.
Теперь я хотел бы определиться с терминологией, которую буду использовать далее по тексту. Как всегда в новой области программирования устоявшейся терминологии просто нет, поэтому не думайте, что эти слова можно встретить еще где-то за рамками моих работ. Здесь я дам лишь краткое описание новых терминов, но буду объяснять их более подробно дальше, по ходу статьи, так что ничего страшного, если вы не сразу поймете, что я имею в виду.
Последние несколько лет мы имели возможность наблюдать за попыткой создать новый вид программных систем, которые как раз и призваны поддерживать "языкоориентированный" стиль программирования. Самая ранняя (и наиболее известная) из них - это Intentional Programming, концепция которого была разработана Чарльзом Симони (Charles Simonyi) еще в Microsoft. В этой области работают и другие, и вот как раз их деятельность и вызвала новую волну интереса к данной области.
Уже давным-давно существует такой стиль программирования, при котором мы стараемся описывать программные приложения с помощью языков, специфичные для соответствующей предметной области. В Unix это "малые языки", котрые генерируют программный код посредством lex и yacc; в Lisp такие языки разрабатывают внутри самого Lisp, чаще всего используя его макросы. И тем не менее, такой стиль программирования пока не нашел широкого применения и популярен только среди его ярых сторонников, к немалому их огорчению.
Дополнительные статьи на martinfowler.com
Последнее обновление:
Новые идеи в области разработки программного обеспечения, как правило, представляют собой лишь вариации на тему старых. В этой статье я расскажу об одной из таких идей, а именно о создании приложений, которые я называю "языковым инструментарием": Intentional Software, Meta Programming System, которую разрабатывает компания JetBrains и Software Factories, которые делают в Microsoft. Все эти приложения используют давно известный подход к разработке программного обеспечения - назовем его "языкоориентированным программированием". Благодаря использованию в них инструментария современных сред разработки (IDE), этот вид программирования становится гораздо более жизнеспособным. Как бы там ни сложилось в будущем, я уверен, что этот вид приложений на настоящий момент является самым интересным явлением на горизонте нашей индустрии. И уж достаточно интересным для того, чтобы написать это эссе и попробовать изложить хотя бы в общих чертах их суть и возможную выгоду от их использования.
Языковой инструментарий: новая жизнь языков предметной области, Мартин Фаулер
Самое интересное о разработке программного обеспечения
Языковой инструментарий: новая жизнь языков предметной области, Мартин Фаулер : MAXKIR.com
Комментариев нет:
Отправить комментарий