Высокоуровневые методы информатики и программирования

Работа по теме: Языки программирования. Их классификация и развитие. Глава: 2.2.1. Проблемно – ориентированные языки. Предмет: Информационные системы. ВУЗ: СГА.

Терминология[править | править код]

Простейшие предметно-ориентированные языки, используемые в одном конкретном приложении, часто называют «мини-языками»[2].

Мартин Уорд (англ. Martin Ward)[3] в работе «Language Oriented Programming»[4] (которая считается отправной точкой развития ЯОП), использовал термины «problem oriented» и «domain oriented», но в англоязычном научном сообществе прижился термин «domain-specific», причём именно «domain-specific language», а не «domain-specific programming language». В русскоязычной литературе по программированию встречаются варианты «доменно-специфичный», «проблемно-ориентированный», «предметно-ориентированный».

Фаулер[5] и Дмитриев[6] определяют понятие DSL как «урезанный язык программирования (в большинстве случаев неполный по Тьюрингу)».

Использовать

Дизайн и использование соответствующего DSLs – ключевая роль разработки области, при помощи языка, подходящего для области под рукой – это может состоять из использования существующего DSL или GPL или развития нового DSL. Ориентированное на язык Программирование рассматривает создание языков специального назначения для выражения проблем стандартная часть процесса решения задач. Создание проблемно-ориентированного языка (с программным обеспечением, чтобы поддержать его), вместо того, чтобы снова использовать существующий язык, может стоить, если бы язык позволяет особому типу проблемы или решения быть выраженным более ясно, чем существующий язык позволил бы, и тип рассматриваемой проблемы вновь появляется достаточно часто. Практично, DSL может быть специализирован к особой проблемной области, особому проблемному методу представления, особому методу решения или другому аспекту области.

2.2.3. Диалоговые языки

Появлениеновых технических возможностей поставилозадачу перед системными программистами– создать программные средства,обеспечивающие оперативное взаимодействиечеловека с ЭВМ их назвали диалоговымиязыками.

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

Необходимостьобеспечения оперативного взаимодействияс пользователем потребовала сохраненияв памяти ЭВМ копии исходной программыдаже после получения объектной программыв машинных кодах. При внесении измененийв программу с использованием диалоговогоязыка система программирования с помощьюспециальных таблиц устанавливаетвзаимосвязь структур исходной и объектнойпрограмм. Это позволяет осуществитьтребуемые редакционные изменения вобъектной программе.

Однимиз примеров диалоговых языков являетсяБэйсик.

Бэйсикиспользует обозначения подобные обычнымматематическим выражениям. Многиеоператоры являются упрощенными вариантамиоператоров языка Фортран.Поэтому этот язык позволяет решатьдостаточно широкий круг задач.

Примеры[править | править код]

Ведущие исследователи языково-ориентированного программирования (Мартин Уорд, Пол Хьюдак[en], Валид Таха и другие) приводят следующие примеры предметно-специфичных языков в качестве классических[4][7][8]:

  • TeX/LaTeX для подготовки (компьютерной вёрстки) текстовых документов;
  • Perl для манипулирования текстами;
  • SQL для СУБД;
  • Tcl/Tk для графического интерфейса пользователя;
  • HTML и SGML для разметки документов;
  • Verilog и VHDL для описания аппаратного обеспечения;
  • Mathematica и Maple для символьных вычислений;
  • AutoLisp для компьютерного моделирования (САПР);
  • Prolog для задач, сформулированных в терминах исчисления предикатов;
  • ML и Haskell для задач, сформулированных в терминах функций (Haskell временами определяется как DSL для денотационной семантики[en]).

По мнению Валида Тахи, с позиции ЯОП Microsoft Excel оказывается едва ли не наиболее широко применяемым в мире языком программирования[8].

