Remove ads
З Вікіпедії, вільної енциклопедії
Предметно-орієнтована мова програмування (англ. Domain-specific language, DSL) — мова програмування, призначена для вирішення задач конкретної предметної галузі, яка дає особливе уявлення про проблему або специфічні методи її вирішення. Протилежністю предметно-орієнтованих мов є мови програмування загального призначення. Комп'ютерні мови спеціального призначення завжди існували в комп'ютерну епоху, але термін «предметно-орієнтована мова програмування», став більш популярним у зв'язку з розвитком моделювання у певних предметних галузях. Простіші предметно-орієнтовані мови програмування, особливо ті, що використовуються однією програмою, іноді неофіційно називають міні-мовами.
Розробка та використання відповідних предметно-орієнтованих мов програмування є ключовою частиною інженерії деяких галузей, де використання таких мов, придатних для відповідного типу задач може бути найоптимальнішим розв'язком проблеми. Мовно-орієнтоване програмування розглядає створення мов спеціального призначення для вираження проблем як стандартну частину процесу вирішення проблеми. Створення мови, спеціально для певного завдання (з програмним забезпеченням для її підтримки), замість повторного використання існуючої мови, може бути доцільним, якщо мова дозволяє чіткіше виразити певний тип проблеми чи рішення, ніж це дозволяє існуюча мова, і тип проблеми, про яку йдеться, з'являється досить часто. З прагматичної точки зору, предметно-орієнтована мова програмування може бути спеціалізованою для певної проблемної області, для конкретного способу подання проблеми, для конкретної техніки вирішення задачі або інших аспектів предметної області.
Предметно-орієнтована мова створена спеціально для вирішення проблем у певній сфері та не призначена для вирішення проблем поза нею (хоча це може бути технічно можливо). А от, мови загального призначення створюються для вирішення проблем у багатьох областях.
Межа між мовами загального призначення та мовами, специфічними для конкретних завдань, не завжди чітка, оскільки мова може мати спеціалізовані функції для певної задачі, але може бути застосована ширше, або навпаки, в принципі, може мати широке застосування, але на практиці використовується переважно для конкретних задач. Наприклад, спочатку Perl був розроблений як мова обробки тексту, але пізніше переважно використовувалася як мова програмування загального призначення. Навпаки, PostScript — це повна мова Тюрінга[en], і в принципі може використовуватися для будь-якого завдання, але на практиці вузько використовується як мова опису сторінки.
Предметно-орієнтована мова програмування є десь між маленькими мовами програмування та скриптовими мовами програмування, і часто використовується подібно до бібліотек мов програмування. Межі між цими поняттями досить розмиті, так само, як межі між скриптовими мовами та мовами загального призначення.
Деякі предметно-орієнтовані мови програмування з часом розширюються і включають повнофункціональні інструменти мови програмування, що ще більше ускладнює питання про те, чи є мова предметно-орієнтованою чи ні. Хорошим прикладом є функціональна мова XSLT, спеціально розроблена для перетворення одного графіку XML в інший, який був розширений з моменту його створення, щоб дозволити (особливо у версії 2.0) різні форми взаємодії з файловою системою, маніпулювання рядками та датами, введення даних.
Підводячи підсумок, можна навести таку аналогію: дуже маленька мова схожа на ніж, яким можна користуватися тисячами різних способів — від вирубки їжі до вирубки дерев. Предметно-орієнтована мова, схожа на електричну дриль: це потужний інструмент із широким спектром використання, але з певним контекстом, а саме — пробиванням дірок у певному предметі. Мова загального призначення — це повний робочий стіл із різноманітними інструментами, призначеними для виконання різноманітних завдань. Предметно-орієнтовані мови програмування повинні використовуватися програмістами, тоді, коли дивлячись на своє поточне завдання, вони розуміють, що їм потрібна краща деталізація, і конкретна предметно-орієнтована мова програмування забезпечує саме цей потрібний стек технологій.
Прикладами предметно-орієнтованих мов є мови виразів і макросів в електронних таблицях, мова регулярних виразів, мова граматики Yacc генератора парсерів тощо.
Порівняно з мовами програмування загального призначення, DSL близька до описових мов, як-от HTML, XML. Вона має специфічні особливості порівняно з мовами загального призначення, а саме:
Приклади предметно-орієнтованих мов включають HTML для створення макету сайту, Logo для олівцеподібного малювання, мови опису апаратних засобів Verilog та VHDL, MATLAB та GNU Octave для виконання математичних розрахунків, Mathematica, Maple та Maxima для проведення аналітичних[2] та числових обчислень і побудови графіків, Specification and Description Language[en] для реактивних та розподільних систем, формул та макросів електронних таблиць, SQL для запитів до реляційних баз даних, YACC для створення синтаксичного аналізу, регулярних виразів для лексичного аналізу, Generic Eclipse Modeling System[en] для створення мов діаграм, Csound для синтезу звуку та музики, мови введення GraphViz та GrGen, програмне забезпечення пакетів, що використовуються для компонування та переписування графіків, мова конфігурацій Hashicorp, яка використовується для Terraform[3] та інших інструментів Hashicorp[en] .
Скриптова мова GML, яка використовується ігровим рушієм GameMaker Studio[4] — це предметно-орієнтована мова програмування, яка орієнтована на програмістів початківців, для полегшення вивчення програмування. Хоча ця мова є сумішшю кількох мов, включаючи Delphi, C++ та BASIC, існує недолік структур, типів даних та інших функцій, які наявні у повноцінної мови програмування. Багато вбудованих функцій є «пісочницею»[5] для зручності перенесення. Мова в першу чергу допомагає будь-кому легко її засвоїти та розробити гру.
Скриптова мова ColdFusion — це ще один приклад предметно-орієнтованої мови для вебсайтів, які працюють на основі баз даних. Ця скриптова мова використовується для об'єднання таких мов та послуг, як Java, .NET, C++, SMS, електронна пошта, сервери електронної пошти, http, ftp, служби каталогів та файлові системи для використання на вебсайтах.
Мова розмітки ColdFusion (CFML) містить набір тегів, які можна використовувати на сторінках ColdFusion для взаємодії з джерелами даних, маніпулювання даними та відображення результатів. Синтаксис тегів CFML подібний до синтаксису елементів HTML.
Erlang Open Telecom Platform спочатку була розроблена для використання всередині Ericsson як предметно-орієнтована мова. Сама мова пропонує платформу бібліотек для створення кінцевих автоматів, загальних серверів та менеджерів подій, які швидко дозволяють інженерам розгортати програми або підтримувати бібліотеки, які, як було показано в галузевих тестах, перевершують інші мови, призначених для різних предметних областей, такі як C та C++. Зараз мова офіційно відкрита і її можна завантажити з їхнього вебсайту.
FilterMeister[6] — це середовище програмування з мовою програмування, засноване на C, з конкретною метою створення плагінів фільтра обробки зображень, сумісних із Photoshop. FilterMeister працює як плагін Photoshop, і він може завантажувати та виконувати скрипти або компілювати та експортувати їх як незалежні плагіни. Хоча мова FilterMeister відтворює значну частину мови C, вона містить лише ті функції, які можна використовувати в контексті плагінів Photoshop, і додає ряд специфічних функцій, корисних лише у цій конкретній галузі.
Існує великий інтерес до предметно-орієнтованих мов програмування для підвищення продуктивності та якості програмного забезпечення. Предметно-орієнтована мова може забезпечити надійний набір інструментів для ефективної інженерії програмного забезпечення. Такі інструменти починають пробиватися в розвиток важливих систем програмного забезпечення.
Прикладом цього є Software Cost Reduction Toolkit[7]. Набір інструментів — це набір утиліт, включаючи редактор специфікацій для створення специфікації вимог, браузер діаграми для відображення змінних залежностей, перевірка узгодженості для виявлення відсутніх випадків у добре сформованих формулах у специфікаціях, перевірка моделі та автоматизований доказ теорем для перевірки властивості програми відповідно до специфікацій та генератор інваріантів, який автоматично будує інваріанти на основі конкретних вимог.
Новішою розробкою є мовно-орієнтоване програмування[en], інтегрована методологія інженерного програмного забезпечення, заснована переважно на створенні, оптимізації та використанні предметно-орієнтованих мов.
Доповнення до мовно-орієнтованого програмування, як і до всіх інших форм предметно-орієнтованих мов, є клас засобів написання компіляторів, які називаються метакомпіляторами[en]. Метакомпілятор не тільки корисний для генерації синтаксичних аналізів та генераторів коду для предметно-орієнтованих мов, але сам метакомпілятор компілює предметно-орієнтовану метамову, спеціально розроблену для області метапрограмування.
Крім синтаксичного аналізу предметно-орієнтованих мов, метакомпілятори корисні для створення широкого спектру інструментів програмного забезпечення та аналізу. Методологія метакомпілятора часто зустрічається в системах трансформації програм.
Метакомпілятори, які зіграли значну роль як в інформатиці, так і в комп'ютерній промисловості, включають Meta-II[8] та його нащадка TreeMeta[9].
Unreal і Unreal Tournament представили мову під назвою UnrealScript. Це дозволило швидко розвивати модифікації порівняно з конкурентом Quake (який використовує двигун Id Tech 2). Двигун Id Tech використовував стандартний код C, це означає, що C потрібно вивчити та належним чином застосувати, тоді як UnrealScript був оптимізований для зручності використання та ефективності. Подібним чином, при розробці новітніх ігор з'явилися власні орієнтовані мови. Ще одним поширеним прикладом є Lua для створення скриптів.
Статистичне моделювання розробило предметно-орієнтовані мови, такі як R (реалізація мови S), Bugs[en], Jags[en] та Stan[en]. Ці мови забезпечують синтаксис для опису байєсової моделі та генерують метод її вирішення за допомогою моделювання.
Gherkin[en][10] — це мова, призначена для визначення тестових випадків для перевірки поведінки програмного забезпечення, не вказуючи, як ця поведінка реалізована. Він призначений для читання та використання людьми, які не є кваліфікованими програмістами, з використанням синтаксису природної мови та лінійно-орієнтованого дизайну. Потім тести, визначені за допомогою Gherkin, повинні бути реалізовані загальною мовою програмування.
Інші яскраві приклади предметно-орієнтованих мов програмування:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.