【问题标题】:Successful Domain-Specific Languages ? Which one do you use? [closed]成功的领域特定语言 ?你用哪一个? [关闭]
【发布时间】:2009-06-18 14:16:15
【问题描述】:

我对领域特定语言的设计和实现很感兴趣。 我知道的大部分 DSL 都来自学术界。

你能给我一些关于工业中实际使用的 DSL 的指点吗?并且你每天都在使用……真的很方便……

(我也对声明性语言感兴趣,但不是真正基于 xml 的语言...)...

我想建立一个(非详尽的)行业部署语言列表...我知道这很庞大...

有时,我使用通用语言来实现可以使用 DSL 轻松完成的事情。

编辑 我主要对面向应用程序的 DSL 感兴趣,而不是小型嵌入式语言。例如,SQL 匹配我正在寻找的内容,但嵌入在 java 中的 SQL 对我不感兴趣。 我正在寻找的另一种语言示例是 X#

【问题讨论】:

  • 我听说过 Lua,嘘。但还没有尝试过。
  • 您想要内部 DSL 还是外部 DSL?然而 Martin Fowler 正在写一本关于 DSL 的书(可免费下载)
  • 我知道 Martin Fowler 的这项工作...问题源于我昨天发现的 X#。我正在寻找这种 DSL
  • 我按照本网站lowcoupling.com/dslengineering中的说明设计了自己的 DSl

标签: dsl


【解决方案1】:

正则表达式语言是一种非常成功的 DSL,它拥有自己的 SO 标签。当然具体到字符串模式匹配的领域。

另一个流行的,但我没有经验的是 VHDL。 VHDL 之所以受欢迎,是因为它可以很容易地转换为用于 FPGA。

[编辑] 虽然它肯定不是图灵完备的,但 C 的 printf() 格式说明符可以被视为另一种特定于域的语言。

【讨论】:

  • 比我快 7 分钟...而且,是的,我想说正则表达式可能是最成功/最广泛使用的 DSL。
  • 同意,正则表达式非常难
【解决方案2】:

NMake、MSBuild、lex、yacc、bison、flex、TeX、PostScript、XAML、SSIS、Wix

【讨论】:

  • make、sh、cmd.exe、HTML、CSS、PHP(最初)、Perl(最初)、Regexp、LINQ、SQL、XQuery、XPath、XSLT、XML Schema、DTD、JavaDoc。此外,.NET 泛型中使用的约束语言(以及 Java 中的一种)。可以说,Excel。 Excel宏肯定。哎呀,甚至 C:它是用于在 DEC PDP 机器上编写 Unix 内核的领域特定语言。 (不幸的是,有些人将其误认为是通用语言......)这个列表还在继续
【解决方案3】:

EBNF 可能是其领域内使用最广泛的领域特定语言 - 一种描述语言的语言。

【讨论】:

    【解决方案4】:

    Wikipedia suggests 电子表格公式和 shell 脚本都是特定领域的语言。这将使它们成为传播最广的例子。

    【讨论】:

    • 有趣.. 我喜欢在 excel 中你必须使用基本函数式的符号:if(not(and(isblank(A$1),isblank(B$2))))
    • 电子表格公式我和你(和维基百科)100%。我不同意 shell 脚本——它们本质上是一种通用语言,因为它们几乎可以做任何事情。
    • 我不同意 shell 脚本不是 DSL。其中一些是图灵完备的,但它们仍然特定于以有意义的方式链接程序执行的领域。 Bash 就是一个典型的例子。它甚至没有算术,它调用其他工具(test、expr)来做非常基本的事情
    【解决方案5】:

    Awk 提供了一种用于处理半结构化文本数据的领域特定语言。
    许多广泛使用的更强大的 unix 命令行工具,例如 find 和 grep 可以归类为具有特定于域的语言(即使仅限于命令行参数)

    【讨论】:

    • 另外,shell 本身:它是一种特定于文件和进程管理领域的数据流语言。
    • 确实——我只是觉得它们本身就足够了
    【解决方案6】:

    我不知道您是否也想考虑图形 DSL。我会包括

    以上两个都是使用DSL Toolkit创建的。

    【讨论】:

    • 我应该再看一遍 DSL 工具……因为我在攻读博士学位时 J.M. Prieur 做了一个演示,所以没有看它。现在看来真的很成熟了
    • 非常成熟。 2010 beta 1 版本甚至具有允许模型相互引用的技术。在code.msdn.microsoft.com/DslTools 观看三个短片。此外,如果您从 2005 版本开始就没有看过,2008 版本通过输入路径解决了丑陋问题。你现在得到了很好的智能感知。
    【解决方案7】:

    这是我问过的一个关于用 Ruby 编写的 DSL 的问题:Ruby DSL (Domain Specific Language) repositories, examples

    除了 Ruby DSL,SQL 是非常流行的 DSL 的一个很好的例子,A​​WK 也是如此。

    【讨论】:

    • 谢谢我没有看到你的问题...
    【解决方案8】:

    MEL(Maya 表达式语言)是 AutoDesk Maya 在其整个设计中使用的命令行式语言。可以保存场景的 Maya Ascii 文件格式使用 MEL 来合成其场景。用户界面主要是使用 MEL 脚本构建和控制的。您可以用来驱动对象上的通道和属性的表达式是 MEL。

    我想在您只是为它编写脚本的情况下,技术上可以将它视为一种嵌入式语言。但是,如果没有 MEL,Maya 基本上就不会存在。没有ascii文件格式,没有用户界面等

    【讨论】:

      【解决方案9】:

      您可以编写一种特定领域的语言,例如 Boo,但我认为特定领域的定义表明大多数情况下它会出现在特定行业,甚至只是一家公司...

      Wikipedia 有一篇很好的介绍性文章。

      这个overview 有一个示例部分,其中包含一些很好的链接。

      【讨论】:

      • 我同意...实施 DSL 并不难,但问题是如何定位正确的社区并以正确的方式回答他们的问题。
      【解决方案10】:

      ruby on rails 的某些部分可以被视为特定领域的语言。特别是它用于指定关系表的语言。

      【讨论】:

        【解决方案11】:
        1. Mak Stealth 的字符行为编程语言(不要认为它有名字)
        2. 俚语 - 高盛语言(我听说过但从未使用过)
        3. CMS-2海军编程语言

        【讨论】:

        • CMS-2 不是特定领域的。它只是嵌入式编程语言的早期版本,例如 C。除非您认为 C 是特定领域的语言。
        【解决方案12】:

        谷歌的网页搜索支持部分increasingly sophisticated parametrization

        你可能会说这是最广泛使用的 DSL 之一,即使他们的一小部分用户群曾经使用过其中的一个,而不是标准的单词列表。

        【讨论】:

          【解决方案13】:

          Erlang 最初是一种电信专用语言,尽管它现在(偶尔)被用作通用语言。

          【讨论】:

            【解决方案14】:

            给我印象最深的两个(尚未提及)是:

            我是声明式 DSL 的忠实粉丝。可操作的 DSL(如 MapleMathematicaR 也不错,但与传统语言没有太大区别)。

            【讨论】:

              【解决方案15】:

              Tcl 是一门语言,最初被设计为构建 DSL 的框架——提供可编程性和 I/O 等基本功能,同时为每个应用程序重新创建特定领域的部分——并成长为通用脚本语言。更广为人知的基于 Tcl 的 DSL 之一是 Expect

              【讨论】:

                【解决方案16】:

                对于业务流程,我们有例如

                • BPEL,用 XML 表示,可执行
                • BPMN 是一种视觉语言,用于建模

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-01-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-09-06
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多