什么更适合 DSL:TCL 还是 Lisp?你对 Java(C#)-TCL 绑定与 Lisp(Scheme) 有什么看法?什么 DSL 工具适用于 .Net 开发?(Microsoft DSL 工具除外)
8 回答
如果您想轻松访问 JVM,可以使用 Clojure。
请注意,您可以以任何您想要的方式设计 DSL,您不必让任何“lispy”语法大放异彩。我最喜欢的例子是 Common Lisp 标准:扩展的 LOOP 语法是 unlispy 的,事实上,它是一个用于循环的 DSL,在宏中实现。
如果是 TCL 和 LISP 之间的选择,我每次都会选择 TCL。部分是因为我熟悉 TCL,部分是因为使用自己的命令扩展 TCL 和将其嵌入到其他软件中都很容易。
对于 JAVA 交互,你有 jacl 和 tclblend。http://tcljava.sourceforge.net/是这些软件包的一个很好的起点,或者http://www.tcl.tk/对于 TCLish 的所有东西。
对于 .Net 上的 DSL,Boo是一个非常好的起点。Unity3D 背后的人正在将它用于他们的“JavaScript”脚本语言,我认为即使是 Second Life 也在用它创建他们的 LindonScript2.0 或其他东西,我认为这个人 Ayende(他的谷歌)正在出版一本关于它的书这些时候...
这实际上取决于谁将使用 DSL。如果您期待非 IT 领域专家,那么建议您使用像 TCL 这样简单明了的东西。向非 IT 专业的毕业生解释 LISP 的乐趣将是一个严重的问题,就像调试一个没有深入了解 LISP 的人编写的大型 LISP 程序一样。
同样向某人解释 b = a + 1 写成 B = INCR(A) 也不是一个好主意。
我会推荐 Python,你可以将特定领域的代码嵌入到一两个专业类中。您拥有一种语言,非 IT 用户可以编写简单易读的程序,并且 IT 专家可以编写的代码没有限制。
如果您的应用程序有更广泛的目标,我会选择 TCL 而不是 Lisp。人们更有可能想要处理他们的想法而不是列表。:) (感谢 Lisp,让我了解函数式编程,但我认为我们不应该再见面了,哦,顺便说一句,不是你,是我;))
除此之外,我必须补充一点,除非您有充分的理由(例如,轻量级或有非常特定的 DSL 需求)Python或Javascript应该是当今世界恕我直言的扩展语言。
附言。因为这是关于 .NET IronPython是您最好喜欢的 Python 版本。
查看Martin Fowler 的博客。这就是我开始使用 DSL 的原因。 Fluent Interfaces是一种 DSL。
来自 RhinoMocks 成名的Ayende确实有一本书出来了
这是我为 C# 编写的外部 DSL示例之一。这是我用Lisp写的。
没有使用 TCL 或 JAVA 编写 DSL 的经验。
甚至 Lisp 似乎也有一些奇怪的命令,比如 CDR(如果你不是来自非面向 LIST 的语言)TCL 有一些“奇怪”的东西。您必须考虑哪种语法最适合您的大脑。
例如,如果您对非常稀疏的语法和使用 set 分配变量没有任何问题,这需要 TCL,如果您想要一个更丰富、非常强大的语法并具有很多元编程能力,并且您不介意将所有内容放在圆括号中并始终开始使用像 (+ 2 3) (而不是 2 + 3)这样的运算符时,您应该选择 LISP。