我想知道部署必须至少以两种语言(Java,C#)运行并且可能更多(Python,可能还有Javascript)的领域特定语言的好策略。编写便携式域特定语言
一些背景。我们已经开发并部署了一个当前用C#编写的领域特定语言。它通过一系列方法调用进行部署,其参数是公共语言基元(字符串,double等),集合(IEnumerable,HashSet,...)或特定于领域的库(CMLMolecule,Point3,RealSquareMatrix)中的对象。这个库已经过很好的测试,对象必须遵守一个稳定的部署XML模式,所以变化将会演化和管理(至少这是希望)。
我们希望这个语言能够被广泛和部分计算机使用的社区使用,用于在没有中央控制的情况下攻击他们自己的解决方案。理想情况下,DSL将创建一定程度的封装并产生他们所需的基本功能。图书馆将管理多种多样而详细的算法。 DSL的要求在Domain-specific languages vs. library of functions中有很多共同之处。
我很欣赏最好的体系结构(很明显,一旦部署,我们不能轻易回溯)。选项至少包括:
- 创建IDL(例如通过CORBA)。 W3C为XML DOM做了这样的工作 - 我讨厌它 - 并且它似乎是过度杀伤
- 手动为每个平台创建类似的签名并尽力保持它们的同步。
- 创建可解析语言(例如CSS)。
- XML声明式编程(c.f. XSLT)。这是我的首选解决方案,因为它可以被搜索,操纵等。
性能并不重要。明确的目的是。
编辑有关应用程序调用是否构成DSL的讨论。我发现了Martin Fowler对DSL的介绍(http://martinfowler.com/dslwip/Intro.html),他认为简单的方法调用(或者链接调用)可以称为DSL。等等一系列这样的:
point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
可以被认为是DSL
了很大的负面在XML表达的任何语言。你打算让开发人员直接使用XML或者是存储/运行时格式?发明ANT的人说XML是错误的选择,如果他能改变事情,他会选择不同的方式。 – SteveD 2009-10-08 14:10:55
@stevendick。谢谢,我听到你说的话。我个人是一个XML上瘾者,但我尽量保持开放的态度。 – 2009-10-08 20:25:48
看看ANT的原作者有什么话:http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html 不要盲目地遵循XML-金锤范例。如果您打算创建一个由实际人员阅读和写入的DSL,请考虑使用许多优秀的词法分析器/分析器工具中的一种,而不是XML。这些日子里有很多很好的工具(比如ANTLR)使得这个工具很实用。现在写lexers/parser并不像现在lex/yacc是最先进的那样痛苦。 – 2009-10-15 01:50:00