对DSL有什么好处:TCL或Lisp? 您对Java(C#)有什么看法 - TCL绑定与Lisp(Scheme)? 什么DSL工具适用于.Net开发? (Microsoft DSL工具除外)
答案 0 :(得分:11)
如果您想轻松访问JVM,可以使用Clojure。
请注意,您可以按照自己想要的方式设计DSL,不必让任何“lispy”语法闪现。我最喜欢的例子是Common Lisp标准:扩展的LOOP语法就像它得到的一样,实际上它是用于循环的DSL,在宏中实现。
答案 1 :(得分:8)
如果它是TCL和LISP之间的选择,我每次都会选择TCL。部分是因为我熟悉TCL,部分原因是很容易用自己的命令扩展TCL并将其嵌入到其他软件中。
对于JAVA交互,你有jacl和tclblend。对于这些软件包,http://tcljava.sourceforge.net/是一个很好的注意事项,对于TCLish所有事情,http://www.tcl.tk/都是{{3}}。
答案 2 :(得分:6)
我会选择Scheme:)
如上所述,您不必将DSL呈现为lispy代码。
Here是我为R6RS Scheme编写LINQ'DSL'的一个例子。 (但你应该知道!现在只看到你的昵称; P)
同样here是第二个化身。
查看底部的示例,显示除了表达式(必须是Scheme)之外,输入几乎与C#中的LINQ相同。
答案 3 :(得分:4)
对于.Net上的DSL,Boo是一个非常好的起点。 Unity3D背后的人正在使用它作为他们的“JavaScript”脚本语言,我认为即使是Second Life正在创建他们的LindonScript2.0或其他东西,我认为这个人Ayende(谷歌为他)推出了一本关于它的书这些时间......
答案 4 :(得分:3)
这实际上取决于谁将使用DSL。 如果您期待非IT领域专家,那么建议使用像TCL这样简单明了的东西。向非IT毕业生解释LISP的乐趣将是一个严重的问题,因为调试由没有制作LISP的人编写的大型LISP程序。
同样地向某人表示b = a + 1被写入B = INCR(A)也不是一个好主意。
我建议使用Python,您可以将特定于域的代码嵌入一个或两个专业类中。您有一种语言,非IT用户可以编写简单易读的程序,并且对IT专家可以编码的内容没有限制。
答案 5 :(得分:2)
如果您的应用程序的更广泛目标存在问题,我会在任何一天选择TCL而不是Lisp。人们更可能想要处理他们的想法而不是列表。 :)(谢谢Lisp,给我一个函数式编程的视角,但我认为我们不应该再看到对方了,哦,顺便说一句,不是你,不是你,而是我;)
除此之外,我必须补充一下,除非你有充分的理由(比如轻量级或具有非常特殊的DSL需求) Python 或 Javascript 应该是当今世界恕我直言的推广语言。
PS。因为这是关于.NET IronPython是你最喜欢的Python版本。
答案 6 :(得分:1)
结帐Martin Fowler's Blog。这是让我开始使用DSL的原因。 Fluent Interfaces有点像DSL。
来自RhinoMocks的Ayende成名确实有一本书出现
这是我为C#编写的External DSL示例之一。这是我在Lisp中写的内容。
没有使用TCL或JAVA编写DSL的经验。
答案 7 :(得分:0)
即使Lisp似乎也有一些奇怪的命令,如CDR(如果你不是来自非LIST导向的语言)TCL有一些“怪异”的东西。你必须考虑哪种语法最适合你的大脑。
e.g。如果您对语法非常稀疏没有问题并且使用set分配变量,那么需要使用TCL,ich您需要更丰富,非常强大的语法以及大量的元编程功能,并且您不介意将所有内容放在圆括号中并始终以操作员喜欢(+ 2 3)(而不是2 + 3)而不是你应该选择LISP。