Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Project management 我应该何时使用特定于域的语言?_Project Management_Dsl - Fatal编程技术网

Project management 我应该何时使用特定于域的语言?

Project management 我应该何时使用特定于域的语言?,project-management,dsl,Project Management,Dsl,我想要一些实用的指导,告诉我什么时候应该使用。我已经找到了关于优势和劣势的资源,但是什么样的项目可以保证它的使用呢 创建和维护DSL似乎需要大量的时间投入,那么在什么样的应用程序空间中,我可以从时间投入中获得生产率回报呢 编辑:DSL最常见的用途似乎是用于保存数据状态的文件格式,那么使用DSL进行程序逻辑和结构(可能是代码生成)如何?什么时候可行 编辑#2我主要是问什么时候创建一个特定的DSL是值得的。当然,我们应该尽可能多地使用现有的DSL来节省时间。首先,当您开发的问题领域是一个广为人知的领

我想要一些实用的指导,告诉我什么时候应该使用。我已经找到了关于优势和劣势的资源,但是什么样的项目可以保证它的使用呢

创建和维护DSL似乎需要大量的时间投入,那么在什么样的应用程序空间中,我可以从时间投入中获得生产率回报呢

编辑:DSL最常见的用途似乎是用于保存数据状态的文件格式,那么使用DSL进行程序逻辑和结构(可能是代码生成)如何?什么时候可行

编辑#2我主要是问什么时候创建一个特定的DSL是值得的。当然,我们应该尽可能多地使用现有的DSL来节省时间。

首先,当您开发的问题领域是一个广为人知的领域时,我会使用一个DSL,该领域的一些商业专家已经花了很多时间来构建这样一个DSL,这样你就不必自己花那么多时间来解决他们已经解决的所有问题

如果你想<强> >创建一个DSL,我会考虑这样做,如果你的业务是在一个非常特殊的区域完成的,那么你的大部分时间都集中在一个特定的问题域中。如果你在为多个问题域做应用程序时,我不建议你采用这种方法

例如,如果您的企业只专注于构建税务应用程序,那么构建税务系统DSL可能是一个好主意。这将使您的语言不仅可以在各种税务应用程序中使用,而且还可以在您所在行业的其他企业中推广(使用),这些企业希望完成与您类似的工作


当然,您必须权衡在现有语言基础上构建DSL和框架的成本/收益。

最明显的是,当该语言已经存在并且得到很好的支持时,您一定要使用它们。这方面的主要示例是用于基于Motif的GUI开发的UIL和用于软件构建的make

如果你必须自己找域,我想说的是寻找域大量的工作就是正确地指定一些东西,你的编译器不能真正找到大多数错误,但是特定于域的编译器可以。GUI是一个很好的例子,因为大部分工作都是在设置布局,通常有很多方法可以使语法有效的C++调用对你的底层GUI系统毫无意义(例如:试图在按钮中嵌入整个窗口小部件)。
我发现UIL特别是GUI开发的巨大收益,因为UIL编译器可以在GUI规范中发现错误,它看起来像是C++编译器的好的正常可编译代码。事实上,它得到了很好的支持,这意味着代码很容易在平台之间移植,甚至可以在GUI构建器之间移植。

创建另一个DSL的理由很少。世界上到处都是特殊用途的语言

按照这些思路思考

> P>用Python、java、C++等通用语言解决问题。不管怎样

  • 优化该解决方案以排除常见功能,并构建一个非常好、非常优雅、非常可扩展的类库

  • 优化类库以强调“正交性”。确保所有功能都能正常工作,没有任何问题

  • 如果您只需要简化语法,请围绕您的nice类库创建一个脚本包装器。这是你的DSL。对于Python来说,这很简单——它已经是一种动态语言了。对于Java,您可以利用一些东西。对于C++来说,构建这个灵活的脚本环境可能是一个工作。

  • >P>如果您还需要进一步优化,请考虑编写一个用于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的问题。这主要重申了我的答案。当这种情况发生时,我的政策是你显然是个天才。向上投票!:-)看起来这是一个非常彻底的话题,谢谢!学习如何开发的好资源是什么