|
|||||||
Введение в DSL. Проблематика проектирования и кодирования
Время создания: 11.09.2014 16:59
Текстовые метки: DSL, языки программирования, inner DSL
, outer DSL
, кодирование
, проектирование
, language workbench
Раздел: Компьютер - Программирование - Теория программирования
Запись: xintrea/mytetra_syncro/master/base/1410440389qaorhjm9ya/text.html на raw.github.com
|
|||||||
|
|||||||
Введение в DSL. Проблематика проектирования и кодирования
На протяжении нескольких десятилетий стоит задача поиска повторяемого, предсказуемого процесса или методологии, которая бы улучшила продуктивность, качество и надежность разработки. Одни пытались систематизировать и формализовать этот, по-видимому, непредсказуемый процесс. Другие применяли к нему методы управления проектами и методы программной инженерии. Третьи считали, что без постоянного контроля со стороны заказчика разработка ПО выходит из-под контроля, что влечет за собой увеличение временных и финансовых затрат. Информатика как научная дисциплина предлагает и использует на базе методов структурного программирования технологию надежной разработки программного обеспечения, используя тестирование программ и их верификацию на основе методов доказательного программирования для систематического анализа правильности алгоритмов и разработки программ без алгоритмических ошибок. Данная методология направлена на решение задач на ЭВМ, аналогичной технологии разработки алгоритмов и программ, используемой на олимпиадах по программированию отечественными студентами и программистами с использованием тестирования и структурного псевдокода для документирования программ в корпорации IBM с 70-х годов. Методология структурного проектирования программного обеспечения может использоваться с применением различных языков и средств программирования для разработки надежных программ любого назначения. Однако при использовании классического подхода к разработке возникают проблемы, описанные под хабракатом:
Технологии моделирования знаний о предметной области
Компонентные технологии – набор программных модулей с стандартизированным интерфейсом, ориентированных на решение общих задач. Архитектурные паттерны — проектные решения, описывающие архитектуру программной системы на основе некоторой концепции. Шаблоны GoF — проектные решения, которые описывают аспекты реализации программной системы для решения определенных задач программирования. Языки на основе XML — структурированное описание некоторых данных и механизмов преобразования. SQL — язык структурированных запросов к СУБД. Онтология — представление любой области знаний или части реального мира, который используется для семантического анализа текстов. Предметно-ориентированный язык (DSL) моделирует концепции, выявленные в конкретном домене. Хорошо спроектированный DSL — мощный язык моделирования, который имеет более высокую степень однозначности, чем язык моделирования общего назначения. DSL — язык программирования, специально разработанный для решения определённого круга задач, в отличие от языков программирования общего назначения. Существует три основных типа DSL:
Внешний DSL использует отдельные от основного синтаксиса конструкции, близкие к естественному языку. Требует наличия внешнего компилятора, интерпретатора или постпроцессора, в связи с чем исполняется на этапе компиляции, в отличие от внутреннего DSL. Внешний DSL часто использует специальные языки, но во многих общих случаях используются теги, которые берутся из синтаксиса других языков, например, XML, как общей альтернативы. Традиционно в Unix-системах используется стиль «небольших языков» (little languages). Одними из первых примеров внешнего DSL были регулярные выражения, SQL, awk и XML, которые использовались в системах подобных Struts и Hibernate. Наибольший плюс внешних DSL состоит в том, что их можно писать так, как пожелает разработчик. Другими словами, можно выразить предметную область в простейшей и доступной для чтения и редактирования форме. Формат такого DSL будет ограничен лишь умением создавать транслятор, который сможет считать конфигурационный файл и выдать некоторое выполняемый код на основном языке приложения. Отсюда же следует и основной недостаток внешних DSL — необходимость в создании непосредственно транслятора. Внутренний DSL использует часть синтаксических конструкций общего языка программирования для выражения на языке, близком к естественному, отдельных аспектов приложения. Для выполнения не требует стороннего компилятора, исполняется при исполнении основного программного кода на общем языке программирования. Внутренний DSL используется некоторыми общими программными языками для расширения возможностей программ, но при этом создается существенно ограниченное подмножество конструкций для управления программой. Классическим примером применения внутренних DSL является Lisp и Ruby. Интегрированная среда разработки (Integrated Development Environment — IDE) – это инструмент для создания DSL. Он предоставляет возможности редактора и генератора для определения абстрактного синтаксиса языка, подобно современным IDE по разработке программ. В целом, DSL, дополненные технологией метапрограммирования, являются эффективным средством автоматизации разработки ПО и в настоящий момент находит широкое применение в информационных технологиях. Обобщенный алгоритм разработки нового DSL состоит в следующем:
Использование DSL имеет также ряд преимуществ:
Спасибо тем, кто дочитал до конца, хотелось бы услышать ваше мнение по поводу проблематики проектирования в целом и языков описания предметных областей в частности как одного из вариантов решения возникающих трудностей. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|