stephansun对《领域专用语言实战》的笔记(5)

stephansun
stephansun (认真你就输了...)

读过 领域专用语言实战

领域专用语言实战
  • 书名: 领域专用语言实战
  • 作者: [美] Debasish Ghosh
  • 页数: 312
  • 出版社: 人民邮电出版社
  • 出版年: 2013-11
  • 第216页
      class StockCategory {
        static Stock getGOOG(Integer self) {
          new Stock(new Order("GOOG", self))
        }
        ...
      }
      buy 200.GOOG.shares {
        ...
      }

    在我现在使用的Groovy 2.1.8版本中,”200.GOOG“是失效的,无法通过200.GOOG调用StockCategory中的getGOOG方法,改成200.getGOOG().share得到正确的结果。 后来翻了随书示例源代码,发现里面使用的Groovy版本是1.7.2,然后切换到1.7.2版本后结果是书中一致的。另外想到本书英文版是2010年出版的。

    2014-01-13 15:07:52 回应
  • 第137页
    `优先选用`Groovy Gategory代替ExpandoMetaClass来控制元编程的作用域。
    2014-01-13 15:15:28 回应
  • 第107页
    ...动态类型语言轻仪节而重语义...

    读中文感觉怪怪的,翻来英文版的看看 英文原文: They’re low in ceremony and rich in semantics. 然后手贱搜了一把,发现跟这个low ceremony跟scala颇有渊源。 Scala官网(http://www.scala-lang.org/what-is-scala.html) 里面有这么一句: "Its syntax is concise and low ceremony;" 维基百科(http://en.wikipedia.org/wiki/Scala_(programming_language))第一句就是:"Scala (/ˈskɑːlə/ skah-lə) is an object-functional programming and scripting language for general software applications, statically typed, designed to concisely express solutions in an elegant,[6] type-safe and lightweight (low ceremonial) manner. "

    2019-09-12 19:08:06 2人喜欢 1回应
  • 第62页
    然后规则的具体实现可以用Ruby DSL来写: require 'java' class RubyAccruedInterestCalculationRule { def calculate(trade) //.. implementation end end RubyAccruedInterestCalculationRule.new

    这里RubyAccruedInterestCalculationRule后面不应该加”{“,印刷错误,英文版也是一样。 另外觉得"//.. implementation"换成"# .. implementation"好一些,符合Ruby语法。

    2014-01-13 17:00:53 回应
  • 第83页

    中文版

    这样用户不用写那么多`八股代码`,得出来的DSL比较精干而且更易于掌握。在静态方式下需要堆砌大量`死板代码`来完成的事情,语言运行时利用反射就做到了(所以叫反射式元编程)。

    英文版

    The user has to write less `boilerplate code`, and that makes the final DSL more precise and easier to manage. The language runtime uses reflection (that’s why it’s called reflective metaprogramming) to do what would otherwise have to be done statically, using lots of `boilerplate code`.

    【吐槽】同一个段落英文版都叫`boilerplate code`,中文版怎么搞两种说法,我倒不是说我不喜欢 八股代码 这种翻译。只是觉得应该保持风格一致吧。

    2015-01-07 00:54:30 1回应