Другими примерами предметно-ориентированных языков служат языки управления базами данных (помимо SQL здесь, к примеру, можно назвать язык FoxPro), командные языки операционных систем (языки интерактивной командной оболочки, прежде всего Unix Shell, языки пакетных заданий, такие как язык JCL и др.)[9], неполные по Тьюрингу языки структурирования данных (XML, .ini, .conf), язык вики-разметки, языки моделирования (UML, GPSS), Erlang для многопользовательских серверов, функционирующих в бесперебойном режиме.

Существуют языки программирования, встроенные в систему управления ресурсами предприятия (язык ABAP в SAP/R3, языки систем Галактика, Парус, 1С, Инфо-Бухгалтер)[источник не указан 1881 день] и применяемые для их дополнения специфичными для конкретной организации модулями. Использование встроенного языка упрощает программирование специфичных задач, поскольку в языке изначально присутствуют понятия предметной области. Некоторые[какие?] геоинформационные системы и САПР также имеют встроенные языки программирования.

Другие примеры:

  • G-код — язык программирования устройств с числовым программным управлением (ЧПУ);
  • ЯМБ.

Обзор

Проблемно-ориентированный язык создан определенно, чтобы решить проблемы в особой области и не предназначен, чтобы быть в состоянии решить проблемы снаружи (хотя это может быть технически возможно). Напротив, языки общего назначения созданы, чтобы решить проблемы во многих областях. Область может также быть сферой бизнеса. Некоторые примеры сфер бизнеса включают:

  • проблемно-ориентированный язык для полисов страхования жизни развился внутренне на крупном страховом предприятии
  • проблемно-ориентированный язык для боевого моделирования
  • проблемно-ориентированный язык для вычисления зарплаты
  • проблемно-ориентированный язык для составления счетов

Проблемно-ориентированный язык где-нибудь между крошечным языком программирования и языком сценариев, и часто используется в пути, аналогичном программной библиотеке. Границы между этими понятиями довольно расплывчатые, во многом как граница между языками сценариев и языками общего назначения.

В разработке и реализации

Проблемно-ориентированные языки – языки (или часто, объявленные синтаксисами или грамматиками) с очень определенными целями в разработке и реализации. Проблемно-ориентированный язык может быть одним из визуального языка схематического изображения, такого как созданные Универсальной Системой Моделирования Затмения, программируемыми абстракциями, такими как Структура Моделирования Затмения или текстовые языки. Например, у полезности командной строки grep есть регулярный синтаксис выражения, который соответствует образцам в линиях текста. sed полезность определяет синтаксис для соответствия и замены регулярных выражений. Часто, эти крошечные языки могут использоваться вместе в раковине, чтобы выполнить более сложные программные задачи.

Грань между проблемно-ориентированными языками и языками сценариев несколько стерта, но проблемно-ориентированные языки часто испытывают недостаток в функциях низкого уровня доступа файловой системы, межуправления процессом и других функций, которые характеризуют полнофункциональные языки программирования, scripting или иначе. Много проблемно-ориентированных языков не собирают к кодексу байта или выполнимому кодексу, но к различным видам объектов СМИ: GraphViz экспортирует в PostScript, ДЖИФА, JPEG, и т.д., где Csound собирает к аудио файлам, и прослеживающий луч проблемно-ориентированный язык как POV собирает к графическим файлам. Компьютерный язык как SQL представляет интересный случай: это можно считать проблемно-ориентированным языком, потому что это определенное для определенной области (в случае SQL, получая доступ и управляя реляционными базами данных), и часто называется от другого применения, но SQL имеет больше ключевых слов и функций, чем много языков сценариев, и часто считается языком самостоятельно, возможно из-за распространенности манипуляции базы данных в программировании и сумме мастерства, требуемого быть экспертом на языке.

Далее стирая эту грань, много проблемно-ориентированных языков выставили ПЧЕЛУ, и могут быть получены доступ с других языков программирования, не ломая поток выполнения или назвав отдельный процесс и могут таким образом действовать в качестве программирования библиотек.

Программирование инструментов

