谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Day-2 : The Next Big Java Virtual Machine Language

JVM上で動く、次世代の主流となる言語、
つまりNext Big JVM Language、略して「NBJL」を探るというセッション。


最も面白かったセッションの1つですね。


C、C++VBPerlJavaScriptJavaなどと同じぐらいメジャーになって
シンプルで、オブジェクト指向で、ロバストで、セキュアで、
パフォーマンスが良くて、相互運用性があって・・・みたいな夢物語で
スタートして、どこに着陸するのか、ハラハラするセッションでした。


最初の候補は「Java」。


しかしJavaにも、いくつか問題がある。
Javaは何が悪かったのか、いや、私達は何をJavaから学んだのか、
という観点から、Javaの問題点を7つ列挙する。


1. チェック例外。
理論的には良かったけど、実質的には良くなかったという最たる例。
もみ消しなどされやすく、扱いづらいため、SpringなどのメジャーなOSSでは
ほぼ例外なく、実行時例外を選択している。
→NBJLには不要


2. プリミティブ変数
パフォーマンスは良かったけど、「全てがオブジェクトである」という
思想からは外れた。また、Genericsで使えないなど、少し扱いづらい。
→NBJLには不要


3. 配列
これもプリミティブと同様。
→NBJLには不要


4. 全てのオブジェクトをsynchrnizedのモニタとして使えること
使い方を過って、バグに繋がることが多い。
→NBJLには不要


5. static
並列処理時ができない原因になったり、継承できないから、扱いづらい。
→NBJLではstaticを別の方法で実限したい。


6. オーバーロード
複雑になることが多い。
特に可変長引数とAuto Boxingが導入されてからますます分かりにくくなった。
→NBJLでは避けるか別の方法で実限する


7. Generics
作る側にとっては、非常に分かりづらい。
また、Generics非対応のライブラリを混在させると、警告が出てしまう。
(Commons CollectionsとかCommons IOとか、そうですよね)
→NBJLではもう少し上手いアプローチが必要


また、逆に、NBJPに必要なものは何か?


1. オブジェクト指向と関数型のハイブリッド
関数型は便利だが、とっつきやすい文法ではないので、メインストリームには来ない。
オブジェクト指向と関数型を合わせたものが現実解だろう。


2. Javaよりは動的な型
ひところの動的型付けブームは収束し、静的な型に戻りつつある。
NBJLでは、JavaScalaよりは動的だが、基本的には静的な型付けが良い。


3. プロパティクラス
setter/getterを作成するのは馬鹿げている。
プロパティクラスを定義できるようにすべきだ。


4. 並列性・・・は過剰には必要ない
そもそもAPサーバで動かしている時点で並列化されており、
アプリ実装者は並列化を過度に考える必要はない。
(確かに、APサーバで動くアプリで「スレッド作成」はバッドパターンですしね)


5. モジュラリティ
これはOSGiなどを使い、言語のコアに取り入れられるべき。


6. ツール、開発環境
これは非常に重要。


7. 拡張性(あるいはオープン性?)
たとえばJavaOracleのみが修正できる言語となっており、
それ以外の人が修正できる言語ではない。


では、候補は何か?


1. Groovy
動的な言語であり、ニッチ用途で使われても
メインストリームに来るような言語ではない。


2. Scala
関数型言語であり、文法面でJavaからの飛躍が大きい。
これもメインストリームに来ることは考えにくい。


3. Fantom
文法面でJavaからの飛躍は小さいが、型が動的寄りであり、
やはりNBJLにはなり得ない。


では、、、「全く新しいJava」はどうか?


過去との互換性をなくして(ただし移行ツールを提供する)
クロージャー、プロパティ、モジュラリティなども提供する。


、、、仮にそれが「Java8」だったらどうだろう?


という、引き込まれる感じのセッションでした。
確かに「Java8」は「EvolutionではなくRevolution」となるそうです。


ただ、Java8で、過去のバージョンのJavaとの互換性が切ってまで
勝負に出ることは考えにくいですね。
(ちなみにJava7は2011年中盤、Java8は2012年末までにリリース予定)


2年ほど前から、私はJVM上で動く「Dynamic Java」みたいなものが
開発されないかな、と期待しています。


ホットデプロイできて、型がやや動的で、クロージャーもあって、
というような動的言語の特徴が入った、「Java」です。
それこそが、ここで言ってるNBJLに相当するでしょう。


何というか、
Google辺りがサクっと実装しそうだと思ってるんですけどね。
NoopとかGoとかよりも、それをやって欲しいですね。