Kink

Kinkのドキュメンテーションシステム

KinkのドキュメンテーションシステムをKinkで作りました。Javadocとかgodocみたいなやつです。いずれ 1) JSON出力 2) JSONから各種フォーマットへの変換 の2つに分けるつもりですが、今はまだJSONモジュールがないので、Sphinx用の.rstファイルを直接出力し…

限定継続 (delimited continuation) の動作を理解する

限定継続のオペレータであるshift/resetおよびcontrol/promptについて、その動作が腑に落ちたので、以下にまとめます。 継続とは 継続とは、呼び出されると「この後の計算」を実行する関数です。Schemeにはcall/ccという関数が存在し、プログラムの任意の箇…

渋谷JVM - JVM言語編でLTしました

渋谷JVMという集会の案内を見て、しばらく流していたのですが、実はJVM言語の集まりということが分かったので、Kinkの宣伝のためLT枠に滑り込みました。CCCの懇親会LTを使い回して、午前中には資料を完成させました。用意周到です。本編はScala, Clojure, Gr…

多値と多重代入と Kink

多値と JVM の続き。Kink という言語を作ってるんですけど、ここでは Ruby や Python と同様に、多値はサポートせず、多重代入を可能にしています。ただし、多重代入は特別な構文ではなく、単なる関数呼び出しです。式の値の数という観点では、 Ruby や Pyth…

Java のリフレクションで super.method(...) 相当の呼び出しはできない

下の例のように super.メソッド名(...) とすると親クラスのメソッドが呼べますが、リフレクション経由では同じようにできないことが分かりました。 class Parent { public void bang() { System.out.println("Parent.bang!"); } } class Child extends Paren…

tak(13, 7, 0) 実行時間比較

shを除く各処理系で、tak(13, 7, 0) を走らせた。 処理系 実行時間 Groovy 1.6.4 (Server VM) 0m15s Lua 5.1.4 0m20s JRuby 1.4.0 (Server VM) 0m26s Python 2.6.5 0m43s SCM 5e5 (Scheme) 0m49s Kink 8f30e3bcc17f (Server VM) 1m58s CRuby 1.8.7 3m10s Kin…

いろんな言葉で竹内関数

Kink #!/usr/bin/env kink &tak = { ( &X &Y &Z ) ( X <= Y ).then { Y } { tak( tak( X - 1 Y Z ) tak( Y - 1 Z X ) tak( Z - 1 X Y ) ) } } [ &X &Y &Z ] = ARGS.map { __.int } &TAK = tak( X Y Z ) print_line: format: 'tak( #X #Y #Z ) = #TAK' Scheme…

引数渡しの最適化について

メソッド呼び出し時の引数渡しの最適化について。次のようなメソッドがあったとします。 &half = { ( &N ) N / 2 }ここで、half関数への引数渡しは、仮引数リストに対するassignメソッドの呼び出しと同価です。 &half = { [ &N ].assign( _args ) N / 2 }ass…