Top Banner
2014/11/15 きしだなおき
44

JJUG CCC 2014 fall Javaが見るニュータイプの夢

Jul 08, 2015

Download

Software

JJUG CCC 2014 fall
Javaが見るニュータイプの夢
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JJUG CCC 2014 fall Javaが見るニュータイプの夢

2014/11/15 きしだなおき

Page 2: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ニュータイプ

Page 3: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ニュータイプ

● ニュー→新しい● タイプ→型

Page 4: JJUG CCC 2014 fall Javaが見るニュータイプの夢

新しい型!

Page 5: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Javaの今までの型

● 基本型

– 8つの基本的な型

● 参照型– オブジェクト

● 異なる型の値をまとめる

– 配列● 同じ型の値をまとめる

Page 6: JJUG CCC 2014 fall Javaが見るニュータイプの夢

今までの型の欠点

● 基本型– さまざまなアーキテクチャにあわせれない

● 参照型– オブジェクト

● 参照とヘッダがオーバーヘッド● メモリが散乱する

– 配列● 多次元配列がない(現在は1次元配列の多重化)● 大きい配列が定義できない(32億要素まで)

Page 7: JJUG CCC 2014 fall Javaが見るニュータイプの夢

つまり

● 新しいプロセッサに適応できない● 新しいメモリモデルに適応できない

Page 8: JJUG CCC 2014 fall Javaが見るニュータイプの夢

現在のコンピュータアーキテクチャ

Page 9: JJUG CCC 2014 fall Javaが見るニュータイプの夢

メモリのアクセス速度

種類 時間

クロック 1秒

レジスタ 1秒

コア内キャッシュ 3秒

共通キャッシュ 43秒

メインメモリ 6分

● 1クロックを1秒とすると

Page 10: JJUG CCC 2014 fall Javaが見るニュータイプの夢

いかにキャッシュに乗せるか

● いかにメモリをまとめて扱うか

Page 11: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Pointクラス

class Point{ final int x; final int y;}

Page 12: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Pointクラスの配列

Page 13: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Pointクラスの配列の効率化

Page 14: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueType版Point

value class Point{ final int x; final int y;}

Page 15: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueType版Pointの配列

Page 16: JJUG CCC 2014 fall Javaが見るニュータイプの夢

次世代Javaのためのプロジェクト

● Project Valhalla– Specialization

– Value Types

– ClassDynamic

● Project Panama– Foreign Function Interface

– Object Layout

– Arrays 2.0

Page 17: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Project Panama

● FFI/JNR– ネイティブ呼び出し

● Object Layout– オブジェクトの配置

● Arrays 2.0– 配列の拡張

Page 18: JJUG CCC 2014 fall Javaが見るニュータイプの夢

FFI(Foreign Funciton Interface)

● ネイティブライブラリの呼び出し

● JNR(Java Native Runtime)

Page 19: JJUG CCC 2014 fall Javaが見るニュータイプの夢

FFI/JNR

Page 20: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Arrays2.0

● 多次元配列– 現状は、配列の配列

– ヒープの中に散らばる

● インデックス

– intより大きい値

● アクセス制限– リードオンリー、一度だけ書き込み、並列更新

Page 21: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Project Valhalla

● Value Types– ユーザー定義基本型

● Specialization– 基本型が指定可能なGenerics

● Class Dynamic– クラスの動的リンク

Page 22: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueTypesとSpecialization

● ValueTypes– VM優先

– enhancements to the Java Virtual Machine instruction set, and secondarily to the Java Languagehttp://cr.openjdk.java.net/~jrose/values/values-0.html

● Specialization– 言語優先

– enhancements to the Java Language (and secondarily, to the Java Virtual Machine)http://cr.openjdk.java.net/~briangoetz/valhalla/specialization.html

Page 23: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueTypes

● Codes like a class, works like an int!● ローカルキーワードが導入される?

– valueをキーワードにできない

– classの前にだけ使えるキーワード

