JVM Language Summit 2019(JVMLS) day 1

JVMLSに来ています。
JVM Language Summit — July 29–31, 2019

JVMLSはJava VM Language Summitの略で、JVMで動く言語に関するイベントだったのですけど、JVM言語の話はJavaも含めて減っていて、JVMの話がメインになっています。
f:id:nowokay:20190730142733j:plain

場所はサンタクララOracleキャンパスで、元はSunだったところ。
これは去年の写真ですが、普段は社員しか入れないところにSunの看板が、しかも初期のロゴのものです。 f:id:nowokay:20190730141839j:plain

技術的な内容につっこんでいくとキリがないので、気になる人は動画を見てもらって、セッションの雰囲気のメモを。

Clojure Futures

まず最初はClojureの話
f:id:nowokay:20190730173107j:plain

IFnというクラスを中心にいろんな実装の話をしていたのですが、最初なんでiPhoneの話をしてるんだろう?って思ってしまいました。
f:id:nowokay:20190730173510j:plain

そんなかで、constantDynamicを使う話をしてたら、JVMアーキテクトのJohn Rose氏からツッコミが入るという、JVMLSの恐ろしさをいきなり見せられてしまった。
f:id:nowokay:20190730173329j:plain


Clojure Futures with Ghadi Shayban

Loom Update

Project Loomの話。
f:id:nowokay:20190730175819j:plain

まずはBatemanさんからAPI関係。
tryブロックによって構造的並行化を行い、キャンセルやデッドライン・タイムアウトの処理をやるのが難しい〜という話。
f:id:nowokay:20190730175852j:plain

あと、ThreadとFiberが両方Strandを継承するという話になっていたのですが、継承関係のない独立したクラスになるようです。 f:id:nowokay:20190730180436j:plain

それからThreadLocalなどの話。
f:id:nowokay:20190730181112j:plain

実装状況として、すでにJDK11、12でもちょっとずつ変更が入ってて、13ではSocketが対応するなど準備は進んでるようです。 f:id:nowokay:20190730180454j:plain

で、登壇者交代してBackmanさんがVMの話 f:id:nowokay:20190730180732j:plain

frameをどう保持するかって話ですが、VMのことは ようわからん。
f:id:nowokay:20190730181241j:plain

最後にJohn Roseさんが出てきて、Fiberを集めたThreadをLoomで編んだタペストリ作ったのであとでみんなに送るね!と。
f:id:nowokay:20190730154758j:plain

Roseさんデザインですごくかわいい。
f:id:nowokay:20190730172550j:plain


Project Loom Update with Alan Bateman and Rickard Bäckman

Amber Workshop

ここで1階と2階にわかれてワークショップです。というか、質疑応答の時間、という感じですね。
1階ではLoom、2階でAmberですが、2階のAmberのほうに来ました。

ホワイトボードに書いていくスタイル。Amberでの言語拡張をまず並べて。 f:id:nowokay:20190730184513j:plain

Pattern Matchingのところで、Neal Gafterさんのツッコミ。NealさんはJava Puzzlerとかやってた人で、いまはMicrosoftで.NETやってます。
f:id:nowokay:20190730184516j:plain

だいたいこんな感じの話。

if (!(s instanceof T1 x)) {
  return;
}
// ここでxは使える?

とか

switch (s) {
  case instanceof T1 x1:
  case instanceof T2 x2:
}

とか。
f:id:nowokay:20190730184520j:plain

まあBike Shedの話だったねーとお昼ご飯のときに隣のグループの人が言ってました。だれか見てないけど、Javaのなにかを実装してる人じゃないかな。

Thread Sanitizing for Java

Thread Sanitizerの話。Googleの若手二人が登壇して、オレンジのBeylerさんは後ろから見てました。
f:id:nowokay:20190730182157j:plain

Thread Sanitizer(TSan)はJavaのレースコンディションを見つけるものです。JEPのドラフトも出てますね。
JEP draft: Java Thread Sanitizer
f:id:nowokay:20190730182201j:plain

デモとして、同じ変数を複数スレッドから1万回+1するコードを実行します。
f:id:nowokay:20190730182209j:plain

TSanを有効にすると警告がたくさん。コードを修正してsynchronizedをつけると警告がなくなりました!
f:id:nowokay:20190730182213j:plain

LLVMにはすでにTSanがあるということで、JavaのTSanもそれを利用するっぽい。 f:id:nowokay:20190730182415j:plain

