Project management 我应该何时使用特定于域的语言?
我想要一些实用的指导,告诉我什么时候应该使用。我已经找到了关于优势和劣势的资源,但是什么样的项目可以保证它的使用呢 创建和维护DSL似乎需要大量的时间投入,那么在什么样的应用程序空间中,我可以从时间投入中获得生产率回报呢 编辑:DSL最常见的用途似乎是用于保存数据状态的文件格式,那么使用DSL进行程序逻辑和结构(可能是代码生成)如何?什么时候可行 编辑#2我主要是问什么时候创建一个特定的DSL是值得的。当然,我们应该尽可能多地使用现有的DSL来节省时间。首先,当您开发的问题领域是一个广为人知的领域时,我会使用一个DSL,该领域的一些商业专家已经花了很多时间来构建这样一个DSL,这样你就不必自己花那么多时间来解决他们已经解决的所有问题Project management 我应该何时使用特定于域的语言?,project-management,dsl,Project Management,Dsl,我想要一些实用的指导,告诉我什么时候应该使用。我已经找到了关于优势和劣势的资源,但是什么样的项目可以保证它的使用呢 创建和维护DSL似乎需要大量的时间投入,那么在什么样的应用程序空间中,我可以从时间投入中获得生产率回报呢 编辑:DSL最常见的用途似乎是用于保存数据状态的文件格式,那么使用DSL进行程序逻辑和结构(可能是代码生成)如何?什么时候可行 编辑#2我主要是问什么时候创建一个特定的DSL是值得的。当然,我们应该尽可能多地使用现有的DSL来节省时间。首先,当您开发的问题领域是一个广为人知的领
如果你想<强> >创建一个DSL,我会考虑这样做,如果你的业务是在一个非常特殊的区域完成的,那么你的大部分时间都集中在一个特定的问题域中。如果你在为多个问题域做应用程序时,我不建议你采用这种方法
例如,如果您的企业只专注于构建税务应用程序,那么构建税务系统DSL可能是一个好主意。这将使您的语言不仅可以在各种税务应用程序中使用,而且还可以在您所在行业的其他企业中推广(使用),这些企业希望完成与您类似的工作当然,您必须权衡在现有语言基础上构建DSL和框架的成本/收益。最明显的是,当该语言已经存在并且得到很好的支持时,您一定要使用它们。这方面的主要示例是用于基于Motif的GUI开发的UIL和用于软件构建的make 如果你必须自己找域,我想说的是寻找域大量的工作就是正确地指定一些东西,你的编译器不能真正找到大多数错误,但是特定于域的编译器可以。GUI是一个很好的例子,因为大部分工作都是在设置布局,通常有很多方法可以使语法有效的C++调用对你的底层GUI系统毫无意义(例如:试图在按钮中嵌入整个窗口小部件)。
我发现UIL特别是GUI开发的巨大收益,因为UIL编译器可以在GUI规范中发现错误,它看起来像是C++编译器的好的正常可编译代码。事实上,它得到了很好的支持,这意味着代码很容易在平台之间移植,甚至可以在GUI构建器之间移植。创建另一个DSL的理由很少。世界上到处都是特殊用途的语言 按照这些思路思考
想到的一种情况是,需求需要非常高或不太可能的定制/配置级别。因此,您可以提供一种针对DSL的脚本模型 以汽车装配“臂”为例,提供一个配置模型来支持各种工厂配置是不可能的。(检测到这一点,不要检测到那一点,当这种情况发生时,做这个……等等) 但是,为每个客户编译具有专门逻辑的新应用程序可能不是一个好方法。因此,在这种情况下,您创建一个小框架,它将成为一种DSL,然后对于您销售的每一个机械臂,您在DSL中编写一个小应用程序,并将其与编译和运行DSL脚本的核心软件一起保存。或者更好的是,DSL编程工具与机械臂一起提供,这样您的客户可以在您创建的DSL中“编程”机械臂
一个现实世界中出现的例子是Yahoo Pipes(您可以将其视为DSL)或automated web crawler的robots.txt指令。它们可能不是一个成熟的DSL,但它们展示了DSL的用途。ACM Computing Surveys文章就这一主题提供了建议,Martin Fowler 2010年的书也是如此。好吧,有人不得不这么说,下面是: Lisp被一些人视为任何领域的领域特定语言。这是一个支持良好且非常可扩展的DSL
在某些情况下,从Lisp(或类似的语言,如Haskell)形成DSL实际上可以用最少的努力提供大量的功能,因此是非常值得的。DSL并不总是需要很大的维护负担。感谢您指出其区别。DSL真的就在我们身边,我想我在问更多关于创建DSL的问题。这主要重申了我的答案。当这种情况发生时,我的政策是你显然是个天才。向上投票!:-)看起来这是一个非常彻底的话题,谢谢!学习如何开发的好资源是什么