kink: プロトタイプベースの俺々 jvm 言語

10
Kink: プロトタイプベースの俺々 JVM 言語 @miyakawa_taku 2012-04-04 Java One Tokyo / JVM Language BOF

Upload: taku-miyakawa

Post on 13-Jul-2015

1.226 views

Category:

Documents


0 download

TRANSCRIPT

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

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

@miyakawa_taku

2012-04-04

Java One Tokyo / JVM Language BOF

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

要旨

• Kink という JVM 言語を作ってます

• クラスのないオブジェクト指向言語です (Lua や JavaScript みたいに)

• 寝ながら安易にコードが書けることを目指しています

1

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

No クラス but 値

• クラスはなくて値だけがある

• データやメソッドは値のスロットに直接突っ込む

&DOG = value DOG.&bark = { 'ワン!' } DOG.&howl = { 'ワオー' } printline(DOG.bark) # ワン!

DOG

&bark { 'ワン!' }

&howl { 'ワオー' }

2

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

親のスロットを継承

• 自分自身がスロットを持っていなければ親から取ってくる

&PUPPY = DOG.child PUPPY.&bark = { 'キャン!' } printline(PUPPY.bark) # キャン! printline(PUPPY.howl) # ワオー PUPPY (子)

&bark { 'キャン!' }

DOG (親)

&bark { 'ワン!' }

&howl { 'ワオー' }

3

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

Java 呼び出し

• Java のメソッドも呼び出せる

• オブジェクトシステムが全然違うので、 methodmissing からリフレクションで富豪的に

4

useclass('java.util.ArrayList') &AL = ArrayList.new AL.add('Flip!') AL.add('Flap!') AL.list.loop($printline) # Flip! Flap!

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

Kink の特徴

• ミニマリズム!

– クラスの無いオブジェクトシステム

–分岐もパターンマッチも代入もメソッド呼び出し

• Lisp 好き!

–セミコロンとカンマの無い文法

–末尾再帰がスタックオーバーフローしない

• Java のメソッドが叩けるよ!

• なにかと富豪的。性能は……

5

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

性能は?

• 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))

6

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

計測結果 (dash の8倍速い!)

0 100 200 300 400 500 600 700 800

GNU awk 3.1.7

C Ruby 1.8.7

Kink 2012-03-31

GNU bc 1.06.95

dash 0.5.5.1

7

dash = /bin/sh

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

計測結果 (JVM 言語)

0 10 20 30 40 50 60 70 80 90

JRuby 1.6.6

Groovy 1.7.0

Rhino 1.7R3

Kink 2012-03-31

8

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

総括

• Kink は半分寝ながらコードが書ける気楽な言語です

• 性能はまだまだです

– もうちょっと何とか絞り出せるはず

• 公開リポジトリ

– http://code.google.com/p/kink-lang/

9