Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 2021

Java 2021

2021/4/24に開催されたFUKUOKA Engineer Day 2021での登壇資料です

9e840766611f942c7c0a9ad6987a5d78?s=128

Naoki Kishida

April 24, 2021
Tweet

Transcript

  1. Java 2021 Javaコミュ@福岡 きしだ なおき 2021/4/24 FUKUOKA Engineers Day 2021

  2. 自己紹介 • きしだ なおき • LINE Fukuoka • Twitter: @kis

  3. Javaコミュ@福岡について • 年に何回か勉強会やってます(ました) • ほとぼりさめたらやりたい • 2006年に始まったっぽい

  4. 今日の話 • Java 17 LTSが出るよ • Java 8からどう変わってるの • Java

    EE? 知らない子ですね • デスクトップやモバイルは? • Java 23 LTSはどうなるの?
  5. Java 17 LTSが出るよ • 2021/9にリリース予定 • 次の長期メンテナンスバージョン

  6. Java 17 LTSの目玉機能(Java 11比) • Records • Text Blocks •

    GitHubへの移行
  7. Records • Java 16で正式機能 • 構造体 • 名前付きタプル • イミュータブル

    record Student(int code, String name, double score) {} var s = new Student(1, "田中", 8.5); var message = "%sさんのスコアは%.1fです" .formatted(s.name(), s.score()); System.out.println(message);
  8. Text Blocks • Java 15で正式機能 • 複数行文字列 var s =

    new Student(1, "田中", 8.5); var message = """ <tr> <td>%s</td> <td>%.1f</td> </tr> """.formatted(s.name(), s.score() ); System.out.println(message);
  9. GitHubへの移行 • いままではMercurialでメーリングリストベースの開発 • Gitに移行、同時にGitHubでのPRベースの開発 https://github.com/openjdk/jdk/

  10. Java 8から11でどう変わってるの? • リリースサイクルの変更 • 試用機能の導入 • GitHubへの移行 • ディストリビューションの活性化

    • モジュールシステム • javacしなくても実行可
  11. リリースサイクルの変更 • 6カ月ごとのリリース • 3月と9月にその時点でできてる機能をリリース • 春分の日と秋分の日 • 機能が完成してからリリースだと結局どんどん遅延 •

    小さい改善を行うモチベーションが低くなる • たとえば ぬるぽのメッセージ改善 • 6バージョンごとに長期メンテナンスバージョン(LTS)を設定 • Java 11(2018.9)が最初のLTS • 次はJava 17(2021.9) • その次はJava 23(2024)
  12. 試用機能の導入 • 多くの人に使ってもらってフィードバックを得るために試用機 能を導入 • 言語 • preview • API

    • incubator • JVM • experimental • 多くのフィードバックが得られるようになった
  13. ディストリビューションの活性化 • OracleのJDKは商用有償に • OpenJDKをベースにしたディストリビューションの活性化 • AdoptOpenJDK • Oracle •

    Oracle OpenJDK • Oracle JDK • Amazon • Corretto • Azul • Zulu • BellSoft • Liberica JDK
  14. javacしなくても実行可 • 単一ソースのJavaソースはjavaコマンドで直接実行可 public class Hello { public static void

    main(String... args) { System.out.println("Hello!"); } } sample.java
  15. Java EE? 知らない子ですね • Java SEからJava EE APIの削除 • Micro

    Profile • Java EEもオープンソース化
  16. Java SEからJava EE APIの削除 • JAXB(XML機能)などが削除 • 外部ライブラリとして組み込む • Java

    9で既存のライブラリやフレームワークが動かない 場合がある
  17. MicroProfile • Java EEの開発が滞る • MicroProfile登場 • マイクロサービス用API • 対応フレームワーク

    • Helidon MP • Quarkus • Payara Micro • WildFly • TomEE https://microprofile.io/
  18. Java EEのオープンソース化 • Jakarta EEへ • パッケージ名の変更 • javax ->

    Jakarta • Java EE 8 -> Jakarta EE 9 • 機能の変更なくパッケージ名のみ変更
  19. デスクトップやモバイルは? • JavaFXのオープンソース化 • OpenJDKには含まれない • GraalVM • Native ImageでJavaコードをネイティブバイナリに

    • Gluon Mobile • JavaFXベースでモバイルアプリケーションの開発 • GraalVM Native ImageでiOS用ネイティブアプリ生成 • https://gluonhq.com/products/mobile/
  20. Java 23はどうなるの? • パターンマッチング • Loom • Valhalla

  21. パターンマッチング • 他の言語にあるようなパターンマッチングの導入 • すでに簡単なものは導入済み • instanceof var message =

    switch(s) { case Student(_, "田中", var score) -> """ <tr> <td colspan=2>田中様のスコアは%.1f!!! </td> </tr> """.formatted(score); case Student(_, var name, var score) -> """ <tr> <td>%s</td> <td>%.1f</td> </tr> """.formatted(name, score); System.out.println(message);
  22. Loom • グリーンスレッド(JVM管理スレッド)の導入 • 通信処理を効率よく • いまはRxJavaやKotlin Coroutineを使っている

  23. Valhalla • List<int>ができるようになる • value typeの導入 • ユーザー定義の基本型 • メモリ効率がよくなる

    • Stream/IntStreamやOptional/OptionalIntのようなクラス不要
  24. まとめ • Javaもがんばってます!