Хоча я досить нова в самій концепції літературного програмування (і тому, ймовірно, я цілком пропускаю човен), здається, дуже сильно відповідати концепції DSL .
Ідея DSL полягає в тому, щоб перебрати область проблем в просту, орієнтовану на природну мову граматику, яка може бути використана для побудови алгоритмів для вирішення цих проблем.
Як на мене, ця сама ідея або, принаймні, її основна основа, однакова або принаймні тісно пов'язана з грамотним програмуванням.
Наприклад, у бурхливому світі, наприклад, існує сильний поштовх до використання DSL більш регулярно та створення нових DSL для вирішення загальних проблем. Цей поштовх походить від обох інструментів на мові (прості будівельники), а також основних бібліотек, що підтримують API на основі DSL.
Зважаючи на те, що тенденція, принаймні в цьому куточку світу, спрямована на грамотне програмування, я б сказав, що до цього варто прагнути.
На жаль, рівень мислення, необхідний для створення хорошого DSL, часто перевищує більшість програмістів, від того, що я бачив. Я знаю, що особисто борюся з деякими поняттями, необхідними час від часу. Можливо, саме ця складність завадила таким методам набути більшого поширення.
Це ваш класичний випадок, коли ви користуєтесь інструментом - це одне, але його створення - на зовсім іншому рівні.
Щоб трохи розширити свою точку зору, не стільки, що DSL - це те саме, що і грамотне програмування, а саме те, що вони роблять грамотне програмування набагато більш можливим . Особливо, коли вони є природними мовами DSL .
У версії 1.8 groovy можливість DSL на природній мові була значно покращена за рахунок додавання більш потужних командних ланцюгів.
Наприклад, такі рядки коду програмування , а не тільки псевдо-пропозиції:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Примітка: Зразок коду походить з блогу Гійом Лафордж
Основна ідея грамотного програмування полягає в тому, що природна мова зрозуміліша для людини, і саме це має значення. На мою думку, можливості DSL щодо природних мов Groovy роблять це набагато ближчою реальністю. Особливо, коли ці DSL використовуються для створення бізнес-правил для програми.
Вміння «кодувати» критичні компоненти системи, використовуючи природну мову, - це сама суть грамотного програмування. Наявність переплетення природної мови з шматками коду - це нахабна форма грамотного програмування. Хоча я корисний, я вважаю, що DSL-програми з натуральною мовою, які дозволяють використовувати природну мову як код, є величезним стрибком вперед.
Розширення можливостей програмування взагалі є наступним кроком у процесі, але значною мірою інструменти для цього вже є. Так, ще немає "загальної" DSL, але для менших доменів можливості є.
Для отримання додаткових прикладів цього дії (не в певному порядку):