これはなんですか
社内では現状みんなの共通言語として Java11 LTS を利用しているが、2021/9 にリリースされる Java17 LTS に乗り移るかどうか判断するため、各種 feature のまとめと、社内での議論のネタを積んでおくものです。
誰向け?
同様のことを検討しているお歴々には参考になるかもしれません。
後日コメントで弊社の結論も記載します。
Java 11 ~ 17
12~16までは @nowokay 様がまとめてくださっているため、そちらを参照します。
feature/java12
feature/java13
feature/java14
feature/java15
feature/java16
feature/java17
- JEP 415: Context-Specific Deserialization Filters
- シリアライズ関連の変更(簡単になるよ的な)
- JEP 414: Vector API (Second Incubator)
- ベクトル計算のAPIが導入されるけど我々あんまり使わないと思う・・
- JEP 412: Foreign Function & Memory API (Incubator)
- 内部制御に関するもの
- JEP 411: Deprecate the Security Manager for Removal
- 消えるry
- JEP 410: Remove the Experimental AOT and JIT Compiler
- 消える
- JEP 409: Sealed Classes
- https://openjdk.java.net/jeps/409
- これは文法とクラス、インターフェースの制御に関する重要な変更
- JEP 407: Remove RMI Activation
- 消える
- JEP 406: Pattern Matching for switch (Preview)
- https://openjdk.java.net/jeps/406
- 型による分岐が可能に
static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
}
- JEP 403: Strongly Encapsulate JDK Internals
- セキュリティ関連
- JEP 398: Deprecate the Applet API for Removal
- ええ・・まだいたんすか・・・
- JEP 391: macOS/AArch64 Port
- M1 Macのネイティヴサポート!
- JEP 382: New macOS Rendering Pipeline
- あんまり関係ない
- JEP 356: Enhanced Pseudo-Random Number Generators
- 乱数生成に関するもの。もしかしたらエントロピー枯渇を気にしなくてよくなる?
- JEP 306: Restore Always-Strict Floating-Point Semantics
- 浮動小数点に関する変更 これも普通に使っていればあまり意識しないでよい
Javaのデメリット
- メモリ食いすぎる 某正規空母みたいな奴
- fat jar 化しやすくビルドが長引く
- jarやjdkのスリム化を行うのが面倒でカスタマイズに知識が必要
他のフレームワーク
- python
- いろいろあるみたいだけどよくわからない
- go
- シンプルで速いともっぱらのうわさ
- 個人的にはC言語が最初の言語である私にはとっつきやすそう
- node
- 書いてくと複雑化しやすいから大規模開発ではやりたくない