Javaのモジュールシステムは複雑性をより増している
Java9以降のモジュールシステムについて、探した記事のリンクをメモ。
【参考】
モジュールシステムを学ぶ - Qiita
Java 9のモジュール機能「Project Jigsaw」の基本を紹介 (1/2):CodeZine(コードジン)
Java 9のモジュール機能「サービス(SPI)」と既存ライブラリの共存 (1/2):CodeZine(コードジン)
Java 9のリリースとこれまでのトレンドを振り返る (1/3):CodeZine(コードジン)
ソフトウェアの複雑性は本質的な性質であって偶有的なものではない: プログラマの思索
(引用開始)
立ちはだかるモジュールシステム
ビルド設定の不備に起因するエラーが増えた
Java 8 以前
「パッケージ...は存在しません」
「シンボルを見つけられません」
java.lang.ClassNotFoundException
java.lang.NoClassDefFoundError
java.lang.NoSuchMethodError
Java 9 以降(上記に加え。。。)
「モジュールが見つかりません: ...」
「パッケージ...は表示不可です」
「パッケージ...はモジュール...で宣言されていますが、エクスポートされていません」
「パッケージ...はモジュール...で宣言されていますが、モジュールfooに読み込まれていません」
「パッケージ...はモジュール...で宣言されていますが、モジュール・グラフにありません」
java.lang.module.FindException
java.lang.IllegalAccessException
(中略)
Java 8 以前のビルドエラーの原因
クラスパスに必要な jar がない
クラスパスに入れている jar のバージョンが間違っている
だいたい、クラスパスの設定を調べれば解決した(要出典)。
Java 9 以降のビルドエラーの原因
設定漏れなどにより、モジュールの解決が正常に完了できなかった
解決されたモジュールグラフが必要な形を満たしていない
モジュールグラフの作られ方を理解していないと、
エラーの原因が特定しづらい(気がする)
(引用終了)
Javaはもはやシンプルなオブジェクト指向言語ではない。
他言語に比較して不足していた機能を次々に取り込んできたために、とても複雑になっていると思う。
モジュールシステムもそうだろう。
以前なら、Mavenで必要なライブラリを管理していたが、それだけでなく、モジュールシステムを使って、どのライブラリを公開するか、必要とするか、という細かい設定ができるようになった。
便利になったように思えるが、これが曲者だ。
以前なら、ビルドパスに必要なライブラリがあるかどうかだけ気にすればよかった。
しかし、モジュールシステムの設定が正しいかどうか、確認する作業まで増えてしまった。
「人月の神話」に偶有的な複雑性と本質的な複雑性の話があったが、モジュールシステムは偶有的な複雑性の範疇と思う。
昔のEJB、そしてPOJO、依存性注入などの考え方も、偶有的な複雑性の範囲と思う。
つまり、Javaは本来、コンピュータの内部構造、システムの内部構造を本来は隠蔽して、プログラマがそんな部分を気にせずに業務ロジックの実装に注力できるように整備すればいいのに、そういう部分までプログラマの能力を浪費してしまう部分がある。
とても繊細な積み木をブロックで組み立てている気持ちになる。
ソフトウェアの複雑性は本質的な性質であって偶有的なものではない: プログラマの思索
モジュールシステムについては色々調べているのでまたメモしておく。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント