DSL不能像API一样简单,因此不需要解析器吗?或者我误解了域特定语言到底是什么?我认为它提到了解决特定域问题的任何有组织的规则集。 API似乎符合该定义,对吗?
答案 0 :(得分:5)
您可以在更通用的编程语言中嵌入DSL。这通常是一个很好的解决方案。 (你可以说这个DSL采用特定API的形式。)
您还可以使用自己的解释器创建单独的语言,以表示域的概念。这往往是一项更大的工作,而且往往没有必要。
答案 1 :(得分:4)
您将这个概念与实施混淆了。特定于域的语言是被认为与问题域“接近”的想法的任何表示,而不是用于解释一般问题的描述的通用语言。
是的,DSL可以作为API实现,它提供了涉及问题域中特定概念的功能,但DSL在表示为文本文件时同样有效。
实用程序员:从Journeyman到Master 包含对DSL的良好描述及其有用的环境,并附有示例。强烈推荐。
答案 2 :(得分:1)
你仍然只有宿主语言的语义。
例如:命令式语言中的函数式编程不起作用。所以你有一个功能性的DSL添加到这种命令式语言......
答案 3 :(得分:0)
是的,绝对 - 如果主机语言具有足够的灵活性来支持它,仅仅 API就可以很好地用作DSL。
Ruby是一种非常好的语言,特别是考虑到可选的parens和其他灵活性。
Rails通常被称为DSL 用于编写数据库驱动的Web 应用
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计算机上快速执行的第三世界开发软件的人来说,这将是有趣的。您可以使用它编写一些非常复杂的数据输入程序,这些程序将围绕现代数据输入程序运行。
答案 4 :(得分:-2)
当然,图形DSL根本不需要解析。