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

Java 2021

Java 2021

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

Naoki Kishida

April 24, 2021
Tweet

More Decks by Naoki Kishida

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. 今日の話
    • Java 17 LTSが出るよ
    • Java 8からどう変わってるの
    • Java EE? 知らない子ですね
    • デスクトップやモバイルは?
    • Java 23 LTSはどうなるの?

    View Slide

  5. Java 17 LTSが出るよ
    • 2021/9にリリース予定
    • 次の長期メンテナンスバージョン

    View Slide

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

    View Slide

  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);

    View Slide

  8. Text Blocks
    • Java 15で正式機能
    • 複数行文字列
    var s = new Student(1, "田中", 8.5);
    var message = """

    %s
    %.1f

    """.formatted(s.name(), s.score()
    );
    System.out.println(message);

    View Slide

  9. GitHubへの移行
    • いままではMercurialでメーリングリストベースの開発
    • Gitに移行、同時にGitHubでのPRベースの開発
    https://github.com/openjdk/jdk/

    View Slide

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

    View Slide

  11. リリースサイクルの変更
    • 6カ月ごとのリリース
    • 3月と9月にその時点でできてる機能をリリース
    • 春分の日と秋分の日
    • 機能が完成してからリリースだと結局どんどん遅延
    • 小さい改善を行うモチベーションが低くなる
    • たとえば ぬるぽのメッセージ改善
    • 6バージョンごとに長期メンテナンスバージョン(LTS)を設定
    • Java 11(2018.9)が最初のLTS
    • 次はJava 17(2021.9)
    • その次はJava 23(2024)

    View Slide

  12. 試用機能の導入
    • 多くの人に使ってもらってフィードバックを得るために試用機
    能を導入
    • 言語
    • preview
    • API
    • incubator
    • JVM
    • experimental
    • 多くのフィードバックが得られるようになった

    View Slide

  13. ディストリビューションの活性化
    • OracleのJDKは商用有償に
    • OpenJDKをベースにしたディストリビューションの活性化
    • AdoptOpenJDK
    • Oracle
    • Oracle OpenJDK
    • Oracle JDK
    • Amazon
    • Corretto
    • Azul
    • Zulu
    • BellSoft
    • Liberica JDK

    View Slide

  14. javacしなくても実行可
    • 単一ソースのJavaソースはjavaコマンドで直接実行可
    public class Hello {
    public static void main(String... args) {
    System.out.println("Hello!");
    }
    }
    sample.java

    View Slide

  15. Java EE? 知らない子ですね
    • Java SEからJava EE APIの削除
    • Micro Profile
    • Java EEもオープンソース化

    View Slide

  16. Java SEからJava EE APIの削除
    • JAXB(XML機能)などが削除
    • 外部ライブラリとして組み込む
    • Java 9で既存のライブラリやフレームワークが動かない
    場合がある

    View Slide

  17. MicroProfile
    • Java EEの開発が滞る
    • MicroProfile登場
    • マイクロサービス用API
    • 対応フレームワーク
    • Helidon MP
    • Quarkus
    • Payara Micro
    • WildFly
    • TomEE
    https://microprofile.io/

    View Slide

  18. Java EEのオープンソース化
    • Jakarta EEへ
    • パッケージ名の変更
    • javax -> Jakarta
    • Java EE 8 -> Jakarta EE 9
    • 機能の変更なくパッケージ名のみ変更

    View Slide

  19. デスクトップやモバイルは?
    • JavaFXのオープンソース化
    • OpenJDKには含まれない
    • GraalVM
    • Native ImageでJavaコードをネイティブバイナリに
    • Gluon Mobile
    • JavaFXベースでモバイルアプリケーションの開発
    • GraalVM Native ImageでiOS用ネイティブアプリ生成
    • https://gluonhq.com/products/mobile/

    View Slide

  20. Java 23はどうなるの?
    • パターンマッチング
    • Loom
    • Valhalla

    View Slide

  21. パターンマッチング
    • 他の言語にあるようなパターンマッチングの導入
    • すでに簡単なものは導入済み
    • instanceof
    var message = switch(s) {
    case Student(_, "田中", var score) ->
    """

    田中様のスコアは%.1f!!!


    """.formatted(score);
    case Student(_, var name, var score) ->
    """

    %s
    %.1f

    """.formatted(name, score);
    System.out.println(message);

    View Slide

  22. Loom
    • グリーンスレッド(JVM管理スレッド)の導入
    • 通信処理を効率よく
    • いまはRxJavaやKotlin Coroutineを使っている

    View Slide

  23. Valhalla
    • Listができるようになる
    • value typeの導入
    • ユーザー定義の基本型
    • メモリ効率がよくなる
    • Stream/IntStreamやOptional/OptionalIntのようなクラス不要

    View Slide

  24. まとめ
    • Javaもがんばってます!

    View Slide