value class Point{ final int x; final int y;}

Page 24: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueTypesの利用

static Point origin = __MakeValue(0, 0);static String stringValueOf(Point p) { return "Point("+p.x+","+p.y+")";}static Point displace(Point p, int dx, int dy) { if (dx == 0 && dy == 0) return p; Point p2 = __MakeValue(p.x + dx, p.y + dy); assert(!p.equals(p2)); return p2;}

● __MakeValueはなんらかのおしゃれな表記になるはず

Page 25: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueTypesの応用

● 数値

– 複素数、Unsigned、Decimal● ネイティブ対応

– 128bit整数

● 代数データ

– Optional<T>、Choice<T,U>● タプル

– 複数戻り値

Page 26: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueTypesの制約

● ロックに使えない● 参照での比較

● cloneできない– 意味がない

● Java 8でも似たような定義

– Value-based Classeshttps://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html

● あんまり大きくない型

Page 27: JJUG CCC 2014 fall Javaが見るニュータイプの夢

検討事項

● null● キャスト● リフレクション● アトミック性

– volatileの拡張

● 互換性

– Optional<T>をそのままValueTypeにできるか

Page 28: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Specialization

ArrayList<int>

Page 29: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Java8の美しくないクラス

● StreamとIntStream● OptionalとOptionalInt

Page 30: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ValueType対応

● それぞれのValueTypeにあわせたコレクションを作るのは無理

Page 31: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Genericなクラス

class Box<T>{ T value; Box(T v){ value = v; } T getValue(){ return T; }}

Page 32: JJUG CCC 2014 fall Javaが見るニュータイプの夢

現在のコンパイル結果

class Box{ Object value; Box(Object v){ value = v; } Object getValue(){ return value; }}

Page 33: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Specialize対応のコンパイル結果

class Box{ Object*T value; Box(Object*T v){ value = v; } Object*T getValue(){ return value; }}

Page 34: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Box<int>の場合

class Box{t=int}{ int value; Box(int v){ value = v; } int getValue(){ return value; }}

Page 35: JJUG CCC 2014 fall Javaが見るニュータイプの夢

つまり

Box<int> box = new Box<int>();

というのは

Box{t=int} box = new Box{t=int}();

Page 36: JJUG CCC 2014 fall Javaが見るニュータイプの夢

キャストの制約

● Specializeされたクラスはキャスト不可

Box box = new Box<int>();List nums = new List<int>();

Page 37: JJUG CCC 2014 fall Javaが見るニュータイプの夢

基本型と参照型の非互換の問題

● 基本型と参照型で同じコードが使えない。– 比較など

Page 38: JJUG CCC 2014 fall Javaが見るニュータイプの夢

条件付きメソッド

class Box<T>{ T value; <where T=int> int getTwice(){ return value * 2; }}

Page 39: JJUG CCC 2014 fall Javaが見るニュータイプの夢

問題点

● null● オーバーロード

List<T>{ void remove(T o); void remove(int idx);}

Page 40: JJUG CCC 2014 fall Javaが見るニュータイプの夢

Specializeされたクラスをいつ作るか

Page 41: JJUG CCC 2014 fall Javaが見るニュータイプの夢

ClassDynamic

● 動的なクラスリンク

● InvokeDynamicのクラス版

Page 42: JJUG CCC 2014 fall Javaが見るニュータイプの夢

応用

● プロキシ● タプル

– ScalaのTuple22問題

Page 43: JJUG CCC 2014 fall Javaが見るニュータイプの夢

いつになるの?

● Project Panama– Java 9?

– JavaOneでCharles NutterがJNRだけは入れたい、と言ってた

● Project Valhalla– Java 10?

● VMだけ変わって言語に反映されない可能性も

● .netと激しく競合するようになった今、できれば早いほうがいいな

– Value Types、Specializationは.netそのまま

Page 44: JJUG CCC 2014 fall Javaが見るニュータイプの夢

まとめ

Cool Java!