truby

orz

class C def set(x) @x = x end def get() @x end end x = C.new() x.set(1) y = x.get() y + 2といったプログラムを書いて試してみたら、最終行でエラーが出る。「getやsetというメソッドは定義されてるけど、+なんてメソッドは定義されてませんぜだんな」…

今週のtruby

http://soutaro.com/truby-snapshot-20060512.tgz今週は、水曜日くらいまで方針が定まらなかったので、ほとんど進んでません。 New! ちょっとはマシなデバッグプリント (-debug tkueとかやるとずらずらずらーっと出てきます) ifとwhileの対応(nodedumpの再イ…

今週のtruby

http://soutaro.com/truby-snapshot-20060505.tgzスナップショットです。毎週金曜に、その時点でのソースコードをダウンロードできるようにするつもり。誰がダウンロードするのか知りませんが。インスタンス変数もなんとなく対応できた気がします。 New! ク…

Trivialな例ですみません

クラス定義できるようになった。 class C def id(x) x end end x = C.new() x.id(1)+2 x.id("a")+"b" # x.id("a")+1 ⇒NoMethodErrorrubyだとTypeErrorになるけど、Fixnumにto_strが定義されていないのでStringに変換できなくてエラーという扱い。 class C de…

遅い

なにが遅いって、自由変数の計算が遅い。なぜ遅いのかというと、環境の自由変数を求めているときに、何度も同じ型の自由変数を求めているから。今日中に直す。*1 *1:とか宣言するほど大した問題じゃないけど

sample/fib.rbは通るようになった。が、型推論に4分弱かかる…明後日から高速化だー

sample/fib.rbが動かねえ…orz

発表のレジュメに書いた例は全部動くことを確認した!

良く見るとクラスがパースできてない…adhocに実装したのが祟ったかorz

とりあえずpolymorphismは保留。MLみたいなのじゃ無理ぽ。

昨日ダメだったパターンは全て大丈夫になってしまった…なんで?どこを変えたんだったか、Subversionでごたごたしてて全く覚えてない…自由変数の定義を直したのが良かった予感。

上のは通るようになった。が、 def f(x,y) x+y end f(1,2)+"3"が通ってしまう…困ったなあ。

def f(x) x end f(1)がこける。selfの扱いがいい加減だから、こけたり通ったりするんかなあ。つーか、画面出力がみにくくてしかたがない。どっちを先に直そうか。

単一化が遅すぎです。相当naiveに実装してあるためでしょうが*1、kindedな型変数が30個弱で等式が1個とかを単一化すると、11秒とかかかります。なめてるとしか言いようがありません。ちなみに入力したプログラムは 1.aaaです。泣けてきます。ちゃんと「NoMet…

組込みライブラリのシグネチャ

でも、組込みライブラリなんだし、trubyに組み込んでしまっても良いのかもと思ったり。ひとまず、型定義をOCamlのコードで書くのはだるいので、適当にパーザとか書いてみることにしようかな、と。 module Kernel : { puts: Object -> NilClass gets: () -> S…

ライセンス

trubyのソースにライセンス文をごしごし付け足していて、ふと気づいた。これ、GPLで大丈夫なん? 私が書いたコード 当然問題なし OCaml 関係なし OCamlの標準ライブラリ LGPLなので問題なし OCamlMakefile 関係なし nodedump ruby'sライセンスは、GPLを選べ…

るびこん*1

Rubiconっていうのがあるのか。知らなかった。Rubyのプログラムでテストする場合には、これを使えば良いんだな。

レコードのconcatnationがないので継承のとき困る。フランス人なのにチーズが嫌いなJacques先生の論文では陽には書いてないので、ちょっと考えないといけないかな。めんどくせ。

Rubyでは基底型は存在せず、全てがオブジェクトである。ということは、全てはオブジェクトからオブジェクトへの関数となるわけで、なんかなにも考えなくてもいけるような気もしてきた。kindがごちゃごちゃになりそうだけど、やってみる価値はあるかな、と。…

Objective ML: An effective object-oriented extension to ML

http://pauillac.inria.fr/~remy/publications.html

うーん。どうしようもないのかも。何をしてもpolymorphic methodが出てくるのは致命的(いまさらかよ)。Higher-orderHigher-rank polymorphismが型推論できないことは昔々(?)に証明されている(らしい)ので、手も足も出ない達磨さん状態である。まいった。まだ…

def foo(x,y) return x+y end foo(1,2) foo("hello","world")がうまく型付けできないのは、polymorphic methodの問題と言うらしい。OCamlをベースにして考えるときにはOCamlNG集(http://www.math.nagoya-u.ac.jp/~garrigue/papers/ocaml-ng.pdf)が便利だと思…

パーサがブロックする問題を修正。

組み込みRuby

http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DFRubyメモメモ。しかし、試すのが億劫だ。Windowsなら、Visual Studioのデバッガでどうなってるのか気軽に覗けるのになあ。Linuxだから、gdbとか考えるのがだるい…

でもめんどくさくなったので、結局もとどおり $ ruby -r nodedumpした結果をparseすることにしようと思った。でも、そうするとまた、Unix.create_processではまるんだろうなあ…ちょっとまじめに挙動を調べてみよう。

JavaScript

http://www.google.co.jp/search?hs=DeP&hl=ja&c2coff=1&client=firefox-a&rls=org.mozilla%3Aja-JP%3Aofficial&biw=1025&q=javascript+type+checking&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=JavaScriptのプログラムを型検査しようっていう話がけっこうあるらし…

なんで

なんでそこでエラーになる。なっとくいかーん!!!Lexerのテスト書くか。※Lexerは悪くなかった。疑ってごめんよ。ってほとんど自明なパーサを書くのになんでこんなに苦労してるんだorz

ちょっと手戻り

Rubyのクラスは閉じていないから、これじゃあうまくいかないじゃないか。全くフロー解析になってしまうなあ。いいけど。