domain-driven-design - Antlr 是 DSL 生成器还是有意编程的替代品?

标签 domain-driven-design antlr dsl intentional-programming

我对 Charles Simonyi 为建立意向编程领域所做的努力的雄心和创造力感到震惊,首先是在微软,然后是他自己的公司。

What exactly is Intentional Programming

http://en.wikipedia.org/wiki/Intentional_programming

In this approach to software, a programmer first builds a toolbox specific to a given problem domain (such as life insurance). Domain experts, aided by the programmer, then describe the program's intended behavior in a What You See Is What You Get (WYSIWYG)-like manner. An automated system uses the program description and the toolbox to generate the final program. Successive changes are only done at the WYSIWYG level.



它似乎是一种非常有用和实用的编程方法,可能会规避当前软件开发方法的许多问题。

从本质上讲,它似乎有助于非程序员(业务/系统分析师)创建特定于领域的语言,但处于比 UML 所能提供的更接近现实生活的阶段。他说它最终会完成,但还没有完成(将近 15 年后)。

DSL 运行的范围很广,从简单的 5 行规则引擎到复杂的应用程序,如 Ruby on Rails。因此,我认为发布他的产品的延迟与他正在处理简化更高级别的抽象这一事实有关,因为他必须基本上允许同时封装所有领域语言。

所以,我的问题是

(a) 是否Antlr可能是有意编程的替代方案 - 尽管可能是一种不太用户友好的替代方案,它需要程序员的干预而不是允许业务分析师生成 DSL? 您能否使用 Antlr 生成像 Ruby on Rails 这样的 DSL(假设它支持 Ruby 作为输出 - 我认为它不支持)?它不能做什么?另外,我不明白为什么它被称为“语言解析器”而不是“语言生成器”——因为后者描述了它的用途,而前者描述了它如何实现其最终结果。



(b) 如果 Antlr 与 Intentional Programming 不同,是否有类似 Intentional Programming 的东西?

最佳答案

在回答 b) 部分时,在类似空间中工作的三个系统是:

  • JetBrains MPS
  • Eclipse xText
  • MetaCase MetaEdit+

  • 这些产品中的每一种都有不同的优点和缺点,但都属于Language Workbenches 的类别。 . Intentional Software 的 Intentional Workbench 可能是迄今为止该类别中最雄心勃勃的产品,但也并非普遍可用。

    MPS 和 xText 是免费的开源产品。 MetaCase 是最成熟的,是商业产品。他们都有一个陡峭的学习曲线。

    关于domain-driven-design - Antlr 是 DSL 生成器还是有意编程的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499573/

    相关文章:

    java - DDD中如何实现Persistence Ignorance?

    c++ - boost.proto + 从特定领域的表达式包装器中展开表达式

    java - 从 Java 应用程序加载自定义 DSL 配置的更好方法

    php - 如何在 ValueObject 中使用可重用验证

    architecture - 了解 DTO 和贫血域模型

    c# - DDD - 跨限界上下文和数据库中不同模式的实体一致性

    java - Apache Camel - GSON JsonSerializer 在路线上使用

    error-handling - ANTLR语法-如何添加成员覆盖错误处理

    javascript - ANTLR 3 中针对 Javascript 的表达式解析器

    error-handling - 改进 ANTLR DSL 解析错误消息