1

什么更适合 DSL:TCL 还是 Lisp?你对 Java(C#)-TCL 绑定与 Lisp(Scheme) 有什么看法?什么 DSL 工具适用于 .Net 开发?(Microsoft DSL 工具除外)

4

8 回答 8

11

如果您想轻松访问 JVM,可以使用 Clojure。

请注意,您可以以任何您想要的方式设计 DSL,您不必让任何“lispy”语法大放异彩。我最喜欢的例子是 Common Lisp 标准:扩展的 LOOP 语法是 unlispy 的,事实上,它是一个用于循环的 DSL,在宏中实现。

于 2008-11-25T12:20:02.180 回答
8

如果是 TCL 和 LISP 之间的选择,我每次都会选择 TCL。部分是因为我熟悉 TCL,部分是因为使用自己的命令扩展 TCL 和将其嵌入到其他软件中都很容易。

对于 JAVA 交互,你有 jacl 和 tclblend。http://tcljava.sourceforge.net/是这些软件包的一个很好的起点,或者http://www.tcl.tk/对于 TCLish 的所有东西。

于 2008-11-26T10:45:58.983 回答
6

我会选择Scheme :)

如前所述,您不必将 DSL 呈现为 lispy 代码。

是我如何为 R6RS 方案编写 LINQ 'DSL' 的示例。(但你应该知道!现在才看到你的昵称;P)

这里还有第二个化身。

查看底部的示例,显示除了表达式(必须是 Scheme)之外,输入几乎与 C# 中的 LINQ 相同。

于 2008-11-25T13:03:23.810 回答
4

对于 .Net 上的 DSL,Boo是一个非常好的起点。Unity3D 背后的人正在将它用于他们的“JavaScript”脚本语言,我认为即使是 Second Life 也在用它创建他们的 LindonScript2.0 或其他东西,我认为这个人 Ayende(他的谷歌)正在出版一本关于它的书这些时候...

于 2008-11-25T13:07:07.703 回答
3

这实际上取决于谁将使用 DSL。如果您期待非 IT 领域专家,那么建议您使用像 TCL 这样简单明了的东西。向非 IT 专业的毕业生解释 LISP 的乐趣将是一个严重的问题,就像调试一个没有深入了解 LISP 的人编写的大型 LISP 程序一样。

同样向某人解释 b = a + 1 写成 B = INCR(A) 也不是一个好主意。

我会推荐 Python,你可以将特定领域的代码嵌入到一两个专业类中。您拥有一种语言,非 IT 用户可以编写简单易读的程序,并且 IT 专家可以编写的代码没有限制。

于 2008-11-25T11:08:32.543 回答
2

如果您的应用程序有更广泛的目标,我会选择 TCL 而不是 Lisp。人们更有可能想要处理他们的想法而不是列表。:) (感谢 Lisp,让我了解函数式编程,但我认为我们不应该再见面了,哦,顺便说一句,不是你,是我;))

除此之外,我必须补充一点,除非您有充分的理由(例如,轻量级或有非常特定的 DSL 需求)PythonJavascript应该是当今世界恕我直言的扩展语言。

附言。因为这是关于 .NET IronPython是您最好喜欢的 Python 版本。

于 2008-11-26T11:03:07.717 回答
1

查看Martin Fowler 的博客。这就是我开始使用 DSL 的原因。 Fluent Interfaces是一种 DSL。

来自 RhinoMocks 成名的Ayende确实有一本书出来了

这是我为 C# 编写的外部 DSL示例之一。这是我用Lisp写的。

没有使用 TCL 或 JAVA 编写 DSL 的经验。

于 2008-12-06T11:10:47.607 回答
0

甚至 Lisp 似乎也有一些奇怪的命令,比如 CDR(如果你不是来自非面向 LIST 的语言)TCL 有一些“奇怪”的东西。您必须考虑哪种语法最适合您的大脑。

例如,如果您对非常稀疏的语法和使用 set 分配变量没有任何问题,这需要 TCL,如果您想要一个更丰富、非常强大的语法并具有很多元编程能力,并且您不介意将所有内容放在圆括号中并始终开始使用像 (+ 2 3) (而不是 2 + 3)这样的运算符时,您应该选择 LISP。

于 2008-11-25T11:42:21.040 回答