Javaの現在を知るために抑えておきたい、主要な改善プロジェクト
前回のJava21の記事でも紹介しましたが、現在のJavaの改善は細かい改善も多く、それぞれの詳細な変更を追っていくことは大変だと感じます。特にLTSバージョンではなく、その間のフィーチャー・リリースまでは見ていないという方もいると思います。
または、最近のJavaはどのような方向で成長しているのだろうかと、久しぶりにJavaに戻る開発者もいることでしょう。そこで、現在行われている新しい機能の大枠を理解するうえで助けとなる3つのプロジェクトについて概要を紹介します。
Project Amber
Project AmberはJavaコードを見やすく、かつ、記述がより容易になることを目的としたプロジェクトです。
Javaは他の言語に比べ記述が冗長であり、また、強い型制限などにより開発者の直感に反する記述が必要になるケースがあります。わかりやすい例で言えばJava6まで(Java7のリリースは2011年)は、switch case文での分岐に文字列を使う事が出来ませんでした。
Javaはかつてプリミティブ型とオブジェクト型を開発者が厳格に把握しコーディングするようなスタイルでしたが、そのためにswitch case文で文字列が使えないなどの厳格さが生じてしまっていました。
しかし、現在では仕組みとしての厳格さよりも、開発者にとって自然なコーディングとはどのようなスタイルにすべきかという流れが一般化しているように思います。そして、この流れは比較的新しい他の言語ではより重要視され、初めから考慮されています。
昔からJavaを長く触っているような筆者であっても、他の言語で開発してから再度、Javaに戻ってくると、思わぬコンパイルエラーなどに遭遇してしまいます。まして、他の言語からJavaを学ぶ開発者にとってはよりわかりにくさを感じるはずです。このような弊害が出来るだけ生じないように分かりやすい言語へと継続して改善していくことを目的としているのがこのプロジェクトです。
Project Panama
Project Panamaは、簡単に言えば、Java以外のネイティブ環境との連携をより便利に、そしてより、パワフルにするための改善を目的としたプロジェクトです。
Javaが他の言語と最も異なる特徴は、JVMというJavaコードが実行されるための仮想環境において処理が実行されることです。
これにより、土台となるOSや、そのOSがもつ基本ライブラリ(例えばlibcのようなライブラリ)のバージョンが異なっていても、それらに影響せず動作できます。同じシステムが10年、または20年以上という期間で維持できる必要性がある場合において、Javaがいまだに主要な選択肢の一つであるのはそのためです。
しかし、一方で数年単位で新しい技術の進歩があり、それらを取り込まなければ廃れた言語になってしまいます。Javaという言語はこの矛盾する課題と向き合っていかなければいけないのですが、これまではJava内でネイティブコールをしたい場合には、JNIという方法が一般的でした。
この方法は非常に面倒であり、かつ、Java側から制御出来る事が少ないという問題がありました。Project Panamaでは、このJNIから脱却し新しいネイティブ連携を実現する事が目的になります。また、もう一つの課題としてはGPUなどが必要な領域において並列演算処理を効率的にできるようなAPIを追加していくことも、このプロジェクトの目的です。
Project Loom
Project Loomは、並列処理を改善していくためのプロジェクトです。
筆者が感じる、Webが普及する前のシステムと、そのあとのシステムで最も大きく異なる点がこの並列処理に対する考え方です。Webが普及する前の世界では、多くの場合、基本的にリソースは必要最大限用意し、それを使って独立した処理を複数個実行するというものでした。
しかし、Webが普及した後の世界では、必要最大限なリソースが、瞬間的には非現実的な量になってしまう場合があります。例えば、接続プーリング、スレッドプーリングといった実装を各プログラマがそれぞれのプロジェクトでしなければいけないようなケースではよくJavaが使われていたと思います。
Java以外が使われるプロジェクトでもこれらの概念が必要になるとは思いますが、言語として標準にある機能や、動作環境の工夫により、これらの問題は比較的容易に解決できるようになってきました。しかし、より厳しい条件下での並列処理が求められる場合には、Javaはいまだに大きな選択肢の1つであり、大きなアドバンテージがある言語だと思います。そのような価値を維持し続けることを目的としているのがこのプロジェクトです。