Kink: プロトタイプベースの俺々 JVM 言語

1,646 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,646
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Kink: プロトタイプベースの俺々 JVM 言語

  1. 1. Kink:プロトタイプベースの俺々 JVM 言語@miyakawa_taku2012-04-04Java One Tokyo / JVM Language BOF
  2. 2. 1要旨• Kink という JVM 言語を作ってます• クラスのないオブジェクト指向言語です (Lua や JavaScript みたいに)• 寝ながら安易にコードが書けることを目指し ています
  3. 3. 2No クラス but 値• クラスはなくて値だけがある• データやメソッドは値のスロットに直接突っ込む&DOG = value DOGDOG.&bark = { ワン! } &bark { ワン! }DOG.&howl = { ワオー } &howl { ワオー }printline(DOG.bark) # ワン!
  4. 4. 3親のスロットを継承• 自分自身がスロットを持っていなければ親か ら取ってくる DOG (親)&PUPPY = DOG.child &bark { ワン! }PUPPY.&bark = { キャン! } &howl { ワオー }printline(PUPPY.bark) # キャン!printline(PUPPY.howl) # ワオー PUPPY (子) &bark { キャン! }
  5. 5. 4Java 呼び出し• Java のメソッドも呼び出せる• オブジェクトシステムが全然違うので、 methodmissing からリフレクションで富豪的に useclass(java.util.ArrayList) &AL = ArrayList.new AL.add(Flip!) AL.add(Flap!) AL.list.loop($printline) # Flip! Flap!
  6. 6. 5Kink の特徴• ミニマリズム! – クラスの無いオブジェクトシステム – 分岐もパターンマッチも代入もメソッド呼び出し• Lisp 好き! – セミコロンとカンマの無い文法 – 末尾再帰がスタックオーバーフローしない• Java のメソッドが叩けるよ!• なにかと富豪的。性能は……
  7. 7. 6性能は?• tarai(13 6 0) (竹内関数) でベンチマーク #!/usr/bin/env kink -J-server &tarai = { (&X &Y &Z) (X <= Y).then { Y }{ tarai(tarai(X - 1 Y Z) tarai(Y - 1 Z X) tarai(Z - 1 X Y)) } } [&X &Y &Z] = _argv.map { ¥0.int } printline(tarai(X Y Z))
  8. 8. 7計測結果 (dash の8倍速い!) dash 0.5.5.1GNU bc 1.06.95Kink 2012-03-31 dash = /bin/sh C Ruby 1.8.7 GNU awk 3.1.7 0 100 200 300 400 500 600 700 800
  9. 9. 8計測結果 (JVM 言語)Kink 2012-03-31 Rhino 1.7R3 Groovy 1.7.0 JRuby 1.6.6 0 10 20 30 40 50 60 70 80 90
  10. 10. 9総括• Kink は半分寝ながらコードが書ける気楽な言 語です• 性能はまだまだです – もうちょっと何とか絞り出せるはず• 公開リポジトリ – http://code.google.com/p/kink-lang/

×