ただし、いまはまったくパフォーマンスを考えていないので、TSanを有効にすると3倍から9倍遅くなって、メモリも1.5倍から4倍使うそうな。 f:id:nowokay:20190730182217j:plain

あと、JavaのプロダクトマネージャーのMark Reinholdさんからなんかツッコミが入ってましたね。やっぱり怖いイベントや。
f:id:nowokay:20190730182222j:plain


Thread Sanitizing for Java with Jean Christophe Beyler, Arthur Eubanks, and Man Cao

Lunch

ランチはビュッフェです。
f:id:nowokay:20190730160451j:plain

おいしい。
f:id:nowokay:20190730160334j:plain

食べ終わって外にでてみると、日本ではあまり見ない雲がでてました。
f:id:nowokay:20190730160233j:plain

Valhalla Update

Valhallaの話。
f:id:nowokay:20190730185715j:plain

最近L2というプロトタイプが出ていろいろ試せるようになったんですが、L10でプレビューが出て、L100でSpecializationが入るのでは〜って言ってた。先の長い話や。
f:id:nowokay:20190730185718j:plain

ベンチマークを出していたのですが、サンプルコードの最初のComplexクラスにinlineとついているのが見えます。Value Typeからinlineクラスに名前が変わったっぽい。
f:id:nowokay:20190730185724j:plain

あとはデフォルト値の話とかNullilyの話とか。
f:id:nowokay:20190730185727j:plain

あと、Objectクラスの下にRefObjectとValObjectが入って既存の参照型とinlineクラスがそれぞれその下に入るようなことを議論しているっぽい。
f:id:nowokay:20190730185730j:plain

最後に、やっぱJohn Rose氏がツッコミをw。マイク係をMark Reinhold氏がやってて、時間単価高いマイク係だ!と思っていました。
f:id:nowokay:20190730185736j:plain


Valhalla Update with Brian Goetz

Value Types in the CLR

.NETのCLRでのValuetypesの話。AgendaではValue Typesって書いてあったけど、.NETではValuetypesと空白なし小文字で書くのがただしいのかな。 最初はWrightonさん。 f:id:nowokay:20190730191145j:plain

JavaValue Type(いまはinlineクラス)との違いから。しかしこの人、紙を見ながら話していて、棒読みではないものの、資料繰りそこねて話してるところと表示してるものが違ってたり、どこ読んでるか見逃してしばらく止まってしまったり、プレゼン修行中ぽい感じでした。
f:id:nowokay:20190730191151j:plain

最後にNeal Gafterさんが話を。
f:id:nowokay:20190730191155j:plain


Value Types in the CLR with David Wrighton

Vectors and Numerics on the JVM

今日の最後のセッションはVector
最初はIvanovさんが「JohnがVector APIの話をするのでそのまえに会場をあっためておきます」とのことw
"I will warm the audience up before the John's part"
f:id:nowokay:20190730193351j:plain

APIデザインについて、取らなかったものとそうした理由などを並べていました。
f:id:nowokay:20190730193356j:plain

型をちゃんとつけるということで、「TypeNnnVector」という形のクラスができています。
f:id:nowokay:20190730193401j:plain

とかやって、Roseさんのターン
f:id:nowokay:20190730193409j:plain

デモをやってました。
f:id:nowokay:20190730193405j:plain

あと、API一覧
f:id:nowokay:20190730193414j:plain

そのまとめ
f:id:nowokay:20190730193418j:plain

あとはパフォーマンスの落とし穴とかいろいろ話してたけど、あとでまとめる。。。
最後にQ&AをBrian Goetzさんと一緒にやって、そのままぐだぐだと終了。
f:id:nowokay:20190730193423j:plain

ということで、Jyukutyoによる終わったのポーズで今日は終了です。 f:id:nowokay:20190730194535j:plain


Vectors and the Numerics on the JVM with Vladimir Ivanov and John Rose

Dinner

参加している日本人5人で、チーズステーキバーガーが食べれるSt. John's Bar&Grillへ
f:id:nowokay:20190730152032j:plain

こんな感じ。ジャンク感!
f:id:nowokay:20190730152121j:plain

今回渡米したメインコンテンツである、skrbさんが写真を撮るところ、も撮れたので満足。 f:id:nowokay:20190730153152j:plain

ということでJVMLS1日目おつかれさまでした。明日のブログはもっと適当に書きます・・・ f:id:nowokay:20190730154220j:plain