Некоторые проблемно-ориентированные языки расширяются в течение долгого времени, чтобы включать полнофункциональные программные инструменты, который далее усложняет вопрос того, проблемно-ориентирован ли язык или нет. Хороший пример – функциональный язык XSLT, специально предназначенный для преобразования одного графа XML в другого, который был расширен начиная с его начала, чтобы позволить (особенно в его 2,0 версиях) для различных форм взаимодействия файловой системы, последовательности и манипуляции даты и печати данных.

В управляемой моделью разработке много примеров проблемно-ориентированных языков могут быть найдены как OCL, язык для украшения моделей с утверждениями или QVT, проблемно-ориентированным языком преобразования. Однако, языки как UML – языки моделирования типично общего назначения.

Чтобы подвести итог, аналогия могла бы быть полезной: Очень небольшой Язык походит на нож, который может использоваться тысячами различных способов от сокращения еды к сокращению деревьев. Проблемно-ориентированный язык походит на электродрель: это – мощный инструмент с большим разнообразием использования, но определенный контекст, а именно, помещая отверстия в вещи. Язык Общего назначения – полное рабочее место со множеством инструментов, предназначенных для выполнения множества задач. Проблемно-ориентированные языки должны использоваться программистами, которые, смотря на их текущее рабочее место, понимают, что нуждаются в лучшей тренировке и находят, что особый проблемно-ориентированный язык обеспечивает точно это.

Высокоуровневые методы информатики и программирования

В течение длительного периода времени программное обеспечение формировалось на базе операционных и процедурных языков, а именно, Фортран, Бейсик, Паскаль, Ада, Си. С течением времени и техническом прогрессе в сфере программных языков появились и принципиально другие методики реализации программ. Известно много классификаций программных языков по разным параметрам. Самыми известными считаются такие классификации:

  1. Программные языки высокого уровня, такие как Паскаль и Бейсик, и низкого уровня, например, Ассемблер.
  2. Языки программирования со строгой типизацией, например, Паскаль, и языки без строгой типизации, такие как Бейсик.
  3. Языки, поддерживающие объектно-ориентированное программирование, такие как Си++, и не поддерживающие его.

Существуют и другие классификации языков программирования, в которых они подразделяются на:

  1. Языки с машинной ориентацией делятся на:

    • машинные коды.
    • языки, основанные на символическом кодировании.
    • макросы.
    • автокоды.
  2. Языки, машинно независимые:

    • языки, проблемно ориентированные.
    • языки, универсальной ориентации.
    • языки, диалогового типа.
    • языки, не предполагающие процедуры.

Макрос

Макросом является средство, которое предназначено для подмены символьной очерёдности, описывающей исполнение необходимых действий компьютером на укороченный формат. Основной функцией макроса считается сокращение записи исходных текстов программ. Элемент программного обеспечения, реализующий работу макросов, определяется как макропроцессор. На него подаётся макро определяющий и преобразуемый текст. Макропроцессор выполняет обработку исходного текста и выдаёт преобразованный текст. Макрос способен обрабатывать как программы, так и информационные данные.

Преимущества и недостатки[править | править код]

Преимущества и недостатки использования в конкретной задаче конкретного DSL вместо языка общего назначения определяются гораздо явственнее, чем преимущества и недостатки использования одного языка общего назначения вместо другого: в большинстве случаев уже разработанный DSL оказывается концептуально неприменим к одним задачам и даёт бесспорный выигрыш по большинству показателей качества в других, а некоторые подзадачи вообще остаются нерешёнными до разработки DSL[4].

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

См. также[править | править код]

  • Пользовательское программирование
  • Языково-ориентированное программирование
  • Порождающее программирование

