工藤探偵事務所

RESEARCH AND INVESTIGATION

Soliloquy of a Super Engineer (1) Java SE 7 Part 1 @ July 22, 2011

とあるメルマガに書いた原稿です。
2011年7月号(7/22発行)されたものです。
ここにも載せておきます。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
◆◇『 スーパーエンジニアの独り言 第1回 “Java SE 7 登場” 』 ◇◆
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

今回の独り言は、7月28日にメジャーバージョンアップの
正式リリースが予定されている「Java SE 7 (JDK 7)」の話題です。

新機能として搭載が予定されている主要な機能は以下が挙げられます:

◇ もっと新 I/O ("NIO.2") (JSR 203)
◆ 細かな構文変更 (Project Coin) の一部 (JSR 334)
JVMの動的型付け言語のサポート (JSR 292)
◆ G1ガベージコレクタの導入 (Garbage-First GC)
◇ クラスローダの拡張
Unicode 6.0
◇ etc ...

f:id:kudo-shunsaku:20120107011143j:plain

NIO.2

ライブラリでの機能拡張の目玉として "NIO.2" で非同期入出力サポートである
java.nio.channels パッケージが用意されます。

これには "AsynchronousSocketChannel" など4つの非同期チャネルがあり、
バッファ(ByteBuffer)を取得し、それに対して読み取り/書き込みすることで、
処理が非同期で行われます。非同期チャネルによって下位のファイルやソケット
は、隠蔽され抽象化されます。また実行プラットフォームの対応次第では、
ネイティブな非同期機能が利用されることで、実行速度の向上も見込めます。

Project Coin

f:id:kudo-shunsaku:20110828210105p:image:small:right

次に「言語仕様の細かな変更(Project Coin)」と題されている新機能では、
コーディングでの記述構文の一部が変更されて簡略表記が可能になりました。
(「細かい」ので、コインなんだそうです。)

例えば、Genericsでの例を挙げますと、従来では

  Map> map
      = new LinkedHashMap>();

と書いていましたが、Java SE 7 では、

  Map> map
      = new LinkedHashMap<>();

と、右辺の型指定が省略できるように構文が改良されました。
(これを "Diamond Syntax" と呼ぶようです。省略された "<>" が、
ダイヤモンドに見えるからだそうです。)

他にも構文変更では、"switch" 構文での条件式に "String" オブジェクトを
使えるなどといった細かな変更が多数ある様子です。

プログラマにとってだけでなく、メインテナンスでの互換性の問題も含めて
シンタックスが変わるのは結構悩ましいことですが、簡略化できるという事で
可読性が落ちない様に、コーディングすることが重要になるでしょう。

他の新機能についてのご紹介は、機会があればまたいずれ。

Project Lambda

今回の新機能で搭載が期待されており、大きな話題であったクロージャ
(Project Lambda) は、結局 Java SE 8 へと持ち越しになりました。

Java SE 6 で仕様確定の際に実現を見送った機能が、次期に盛り込まれる予定で
Java SE 7 では長期に亘り新機能への取り組みが為されてました。紆余曲折を
経た末に全てを盛り込む事が出来ず、再度 Java 8 へと申し送りされました。
今後は Java 自体の方向性として Java 8 を注視するのが肝要となるでしょう。

About JVM

現在、最もポピュラーなプログラミング言語でありアプリケーションの実行環境
としてもデファクトスタンダードの位置を確保しているのが "Java" です。
単なるプログラムではなく実行処理系としてJVMがシステムの重要な位置を占め
ているのは既知であり、将来を見越しても当面その座は揺るがないでしょう。
Java VMに於ける「動的型付け言語のサポート」こそが、JRubyを代表とする
処理系の誘致を示しているのであり、そこからも計り知れます。

まさにクラウドコンピューティングに於いても開発言語としてだけではなく
実行環境及びシステム/サービス間のインターフェースとして必須の知識です。

"Java 5" で文法自身に大きな変更が加えられたのは知っているものの、所謂
"Java 2" までの理解で完了していて現在進行している動向に追従できていない
方々が(筆者を含めて)大勢いることかと想います。
あらゆるシステムが、仮想化/クラウドサービス化されていくのを機会に、
Java 関連の棚卸しするために知識の習得/再確認されるのは如何でしょうか?
(トレーニングコースも順次、新バージョンにアップデートされる予定です。)