Интересно, способен ли Dart выполнять закрытие во время выполнения с поддержкой такого делегата, на что способен Groovy? См. Этот пример для лучшего понимания: A Groovy DSL from scratch in 2 hours.Поддерживает ли Dart письменные встроенные DSL?
У меня есть DSL, написанная в Groovy для легкого определения записей в библиотеке MARC. Я хотел бы иметь возможность обрабатывать аналогичный сценарий Dart изначально, связывая вызовы определения класса делегата в моей программе.
record {
leader "00000nam a2200000 u 4500"
controlfield "001", "LIB001"
controlfield "005", "20120311123453.0"
datafield("100") {
subfield "a", "Author of record"
}
datafield("245", "0") {
subfield "a", "Title of record"
}
}
Вы можете удивиться: почему это не может быть выражено в JSON? С такой DSL я могу сделать намного больше, чем выражать данные. Поскольку он встроен, вы можете делать что-либо внутри DSL, что действительно на главном языке (в данном случае Groovy). Вы можете сделать цикл for, если вам нужно определять одно и то же несколько раз только с разными значениями, вы можете использовать выражения GString, вызывать базу данных, получать доступ к файлам и т. Д. С помощью DSLD IDE знает вашу концепцию так же, как если бы она всегда был частью языка, он может предложить вам инструменты помощи. Это очень выразительно и интуитивно понятно.
Аналогичная вещь для Дарта - это то, что я ищу.
Домен специфический язык - где код написан на одном языке, а ошибки даны в другом :) –
Не могли бы вы подробнее рассказать об этом? :) Я использую DSL в настоящее время только для небольших задач. Но, возможно, я должен быть более осторожным, прежде чем рассматривать его для чего-то большего. Есть ли какая-либо статья о недостатках DSL? – NagyI