5

难道 DSL 不能像 API 一样简单,因此不需要解析器吗?还是我误解了领域特定语言的真正含义?我认为它指的是解决特定领域问题的任何有组织的规则集。API 似乎符合这个定义,对吧?

4

5 回答 5

5

您可以将 DSL 嵌入到更通用的编程语言中。这通常是一个很好的解决方案。(你可以说这个 DSL 采用特定 API 的形式。)

您还可以使用自己的解释器创建一种单独的语言来表示您的领域的概念。这往往是一项更大的工作,而且通常没有必要。

于 2009-02-01T23:17:17.890 回答
4

您将概念与实现混淆了。领域特定语言是被认为与问题领域“接近”的想法的任何表示,而不是用于描述一般解决问题的通用语言。

是的,DSL 可能被实现为 API,它提供了引用问题域中特定概念的功能,但 DSL 在表示为文本文件时同样有效。

The Pragmatic Programmer: From Journeyman to Master很好地描述了 DSL 及其有用的环境,并附有示例。强烈推荐。

于 2009-02-01T23:15:20.763 回答
1

您仍然只有宿主语言的语义。

例如:命令式语言中的函数式编程不起作用。所以你有一个功能性的 DSL 添加到这个命令式语言中......

于 2009-02-01T23:02:03.503 回答
0

是的,绝对是——如果宿主语言有足够的灵活性来支持它,那么单纯的API 就可以很好地作为 DSL。

Ruby 是一种非常好的语言,特别是考虑到可选的括号和其他灵活性。

  • Rails 通常被称为用于编写数据库驱动的 Web 应用程序的 DSL。

  • Rake 是一个带有 DSL 的构建系统,用于编写(更智能的)makefile。

我自己的OOFILE是一个框架,您可以将其视为用 C++ 编写数据库应用程序的 DSL——它受到 dBase 的启发,并大量使用了 C++ 运算符重载、本地对象和流习语。

Forth 是一种经典的语言,它模糊了 DSL 和 API 之间的界限,因为 Forth 程序仅由一系列空格分隔的单词组成。可能 Forth DSL 最令人印象深刻的例子是Abundance - Abundance 是一种基于 Forth 的商业编程语言,用 BBL Forth 编写。BBL 是一个 32 位的 DOS FORTH 编译器。按原样分发。请参阅警告。这不适合胆小的人。主要是为第三世界开发软件的人感兴趣,您需要在旧的 klunker XT 和 AT 计算机上快速执行。您可以使用它编写一些非常复杂的数据输入程序,这些程序将围绕现代数据输入程序运行。

于 2009-02-01T23:32:37.890 回答
-2

当然,图形 DSL 根本不需要解析。

于 2009-05-11T17:55:44.353 回答