Опыт работы с DSL (Инструменты) в .NET - PullRequest
0 голосов
/ 03 января 2011

Я ищу хороший инструмент DSL / Framework, который отвечает следующим критериям:

  • Может использоваться с / из C #
  • Работает в Windows Azure - компилятор может бытьгенерируется где угодно, но фактический анализ выполняется в облаке
  • Как можно быстрее и эффективнее ресурсов

Я хочу, чтобы пользователи могли задавать правила, которые затем интерпретируются программой,DSL - это в основном подмножество любого языка сценариев - математические операции, операторы if, манипуляции со строками и т. Д. - которые работают с объектами домена (например, if (SomeComponent.Child3.SomeProperty > 3) SomethingElse.Color = Color(50,0,0)).
Так как правила будут создавать пользователи, я думаюбыло бы плохой идеей использовать настоящий язык сценариев, такой как IronPhyton (пахнет SqlInjection, но хуже), также я не хочу, чтобы пользователи фактически программировали, поэтому синтаксис должен быть настолько простым и легким для понимания, насколько это возможно, таким образом, DSL.

Инструменты, на которые я наткнулся до сих пор:

  • FsLex / FsYacc .У меня нет опыта работы с F #, но из того, что я слышал, я могу интегрировать его в решения C #, так что это звучит довольно хорошо.
  • SDK для визуализации и моделирования - доменные языки .Не уверен насчет этого - похоже, что это то же самое, что и выше + пользовательский интерфейс desigenr, который мне не нужен / не нужен.

... плюс многие другие, о которых я читал здесьна SO, но пока не рассматривал подробно (например, Осло / MGrammar, Boo, Antlr ...)

Что именно я спрашиваю?
1. Какие инструменты длясоздание DSL в C # (или .NET), я должен подробно рассмотреть, что вы предлагаете мне использовать?
2. С какими DSL у вас есть опыт, каково ваше мнение?Является ли определенная технология громоздкой, медленной, устаревшей, подлежащей замене / отмене?Дай мне знать, пожалуйста.

Ответы [ 4 ]

6 голосов
/ 30 января 2011

Вы, кажется, провели немало исследований, и я понимаю, что вы имеете в виду, что язык М выглядит так, как будто его отбрасывают.Однако я не думаю, что он действительно выйдет из-под контроля, так как команда sqlserver, похоже, его проглотила.(Кто в последнее время выступил с самыми интересными разработками для .net -> Reactive Extensions, IQbservable, Linq to Anything)

Я бы посмотрел: http://channel9.msdn.com/Blogs/Charles/Jeffrey-Snover-Martin-Fowler-and-Neil-Ford-Domain-Specific-Languages икраткое прочтение http://blogs.msdn.com/b/powershell/archive/2008/10/09/domain-specific-languages-dsls-in-general-and-how-powershell-relates.aspx

Немного предыстории, Джеффри Сновер - создатель Powershell, и это принесло ему повышение в Head of Window Server.Snover, Eini и Fowler согласны с тем, что для написания внешнего DSL требуется значительно больше усилий, чем для внутреннего DSL.Существует также аргумент, что внешние DSL по сути являются тупиковыми навыками.Это потому, что они применимы только к своей области.Точно так же и рамки.Это, как правило, внешний язык, который имеет внешнее значение.

Более того, это различие между синтаксисом DSL и словарем DSL.Написав внешний DSL, вы фактически пишете оба аспекта, в то время как если вы встраиваете свой DSL в другой язык, вам нужно только указать словарь DSL.

Так как такой Powershell очень хорошо подходит для DSL,поскольку он обрабатывает замыкания как объекты первого класса (скриптовые блоки).Это будущее также гарантировано, что с существующими во всех версиях окон.Для размещения PowerShell в приложении требуется всего несколько ссылок и несколько строк кода, и он имеет полный доступ к системе типов .net.Фактический акт написания DSL в PowerShell является тривиальным.

Дуглас Финке MVP, является превосходным ресурсом, касающимся как DSL, так и Powershell

Старая запись DSL: http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/ Пример того, как тривиально создать достойные DSL.http://www.dougfinke.com/blog/index.php/2009/03/18/powershell-dsl-for-deploying-biztalk-applications/

http://www.dougfinke.com/blog/index.php/2008/03/24/fluent-interfaces-dsl-and-language-oriented-programming/

Если вы новичок в PowerShell, у него есть быстрый пример: http://www.dougfinke.com/blog/index.php/2011/01/10/how-to-practice-powershell/, хотя я бы порекомендовал получить «Powershell в действии»,2nd Edition ', в качестве полной ссылки, есть раздел, посвященный написанию DSL в powershell (он был написан правой рукой Snover в команде powershell).

Вы, похоже, описываете написаниеполный внешний DSL: по сути, язык.Возможно, вы захотите взглянуть на несколько многословный CodeDom, а также DLR (http://dlr.codeplex.com)

Для фона в качестве основы для многих из этих вещей, вы бы хорошо посоветовалиначать изучать продолжающиеся продолжения и другие методы, впервые использованные в LISP / Scheme.Достопочтенный SICP http://mitpress.mit.edu/sicp/ и http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/ и http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html Как это бывает, LISP / Scheme являются идеальными языками для написания DSL и других языков, и если вы еще этого не сделали,просто изучая их, вы улучшите свое программирование именно в тех областях, которые вы ищете прямо сейчас.

Вы также упоминаете, что хотели бы поработать над лазурным облаком.В качестве дополнительной, но очень информативной справочной статьи, я бы порекомендовал посмотреть описание Бартом Де Сметом, как microsoft расширила свою «подсчетную экосистему» ​​для обслуживания масштабируемых и распределенных систем.http://community.bartdesmet.net/blogs/bart/archive/2008/10/20/linq-to-anything-channel-9-interview-and-a-few-more-thoughts.aspx

Если вы собираетесь заниматься разработкой powershell, в блоге Барта есть несколько оригинальных статей (с полными и понятными примерами кода) на эту тему, в том числе о том, как взять их и установить интерфейс MMC 3.поверх них.

Независимо от того, что вы в конце концов выберете, из болезненного личного опыта: напишите внутренние DSL, они быстрее, проще, меньше затрат, более низкая кривая обучения, вы не занимаетесь подготовкой в ​​областях, которыевостребован на резюме.Как вы можете сказать, я рекомендую Powershell по всем этим предыдущим причинам плюс доступ ко всем необходимым ресурсам .Net / COM / WMI / Webservice.Плюс это будущее гарантировано.

В любом случае, я надеюсь, что это поможет, и удачи.

1 голос
/ 03 января 2011
0 голосов
/ 04 января 2011

Вы можете попробовать http://www.meta -alternative.net / mbase.html

0 голосов
/ 03 января 2011

Вы пробовали ANTLR ?

...