JavaOne 2007 3 日目です。
Superpackage と Java Module System との関係は密なので、まとめて書きます。基本的には、開発時の情報隠蔽の仕掛けとしてのモジュールが SuperPackage であり、配布時のモジュールが Java Module System (SuperJAR, JAM とも呼ばれる)。Superpackage は、既存の仕掛けでの実装方式も検討したようですが、様々な問題点が見ていることから、言語としてサポートすることとしたようです。一時期 C++ の friend のようなものという言われ方をしていましたが、実際はC++ の friend の導入とならないようにすることや従来のコードはそのまま動くことなどを念頭に検討していたらしい。Superpackage で export 宣言されたクラスは Superpackage の内外でアクセス可能で、export 宣言されていないクラスは Superpackage 内だけでアクセス可能。Superpackageは、super-packege.java というソースに記述し、javac でコンパイルする。さらに、分割コンパイルができるように package interface も検討されているようです。super-package.java という別建てのファイルを用意することに対する賛否や、分割コンパイルできるようにすることに対する賛否などがいろいろ議論があるようで、質疑応答が活発でした。
Java Module System は、現状の JAR が抱える問題を解決するために検討されています。基本的にファイルの形式は JAR と同じですが、名前はJAM(Java Application Module) となります。ファイルの拡張子も .jam となるらしい。この JAM が配布単位、再利用の単位となり、JAM ファイルには、メタデータ、ネイティブライブラリ、JAR、クラス及びリソースを格納します。JAM 毎に classloader が存在し、さらに、リポジトリを導入し、Side-By-Side 配置を可能にします。リポジトリは、Bootstrap, Global, Application, local, URL の 5種類。通常、Bootstrap - Global - Application という階層構造をとります。クラスローダの階層構造によるクラスの参照関係と、リポジトリの階層構造によるバージョン解決関係とを整理しないと混乱しそうです。
GC フレンドりーなプログラミングは、すでに押さえていた内容以外のネタはありませんでした。finalizer は極力避ける、明示的な GC 呼び出しを避ける、Object Pool は避ける。Array などの capasity の変更は避け、コンストラクタで適切な大きさを設定するなどです。
MemoryLint は HeapDump を解析して、問題点を見出すツールということでしたが、解析するところまではできていそうでしたが、問題点を見出すという点では、満足できるものではなさそうです。
Refactoring を開発プロセスに組み込むことを推奨するという話。これまでは書籍の中の話であって、ツールでの対応は一部に限られていたが、これはツールが充実してきたことも影響しているようです。
Seam and SOA は、ネタが変わって、Seam と Eclipse での開発を見せていました。JBoss の方々は、ツールをサクサク使いながらの開発に楽しんでいるようです。
AfterDark Bash ではセグウェイに乗りました。また、"Battle Bots" では、本格的に相手の車型ロボットを破壊する 3 分一本勝負を実演してました。途中で、突然、金属で身をまとった美女が研磨機をもって登場し、踊ってました。自分の身を包んだ金属を研磨して、火花を散らして踊るというのが、たぶん恒例なのでしょうか ...
その後で、Virtual Flying Dukes Programming Competition が行われました。
ちなみに、今日参加のセッションは、
でした。