我想问一下Domain Specific Languages。内部DSL基于Martin Fowler的分类。 (在我看来,内部DSL就像构建一个API !!)
用于实现内部DSL的常用技术有哪些?
另一个问题,内部DSL是所谓的流畅接口,嵌入式语言?
谢谢, 乔
答案 0 :(得分:1)
其中许多问题在行动中的DSL http://debasishg.blogspot.com/中得到了很好的回答,因此您可能希望查看本作者撰写的书。
回答你剩下的问题实际上取决于你正在考虑写什么类型的DSL,甚至内部DSL也可以变化,它可以是一个简单的日期/时间DSL,基本上是一个用目标语言编写的语言。
有关DSL的详细讨论,请查看http://www.oreillynet.com/ruby/blog/2005/12/what_is_a_dsl.html。
我建议你先把你的计划放在前面,然后决定你对它的使用方式,因为在使用它的时候回去修理一个糟糕的设计将是一场噩梦。
答案 1 :(得分:0)
我认为Fowler article已经很好地解释了这个概念(并且他定义了这个术语,所以他的定义是正确的,根据定义: - )
这里的关键概念是元编程:您使用宿主语言的元编程工具使其看起来像您已经引入了新的关键字。在可能/合理的情况下,您使用编译时评估,在其他地方使用堆栈遍历将代码注入调用范围。
严格来说,它只是一个API。但是,(据我所知),如果在Pascal中进行,需要适当的语言扩展,这是一个内部DSL。
答案 2 :(得分:0)
我目前正在阅读Fowler的新书 Domain Specific Languages ,它的布局与任何模式参考一样,具有各种常见模式,用于实现各种类型/部分的DSL及其后端“语义模型”。它的广度是惊人的,只有足够的深度来展示一些很好的例子,也就是说,它讨论了实现/定义DSL的各种正交视图中的概念/问题。
他非常努力地限制深度,否则页面的数量会有平方,而不仅仅是加倍。强烈推荐(到目前为止 - 我通过第10章,他讨论了一小部分众所周知的DSL,例如CSS,Make,et.al。,只是为了帮助您更好地理解术语和“模式”。前9章 - 共有57章,其中大部分讨论了各种DSL“模式”。