プロジェクト

全般

プロフィール

発表ネタ - LLoT 2016向け

2016年8月27日(土)に開催される軽量プログラミング言語(Lightweight Language)の祭典 LLoTのにおいて、Javaのアップデートをテーマに10分で話をします。
しかし、LLの祭典でJavaって、Javaは軽量よりはむしろ重量だよな~、ヘヴィーオブジェクト言語だしぃ。

方針

軽量プログラミング言語の祭典なので、聴講者は、Rerl、Ruby、PHPといったところがメインと想定されます。
Javaについて見聞きし触れたこともありますが、断片的であると想定します。
また、Javaはしばしば批判の対象となり、それが独り歩きしていると思われることがあります。
そこで、主にLLプログラマーの人向けにJavaの今の姿を伝えることを今回の主題とします。

  • Javaは変化のない言語か?
    → Java 1.2(1998年), 1.5(2004年), 1.8(2011年) において大きな改訂が入った
  • 言語仕様は平凡(中庸)、だが、それがいい
  • 標準ライブラリが半端なく充実、互換性

スライド構成(案1)

Javaはどのようなプログラミング言語なのかを超速簡単紹介

Java言語の特徴
「汎用目的の、並列処理が行える、クラスに基づいたオブジェクト指向プログラミング言語」
「可能な限り実装に依存しないように設計」
(Java言語仕様の序文より)

静的な型の言語だが、オブジェクト指向の機能(ポリモーフィズム)として静的な型にサブクラスやインタフェースを実現しているクラスを動的(実行時)に割り当てる性質を持つ。
コンパイラ型言語だが、仮想マシンによりコンパイル結果であるバイトコードが特定のCPUやOSに紐づかないのでインタプリタ型の性質も持つ。
仮想マシン内のJITコンパイラにより実行時にCPUやOSべったりのマシンコードに変換され、高速に実行できる。

Javaの標準API

Java 標準APIの構成(JDKドキュメントの構成図を簡略化して図解)

* GUI、ネットワーク、マルチスレッド(1995年当初から備わっている)

Javaの発展の歴史

Java言語は化石なの? いえ、ゆっくりですが進化しています。
1995年 Java誕生(公開)
1997年 JDK 1.1 インナークラス、RMI
1998年 JDK 1.2 リフレクション、CORBA、Swing,Java 2D,JNDI
2002年 JDK 1.4 assert、NIO、正規表現、JAXP、ロギング
2004年 JDK 1.5 ジェネリクス、拡張for、オートボクシング、enum、可変長引数、アノテーション(メタデータ)、並行ライブラリ
2011年 JDK 1.7 try-with-resource、例外のリスローとマルチキャッチ、switchでString型の分岐、リテラル改良、NIO.2ほか
2014年 JDK 1.8 ラムダ式、タイプアノテーション、Optional、Stream API、日時API、JavaFX
2017年 JDK 1.9 

ジェネリクスは仕様検討が1999年に開始され、正式に導入されたのが2004年
ラムダ式は仕様検討が2005年に開始され、正式に導入されたのが2014年
ラムダ式で関数型言語っぽくなるの? いえ、オブジェクト指向プログラミング言語としてラムダ式を導入してプログラミングを容易にします。

* 内部イテレータによる柔軟性
* クラスベースの定義で取り扱いが難しい処理を補完
JDK 1.8 のアップデートの目玉

プログラマー(非Web)から見てうれしいこと

* ラムダ式とStream API
* あたらしい日付処理
* 型アノテーション
* JavaFX(Oracle JDK)
JDK 1.9 のアップデート予定

* モジュール化(Jigsaw)

参考資料

Java SE 8

  • 書籍「Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング」(Cay S. Horstmann著、柴田芳樹訳、インプレス刊、2014年)

Java SE 9