SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「Oracle Code One 2018」レポート

「Java is Still Free」――Javaのサポート問題へ終止符、迎える4つの進化【Oracle Code One 2018 Java Keynote】


  • X ポスト
  • このエントリーをはてなブックマークに追加

4つのプロジェクトの詳細解説(1)

 続けてMark氏から説明されたのは、現在進行しているプロジェクトの詳細です。まず、Javaを進化させる目的は「開発者にとっての生産性」と「プログラムの性能」、その2点の向上であると説明。その上で、それらを実現するために現在アクティブな活動がなされている4つのプロジェクトの紹介に移りました。言及されたプロジェクトは昨年のキーノートと同じラインナップですが、今年はその内容について深掘りした解説が行われたことが大きな相違点です。順に見ていきます。

補足

 各機能要望はJEP(JDK Enhancement Proposal)と呼ばれ、こちらに詳細が公開されています。対応するJEPがあるものは本記事内に番号を付記いたしますので、OpenJDKの活動を確認する際は参考にしてください。また、いずれのプロジェクトも進行中のため、仕様等は今後変更となる可能性があります。

(1)Project Amber

 このプロジェクトは、ボイラープレートコード(本質でない定型的な実装)を減らし、実装しやすく可読性を高めるための小さな仕様変更を実現していく活動の集合体で、セッションではいくつか個別事例が紹介されました。まずはこのプロジェクトから既に導入された例として、Java 10で採用された「ローカル変数型推論」(JEP 286)について紹介。続けて、これまではエスケープシーケンスで表現していた文字列を、バッククォートでくくると通常の文字列表現として実装できるという仕様案が解説されました(JEP 326)。パターンマッチングやファイルパスの指定、そしてHTMLを記述する際などにも特殊文字や改行をそのまま表現でき、実装が容易になりそうです。

バッククォートでくくることで、特殊文字をそのまま書くことができるようになる仕様の提案
バッククォートでくくることで、特殊文字をそのまま書くことができるようになる仕様の提案

 また、switch文についても新たな形式で記述する方法が紹介されました。この仕様が実現すれば、「int numLetters = switch(day)」のようにswitch文を式として記述したり、定型的に記載が必要だったbreakやdefaultの指定の省略、さらにアロー演算子で値の代入をシンプルに行うことなどができるようになります(JEP 325)。可読性の向上や欠陥混入の懸念減少につながるでしょう。

きわめてシンプルに実装できるようになるswitch文の新仕様提案
きわめてシンプルに実装できるようになるswitch文の新仕様提案

 他には、データを保持するオブジェクトに対する実装もシンプル化が検討されています。データオブジェクトには、値を代入するコンストラクタの記述やアクセサ、equalsやtoStringなどのメソッドのオーバーライドといった定型的な実装を求められました。その解消に向け、データを保持するだけのクラス(Data Carrier Class)を表すrecordという特別なクラスを定義する仕様の検討が進んでいます(JEPはまだ無いようです。関連情報はこちら)。

データオブジェクトには多くの定型的な実装が必要なのが現状
データオブジェクトには多くの定型的な実装が必要なのが現状
現在、「record」という指定によりシンプルな実装を可能とする仕様が検討中
現在、「record」という指定によりシンプルな実装を可能とする仕様が検討中

 Project Amberの最後の例として紹介されたのは、クラスインスタンスの型判定でパターンマッチングを使用する局面の実装です。オブジェクトに対しinstanceof演算子を列挙して型判定・処理していたような実装にて、これまでのようなif文による分岐ではなく、シンプルなswitch文による記述の検討がなされています(JEP 305)。

引数のクラスの型をinstanceof演算子とif文によって処理していた従来型の実装
引数のクラスの型をinstanceof演算子とif文によって処理していた従来型の実装
検討されているswitch文での型判定の例。実装量も減り見た目にもわかりやすい
検討されているswitch文での型判定の例。実装量も減り見た目にもわかりやすい

(2)Project Loom

 こちらは「Fiber」と「Continuation」という仕様の追加に関するプロジェクトです。Fiberとは並列処理を行う「Thread」と同等のことができますが、OS(カーネルモード)ではなくJVM(ユーザーモード)によりスケジューリングされるという性質を持ち、しばしば軽量スレッドとも表現されます。Continuationとは、日本語では「継続」と表現され、プログラムを処理の途中で止めて別の処理に切り替えたりできる仕組みで、Fiberの処理の実現に用いられています。

 セッションでは、その軽さに着目したデモが行われました。まずはFiberのメソッド数をThreadのそれと比較し、半分以下であるというシンプルさを説明。そのうえで、それぞれで同一処理を実行した際のレイテンシーを比較し、Threadで起こる大量の遅延がFiberでは発生していないという点がアピールされました。

従来のThreadのメソッド数は32個と多い
従来のThreadのメソッド数は32個と多い
対するFiberのメソッド数は12個とシンプル
対するFiberのメソッド数は12個とシンプル
Fiber(オレンジ)はThread(青)に比べほとんど遅延の波が起きていない
Fiber(オレンジ)はThread(青)に比べほとんど遅延の波が起きていない
全体で見るとさらにその差は歴然。Thread(青)は大量のスパイクが発生しているが、Fiber(オレンジ)はほぼ波が見えないほど平坦
全体で見るとさらにその差は歴然。Thread(青)は大量のスパイクが発生しているが、Fiber(オレンジ)はほぼ波が見えないほど平坦

次のページ
4つのプロジェクトの詳細解説(2)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「Oracle Code One 2018」レポート連載記事一覧

もっと読む

この記事の著者

西野 大介(SOMPOホールディングス株式会社)(ニシノ ダイスケ)

 SOMPOホールディングス株式会社デジタル戦略部(SOMPO Digital Lab)勤務。損保ジャパン日本興亜グループにおける先進技術の研究開発を担当。過去には基幹システムの開発にも従事し、SoR/SoE双方の開発において幅広い経験を持つ。本業以外では、CodeZineの連載をはじめ、国内/海外の各種カンファレンスへの登壇や企業向けの講演にてテクノロジー情報を幅広く提供している。主な登壇実績:IBM THINK(米ラスベガス)、Java Day Tokyo、IBM THINK Ja...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11258 2018/12/17 23:51

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング