Что лучше для DSL: TCL или Lisp? - PullRequest
1 голос
/ 25 ноября 2008

Что лучше для DSL: TCL или Lisp? Что вы можете сказать о связывании Java (C #) - TCL и Lisp (схема)? Какой инструмент DSL применим для разработки .Net? (за исключением инструментов Microsoft DSL)

Ответы [ 8 ]

11 голосов
/ 25 ноября 2008

Если вы хотите легкий доступ к JVM, вы можете использовать Clojure.

Обратите внимание, что вы можете создавать DSL так, как вам хочется, вы не обязаны позволять любому «шутливому» синтаксису просвечивать. Мой любимый пример - в стандарте Common Lisp: расширенный синтаксис LOOP настолько безжалостен, насколько это возможно, и на самом деле это DSL для зацикливания, реализованный в макросе.

8 голосов
/ 26 ноября 2008

Если бы это был выбор между TCL и LISP, я бы пошел на TCL каждый раз. Отчасти потому, что я знаком с TCL, а отчасти потому, что легко дополнить TCL своими собственными командами и встроить его в другое программное обеспечение.

Для взаимодействия с JAVA у вас есть jacl и tclblend. http://tcljava.sourceforge.net/ является хорошей отправной точкой для этих пакетов или http://www.tcl.tk/ для всех вещей TCLish.

6 голосов
/ 25 ноября 2008

Я бы пошел со Схемой:)

Как уже говорилось, вам не нужно представлять DSL в виде лишнего кода.

Здесь - пример того, как я написал LINQ 'DSL' для схемы R6RS. (но ты должен это знать! только что увидел твой ник сейчас; P)

Также здесь - это второе воплощение.

Глядя на примеры внизу, видно, что в значительной степени, за исключением выражений (которые должны быть Scheme), ввод почти идентичен LINQ в C #.

4 голосов
/ 25 ноября 2008

Для DSL в .Net Boo - это действительно отличное место для начала. Парни из Unity3D используют его для своего скриптового языка «JavaScript», я думаю, что даже Second Life создает свой LindonScript2.0 или что-то с этим, и я думаю, что этот парень Айенде (Google для него) выпускает книгу об этом эти времена ...

3 голосов
/ 25 ноября 2008

Это действительно зависит от того, кто будет использовать DSL. Если вы ожидаете экспертов, не являющихся специалистами в области ИТ, то будет рекомендовано что-то простое и понятное, например, TCL. Серьезной проблемой было бы объяснение радости LISP для выпускников, не являющихся ИТ-специалистами, равно как и отладка большой программы LISP, написанной кем-то, кто не воспользовался LISP.

Равным образом кому-то написано, что b = a + 1 написано, B = INCR (A) тоже не такая хорошая идея.

Я бы порекомендовал Python, вы можете встроить специфичный для домена код в один или два специализированных класса. У вас есть язык, на котором пользователи, не являющиеся ИТ-специалистами, могут кодировать простые читаемые программы и где нет ограничений на то, что может программировать ИТ-специалист.

2 голосов
/ 26 ноября 2008

Я бы выбрал TCL вместо Lisp, если бы речь шла о более широкой цели для вашего приложения. Люди, скорее всего, захотят обрабатывать свои мысли вместо списков. :) (Спасибо, Лисп, за то, что дал мне представление о функциональном программировании, но я не думаю, что мы должны больше видеться, о, кстати, это не ты, это я;))

В дополнение к этому, я должен добавить, если только у вас нет веских причин (то есть, например, легкость или наличие особых требований DSL) Python или Javascript должен быть язык расширения в современном мире ИМХО.

пс. поскольку речь идет о .NET IronPython - это версия Python, которая вам больше нравится.

1 голос
/ 06 декабря 2008

Проверьте Блог Мартина Фаулера . Это то, что заставило меня начать с DSL. Свободные интерфейсы является DSL.

Ayende из известности RhinoMocks действительно выходит книга

Вот один из моих Внешних DSL примеров, которые я написал для C #. И вот что я написал в Lisp .

Нет опыта работы с TCL или JAVA для написания DSL.

0 голосов
/ 25 ноября 2008

Даже в Lisp, похоже, есть какие-то странные команды, такие как CDR (если вы не исходите из языка, не ориентированного на LIST). В TCL есть некоторые "странные" вещи. Вы должны рассмотреть, какой синтаксис подходит вашему мозгу больше всего.

например. если у вас нет проблем с очень разреженным синтаксисом и присваиванием переменных с помощью set, которые принимают TCL, то есть вам нужен более мощный и мощный синтаксис с большим количеством возможностей метапрограммирования, и вы не возражаете поставить все в круглые скобки и всегда начинать с такой оператор, как (+ 2 3) (а не 2 + 3), чем вы должны выбрать LISP.

...