コラム:スーパーエンジニアの独り言 第1回 “Java SE 7 登場”
皆様、こんにちは。吉政創成の吉政でございます。弊社のお客様であるCTC教育サービス様のメルマガで標記のコラムの連載を開始しました。
今号のメルマガのコンテンツは以下の通りです。
■ニュース CISCO認定 CCNP関連コースにバウチャー付きコース新設
Ruby技術者認定試験合格者の声
&まつもとゆきひろ氏からのメッセージ掲載
■トピック Inst. Tech View~ Ruby on Rails セキュリティ対策 ~
■コラム スーパーエンジニアの独り言 “Java SE 7 登場”
メルマガの全文をご覧になりたい方は以下をクリックください。
ctc201107.pdfをダウンロード
標記のコラムについては以下をご覧ください。
◆◇ スーパーエンジニアの独り言 第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 ...
ライブラリでの機能拡張の目玉として "NIO.2" で非同期入出力サポートである java.nio.channels パッケージが用意されます。
これには "AsynchronousSocketChannel" など4つの非同期チャネルがあり、 バッファ(ByteBuffer)を取得し、それに対して読み取り/書き込みすることで、処理が非同期で行われます。非同期チャネルによって下位のファイルやソケットは、隠蔽され抽象化されます。また実行プラットフォームの対応次第では、ネイティブな非同期機能が利用されることで、実行速度の向上も見込めます。
次に「言語仕様の細かな変更(Project Coin)」と題されている新機能では、コーディングでの記述構文の一部が変更されて簡略表記が可能になりました。
(「細かい」ので、コインなんだそうです。)
例えば、Genericsでの例を挙げますと、従来では
| Map<String, Collection<Integer>> map
| = new LinkedHashMap<String, Collection<Integer>>();
と書いていましたが、Java SE 7 では、
| Map<String, Collection<Integer>> map
| = new LinkedHashMap<>();
と、右辺の型指定が省略できるように構文が改良されました。
(これを "Diamond Syntax" と呼ぶようです。省略された "<>" が、ダイヤモンドに見えるからだそうです。)
他にも構文変更では、"switch" 構文での条件式に "String" オブジェクトを使えるなどといった細かな変更が多数ある様子です。
プログラマにとってだけでなく、メインテナンスでの互換性の問題も含めてシンタックスが変わるのは結構悩ましいことですが、簡略化できるという事で可読性が落ちない様に、コーディングすることが重要になるでしょう。
他の新機能についてのご紹介は、機会があればまたいずれ。
今回の新機能で搭載が期待されており、大きな話題であったクロージャ(Project Lambda) は、結局 Java SE 8 へと持ち越しになりました。
Java SE 6 で仕様確定の際に実現を見送った機能が、次期に盛り込まれる予定でJava SE 7 では長期にわたり新機能への取り組みがなされてました。紆余曲折を経た末に全てを盛り込む事が出来ず、再度 Java 8 へと申し送りされました。今後は Java 自体の方向性として Java 8 を注視するのが肝要となるでしょう。
現在、最もポピュラーなプログラミング言語であり、アプリケーションの実行環境としてもデファクトスタンダードの位置を確保しているのが "Java" です。単なるプログラムではなく実行処理系としてJVMがシステムの重要な位置を占めているのは既知であり、将来を見越しても当面その座は揺るがないでしょう。
Java VMに於ける「動的型付け言語のサポート」こそが、JRubyを代表とする処理系の誘致を示しているのであり、そこからも計り知れます。
まさにクラウドコンピューティングに於いても開発言語としてだけではなく実行環境及びシステム/サービス間のインターフェースとして必須の知識です。
"Java 5" で文法自身に大きな変更が加えられたのは知っているものの、いわゆる"Java 2" までの理解で完了していて現在進行している動向に追従できていない方々が(筆者を含めて)大勢いることかと思います。あらゆるシステムが、仮想化/クラウドサービス化されていくのを機会に、Java 関連の棚卸しするために知識の習得/再確認されるのは如何でしょうか?(トレーニングコースも順次、新バージョンにアップデートされる予定です。)
コースの詳細情報はこちら:
「Java」関連コース
http://www.school.ctc-g.co.jp/java/
「クラウド・仮想化」関連コース
http://www.school.ctc-g.co.jp/cldvir/