Примечания[править | править код]

  1. А. Я. Фридланд, Л. С. Чанамирова. Информатика и компьютерные технологии: основные термины : толковый словарь. — Астрель, 2003.01.01. — 270 с. — ISBN 9785170145461.
  2. Bentley – Little languages, 1986.
  3. Martin Ward’s Homepage
  4. 1 2 3 Ward – Language Oriented Programming, 1994.
  5. Мартин Фаулер. Языковой инструментарий: новая жизнь языков предметной области. — 2005.
  6. Сергей Дмитриев (JetBrains). Языково-ориентированное программирование: следующая парадигма // = RSDN Magazine. — 2005.
  7. 1 2 3 4 Hudak – Modular Domain Specific Languages and Tools, 1998.
  8. 1 2 Taha – Domain-Specific Languages, 2008.
  9. Brett D. Hirsch. Digital Humanities Pedagogy: Practices, Principles and Politics. — Open Book Publishers, 2012. — 450 с. — ISBN 9781909254251.
  10. Mernik, 2012.
  11. 1 2 Czarnecki, O’Donnell, Striegnitz, Taha – DSL implementation in metaocaml, template haskell, and C++, 2004.
  12. Bernard Berthomieu. OO Programming Styles in ML. — LAAS Report #2000111, Centre National De La Recherche Scientifique Laboratoire d’Analyse et d’Architecture des Systèmes, 2000.
  13. Cello — library that introduces higher level programming to C
  14. Хопкрофт, Мотвани, Ульман – Теория автоматов, языков и вычислений, 2001.
  15. Schelog, 2003.
  16. Paulson – ML for the Working Programmer, 1996.
  17. Игорь Головин, Андрей Столяров. Мультипарадигмальный подход к преподаванию программирования и роль свободного ПО // МГУ имени Ломоносова, Тезисы докладов II конференции разработчиков свободных программ “На Протве”. — город Обнинск, 2005.

Дополнительные материалы для чтения

  • Dunlavey, «создавая лучшие приложения: теория эффективной разработки программного обеспечения» ISBN International Thomson Publishing 0-442-01740-5, 1994.
  • Констанс Эитмеие. Используя комплект инструментов SCR, чтобы определить требования к программному обеспечению. Слушания, второй семинар IEEE по промышленной силе формальные методы спецификации, Бока-Ратон, Флорида, 19 октября 1998.
  • Марьян Мерник, Ян Хиринг и Энтони М. Слоан. Когда и как развить проблемно-ориентированные языки. ACM Вычислительные Обзоры, 37 (4):316–344, 2005.
  • Diomidis Spinellis. Известные шаблоны для проблемно-ориентированных языков. Журнал Систем и программное обеспечение, 56 (1):91–99, февраль 2001.
  • Теренс Парр. Категорическая ссылка ANTLR: строительство проблемно-ориентированных языков. ISBN 978-0-9787392-5-6
  • Джеймс Лэрус. Расходы дивиденда Мура. ISSN:0001-0782. Коммуникации ACM. Том 52, выпуск 5 (май 2009).
  • Мартин Фаулер. Проблемно-ориентированные языки. ISBN 978-0-321-71294-3
  • Марко Брамбилья, Хорди Кэбот, Мануэль Виммер, Образцовое Ведомое Программирование на практике, предисловие Ричарда Соли (председатель OMG), Morgan & Claypool, США, 2012, Лекции Синтеза по Программированию #1. 182 страницы. Книга в мягкой обложке ISBN: 9781608458820, электронная книга ISBN: 9781608458837. http://www .mdse-book.com

Внешние ссылки

  • «Миниязыки», Искусство программирования Unix, Эриком С. Рэймондом
  • Мартин Фаулер на проблемно-ориентированных языках и Языковых Рабочих местах. Также в видео представлении
  • Проблемно-ориентированные языки: аннотируемая библиография
  • Однажды Компиляторы: Строительство маленького проблемно-ориентированного языка, используя OCaml
  • Ассоциация Usenix: конференция по проблемно-ориентированным языкам (DSL ’97) и 2-я конференция по проблемно-ориентированным языкам (DSL ’99)
  • Внутренние проблемно-ориентированные языки
  • пример jEQN внутреннего Проблемно-ориентированного Языка для Моделирования и Моделирования Расширенных Сетей Организации очередей.

Статьи

  • Внешний DSLs с технологией Затмения
  • Используя Acceleo с GMF: Создание презентаций от средства моделирования MindMap DSL
  • UML против проблемно-ориентированных языков
Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...