(-> % read write unlearn)

My writings on this area are my own delusion

渋谷JVM(20150418)のメモ

1年以上前の渋谷JVMの参加メモが下書きのまま放置されていたので、もったいないので晒しておきます。


渋谷JVMのメモです。結構長かったし、楽しい雰囲気なのであんまりメも取らなかったです。いつもどおり体裁すら整えてないけど、メモ書きとして。

I love scala

@takezoen さん

2006年頃Haskellが流行った。 Haskellで書かれたシューティングゲーム:monadius

Monadを必要とはせずに入れる関数型言語。手続き型でも書ける。 このバランス感覚が、Scalaの一番の魅力。 型安全にマクロが書ける。

Scala.jsも結構本気で開発されている。 オダースキーが新コンパイラを開発中。 TASTY:JavaバイトコードとJSのコードの両方を出力できる。

Clojure

@kawasima さん

2大カリスマ リッチ・ヒッキーとノーレン・デービッド。

Concurency core.async CSP

thread-based coroutine-based core.async はClojureScriptでも。Clojureと全く同じように動く。 ただ、javascriptはシングルスレッドモデルなので、goのみ対応。

もともとポール・グレアムに騙されてAnsiCommonLispを読み始めて挫折した過去がある。 作りたいアプリがあって、それをつくろうとすることが多い。 まず勉強から始める、というパターンではない。 Clojureを始めた時もそうだった。

JGGUG/NTTソフトウェア株式会社 Grails推進室

上原潤二 @uehaj さん

Groovy1.8まではコンパイル時型チェック。 Groovy2.0からは静的型チェック・静的コンパイルJavaに準じた静的なコードも吐ける。

2.3 Traitの導入。 動的Trait注入:Java8のデフォルトメソッドとの違い。 Grails3で積極的に使われている。 Hamlっぽいテンプレートエンジンが導入。

2.4 Android対応。

Grails3は SpringBoot ベースになった!起動がすごく早くなった。

Pivotal社が2015・03にGroovy開発社の直接雇用を降りて、 よりOSS寄りになった。

様々なDSLに Spock: 単体テストDSL Geb: seleniumDSL Graidle: ビルド用DSL Grails: Webアプリ開発用のDSL

盛り返すJava

オラクル 淡々とマネージメント。Javaリリースに株価が依存していたSunとの違い。 健全にマネージメントされている。

ラムダは匿名クラスのシンタックスシュガー? 違う。 thisの扱いが違う。 匿名クラスだと this は匿名クラスを指す。 ラムダだと this はラムダの外のクラスを指す。

  • ラムダの場合はコンパイルした後に余計なクラスは作られない。
  • invokedynamic命令が最初に使われている。 ラムダのバイトコード

なぜ匿名クラスじゃないのか。 Streamなどを使うとラムダをたくさん使いまくるので、クラスがたくさんできてしまう。 -> 起動時に時間がかかりすぎてしまう懸念。。

Java7で導入されたInvokeDynamic

  • もともとは動的型言語のための機能。
  • 実行時にメソッドの型を決めつつJavaVMの最適化もかけやすくなる。

Project Valhala

  • Specilization Box

Genericsの型指定に基本型を指定可能にする。 Array

  • any T でできないこと。

    • null との比較
  • any

問題の1つとしてクラスをいつ作るか。 ClassDynamic * 動的な クラスリンク。 * invokeDynamic のクラス版。

Value Type

  • 参照ではない。
  • メモリに直接配置される。
  • 効率がいい。

パネルディスカッション

  • maven の安定感たるや凄まじい。 gemでハマる若者。npmでハマる若者。cabal(Haskellのパッケージ管理ソフト)でハマる若者。

  • 子供は10歳くらいから抽象的な思考ができるようになる。 それぐらいまではプログラミングをやるのはきつい?