在Java上使用DSL的第一步?
伙计们。。。女孩们,我正在做一个项目,我认为可以通过实现一种特定于领域的语言来为某种类型的工作流程定义一套规则和/或条件,从而增强这个项目 我想牢牢掌握这个主题、基础知识、最佳实践等,特别是如何用Java实现它们在Java上使用DSL的第一步?,java,language-design,Java,Language Design,伙计们。。。女孩们,我正在做一个项目,我认为可以通过实现一种特定于领域的语言来为某种类型的工作流程定义一套规则和/或条件,从而增强这个项目 我想牢牢掌握这个主题、基础知识、最佳实践等,特别是如何用Java实现它们 你有什么建议?正如其他人评论的那样,Java确实不是创建DSL的好选择。Scala、Clojure、Groovy、Ruby/JRuby都是不错的选择。然而,考虑到您正在考虑使用Java,我认为Groovy或Scala似乎是最自然的选择。对于这两种语言,java开发人员的学习过程是相当缓
你有什么建议?正如其他人评论的那样,Java确实不是创建DSL的好选择。Scala、Clojure、Groovy、Ruby/JRuby都是不错的选择。然而,考虑到您正在考虑使用Java,我认为Groovy或Scala似乎是最自然的选择。对于这两种语言,java开发人员的学习过程是相当缓慢的。以下是一些可以帮助您入门的链接:
(我链接了旧的oAW URL,因为该页面仍然提供了一些细节和指向eclipse项目页面的所有链接)只是@Recurse的一个补充。我实际上在做他提到的第9章中的正则表达式示例,直到我更改了主函数中的一行,它才起作用:
if (grep(argv[1], f, argc>3 ? argv[i] : NULL) > 0)
应该是:
if (grep(argv[1], f, argc>2 ? argv[i] : NULL) > 0)
注意argc>2。从那以后,它对我起了作用。书上没有勘误表(考虑到它的年代,这并不奇怪)
是的,这是一本密集但珍贵的书,所以我不得不说我同意@Recurse。老实说,这本书对学生来说是一本时间敏感的书(几年前我可能会感到困惑)。严肃的建议:使用Groovy、Scala或Clojure实现它。这完全取决于您希望DSL有多复杂。+1不使用Java。如果有的话,我会使用Ruby(或JRuby),我使用Java脚本API和JavaScript绑定来提供脚本支持,从而允许用户编写脚本,在本地或远程运行和测试我的Java应用程序。它可以被定义为DSL解决方案吗?如果我不清楚,我的建议是:1。阅读《编程实践》第9章。2.尝试实现一个简单的DSL3。遇到麻烦时问具体问题4。当你开始想在你的DSL中包含更像“编程”的功能时,请阅读编程语言的要点,例如变量、函数、作用域等。有趣的是,我现在打开了那本书的第216页,我想我应该在谷歌上搜索“符号”和作者的名字,这就出现了。我很高兴能读到这一章(我只花了8美元就买到了这本书!)哇,我一直在玩regex one,而且(对我来说)225页上有一个小错误,我在他们的勘误表中看不到。如果您正在这样做:对grep的调用应该是如果(grep(argv[1],f,argc>2?argv[i]:NULL)>0)/*而不是argc>3*/忘记我的最后一条注释,看看下面的“补充答案”(代码可以在注释之外更容易地阅读),我肯定会看看Scala和Groovy:)