Что лучше для DSL: TCL или Lisp?

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


person macropas    schedule 25.11.2008    source источник
comment
Уточните, пожалуйста, этот вопрос - о каком DSL идет речь? acronymfinder.com/Information-Technology/DSL.html   -  person warren    schedule 25.11.2008
comment
Конечно, доменный язык (не цифровая абонентская линия) :)))   -  person macropas    schedule 25.11.2008
comment
Небольшое дополнение: TCL — язык команд инструментов, а не язык ограничений трейдера или язык управления транзакциями;)   -  person macropas    schedule 25.11.2008


Ответы (8)


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

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

person Svante    schedule 25.11.2008

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

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

person Jackson    schedule 26.11.2008

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

Как уже было сказано, вам не нужно представлять DSL как шепелявый код.

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

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

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

person leppie    schedule 25.11.2008
comment
Я восхищаюсь вашей замечательной работой (IronScheme), но мне кажется, что макросы Common Lisp проще, чем макросы Scheme ;) И IronScheme сейчас не завершенный проект (бета). Я боюсь использовать его в своей работе (но я слежу за его продвижением!) - person macropas; 25.11.2008
comment
Хорошо, я пока не буду рекомендовать IronScheme для коммерческого использования, но, надеюсь, через несколько месяцев :) - person leppie; 26.11.2008
comment
Ссылка на LINQ DSL немного изменилась (не могу редактировать пост): ironscheme.svn.codeplex.com/svn/IronScheme/IronScheme.Console/ - person ThomasH; 25.08.2009

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

person Thomas Hansen    schedule 25.11.2008

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

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

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

person James Anderson    schedule 25.11.2008
comment
Вы не обязаны использовать шепелявый синтаксис в своем DSL только потому, что вы реализуете его на Лиспе. Например, взгляните на расширенный синтаксис loop в Common Lisp, который является очень простым DSL для циклов. - person Svante; 25.11.2008
comment
Я не думаю, что Python обладает хорошими способностями к метапрограммированию. И я скорее ускорю процесс разработки, чем буду помогать специалистам, не связанным с ИТ. - person macropas; 25.11.2008
comment
Чистый синтаксис Tcl в приведенном вами примере будет установлен B [incr a]. И, хотите верьте, хотите нет, но на Tcl можно написать DSL, допускающий что-то вроде b = a+1. - person Bryan Oakley; 25.11.2008
comment
Брайан -- ваше право установлено B [incr a]. Простите, я не занимался TCL с прошлого века. - person James Anderson; 25.11.2008
comment
Это должно быть установлено b [expr $a + 1] при условии, что вы не хотите изменять значение, хранящееся в переменной a - person Joseph Bui; 01.12.2008

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

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

пс. поскольку речь идет о .NET, IronPython — это версия Python, которую вы лучше как.

person utku_karatas    schedule 26.11.2008

Посетите блог Мартина Фаулера. Это то, что заставило меня начать с DSL. Fluent Interfaces — это своего рода DSL.

У Ayende, известной благодаря RhinoMocks, выходит книга

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

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

person Community    schedule 06.12.2008

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

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

person sir_lichtkind    schedule 25.11.2008
comment
Опять же, вам не нужно использовать шепелявый синтаксис в вашем DSL. - person Svante; 25.11.2008