uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Groovy 1.8 modularizationとは何か

Groovy 1.8の新機能として、「モジュール化」というのがちらほら出て来ています。たとえば、1.8.0-beta1のリリースノートには、

.. and we're also seizing this opportunity to work in parallel on making Groovy more modular. Some early work towards more granular Groovy JAR(s) have already started on modules for JMX and BSF, as first experiments.

と書いてあります。

その説明がこちらにあります。

要は、groovy-coreがあまりにも多機能で、でかくなりすぎたので、groovy.jarやgroovy-all.jarを自アプリに組み込むのに気がひけるようになり、あるいは、全部最新化しないとリリースできないとか、巨大化ゆえの弊害が出てきているので、なんでもかんでもgrooy-all.jarに入れるのを止めて、coreとそれ以外のサブモジュール群に分けて、ソースコードリポジトリも分割していこうということかと。ただし、一気にすすめるのではなく、徐々に様子を見ながら外出しにしていこうということのようです。モジュールの構成は以下を予定しているようです。

  • groovy-core
  • modules
    • test
    • jmx
    • swing
    • xml
    • sql
    • web
    • template
    • integration
        • bean-scripting-framework
        • javax.script
    • tools
        • groovydoc
        • shell
        • console
        • java2groovy

将来的には、モジュール単位でOSGiのバンドルにするようです。あと確かMLでは、大域AST変換をモジュールに所属させて、利用しているモジュールの大域AST変換だけが適用されるような話もあった気が(使用しないモジュールの大域AST変換は適用されなくなるので、コンパイル効率が良くなる)。

現状としては、groovy-coreの下にjmxとbsfのsrcとtestがソースコードで外出しされているにすぎません。しかし、おそらく、ここにあるのは、過渡期的なことではないかと思います(coreの下だし!)。jmxやbsfは今のところ、groovy-all.jarに今まで通りに含まれています。ほんとにほんとに最初の1歩というところでしょう。

結論: Groovy modularizationはじわじわ来る