UML是域特定语言(DSL)吗?

HDa*_*ave 4 dsl uml programming-languages

将UML视为DSL是否合适?

我知道每个人都认为UML是绘制图片的一种方式,但是UML图的"视图"底层有一个模型......而UML中的"L"代表语言.

另一个问题 - SysML是DSL吗?

Ira*_*ter 7

UML 一种DSL.

"域特定语言"允许在狭窄的应用领域中指定问题或解决方案; 银行,电话电路设计,......区分DSL的一种方法是它不能进行通用计算(虽然有一些DSL可以).Java,C#,Python和COBOL无法通过此测试.(有人会说COBOL是针对"业务"的域特定的,但它唯一的严重让步是十进制数据类型,而C#也有.)ColdFusion未通过此测试; 非标准语法不是DSL制造的,但IIRC ColdFusion对生成HTML有一些支持.Fortran未通过此测试,但其数组(-section)子语言仅适用于数组而非通用计算.Verilog是专门针对特定领域的:它旨在让您记下数字电路.

UML侧重于指定软件结构的不同方面.[你会注意到它不能做通用计算; 一个标志].(它实际上有9个或更多不同的方面:类,状态图,部署,......我将坚持这个讨论的类方面).类图方面可以描述数据的组织方式和对数据的操作.您可以对软件进行争辩,因此它不能"特定于域".什么,构建软件不是一个问题领域?

SYSML专注于表达系统如何连接,因此它也适合这一类别.

问恕我直言的一个更有用的问题是,"如果我认为UML是DSL,我会获得什么?" 在这里,我认为你没有得到很多.当你争论一个你没有(设计或拥有)的点时,DSL的概念是有用的,这点对于一个常见问题具有更好的表现力,并且可能对于争论"你不想完全在其中实现你的系统"有用因为它不具备图灵能力".如果你想解释你的语言会有很多有趣的符号,这也很有用,正是因为它们有特殊用途.人们已经对UML了解了这一点,所以......没有学到任何东西.

虽然我是DSL的忠实粉丝,但我也是GPL(通用语言)的忠实粉丝.我认为在大型系统中你必然会发现两者兼而有之:用于表达简洁(减少工程和维护成本)的DSL,以及在系统部件之间提供任意计算和粘合的GPL.对我来说,一种语言的重要性是:

  • 它声称要解决的问题类别是什么,它有多好?
  • 什么是语法(并且它是问题域的相对标准)?
  • 什么是精确的语义(这是你学到的最多)?
  • 工具支持有多好?
  • DSL如何整合到大系统的其他部分?
  • 社区有多大和支持?

UML(15年后)已经得到了很好的答案.

本土DSL通常做得不好,部分原因是设计不佳,但往往是因为很难获得工具支持.我公司提供机械设备,为DSL建设者提供出色的支持,以改善这种状况.