日記

リファクタリング終了

いいかげんコードがぐちゃぐちゃになってきたので、大規模なリファクタリングをしました。 ソースコードをディレクトリに分けたり、バリアントを多相バリアントで書き直すなどの変更を行ないました。

バックパッチしようぜ

みんなバックパッチ(backpatch)って知ってる? ほらコンパイラとかでジャンプとかを作るときに使うやつだよ。gotoでもいいけどさ。 a; b; goto LABEL; // <- ここを生成しているときは、LABELのアドレスが分からない c; d; LABEL: // <- ここでLABELのアドレ…

自動ビルドの仕組みを考えてみた

毎回、ソースコードのtarballとWindowsバイナリを作るのが面倒すぎる。なので、githubにコミットするたびに、自動したい。 なんとなく、概要は考えたので明日から実装しよう。

ドライバを書こうとして、やめた

habc-scmに追加した機能を使えるようにドライバであるhabcを改造としたら、いろいろやりたいことがでてきてしまった。 それを全部アッドホックに実装してたら大変なことになりそうだったので、一度整理してたほうがよさそう。 とりあえず適当に書いたコード…

ライブラリのスタブを書いた

id:happyabc:20090117で書いたモジュールのインポート機能がそこそこ形になってきました。というわけで、インポートされる側のライブラリのスタブを書いてます。 (module text () (define-class CSMSettings (Object) ()) (define-method fontSize ((self CS…

やっとバグがとれた

クラス定義に関するバグがやっと落ちついてきました。 ドメインもとったし、そろそろ最初のリリースを出す準備をしようと思います。

Liteweight OCaml的な

http://www.libspark.org/browser/ocaml/abc2xml/abc.mlABC2XMLでは多相バリアントとpa_ooによる疑似多相レコードをひたすら使ってます。 let abcFile stream = {| minor_version = u16 stream; major_version = u16 stream; constant_pool = constant_pool …

ABC to XMLを作ってます

http://www.libspark.org/browser/ocaml/abc2xml けっこう迷ったけど、やっぱりABCをswfmill用のXMLに変換するプログラムを別に作ることにしたよ。scheme-abcがXMLを吐けるように改造するとか、SWFを吐けるようにするとか色々考えたけど、これが一番すっきり…

なぜSchemeなのか?

本当はSchemeじゃなくて、強い型付けと型推論を持った言語がよかったんです、OCamlとかSMLとか。 でも、OCamlとかだとパーサ部分が相当大変な気がしたので、とりあえず構文解析が楽そうなLisp系にしました。個人的にはCommonLispのほうが好きなんだけど、最…

Swfへ埋め込みに成功したよ!!

とうとうSwfに埋め込むことに成功したよ!やった!! (define-class Hello flash.display.Sprite ((init) (let [(t (new flash.text.TextField))] (invoke t appendText "Happy-abc") (invoke this addChild t)))) 埋め込みにswfmill+シェルスクリプトを利用し…

クラスをサポートしよう(2) -名前空間のサポート-

親クラスに名前空間が使えるようになった。 (define-class Foo flash.text.Sprite ((init) "hello")) R5RSでは名前空間は言及されていないから、悩み所。 CommonLispはパッケージを持っているものの、階層的なパッケージについては言及してない。 とりあえず…

クラスをサポートしよう(3) -newのサポート-

Add: "new" special form to create instance from class. · mzp/scheme-abc@dcd17b6 · GitHub クラスからインスタンスを作るためのnewを追加しました。 (define-class Foo Object ((init) (print "hello"))) (new Foo)CLOS的にはmake-fooみたいな関数を作る…

クラスをサポートしよう(1) -クラスの定義-

swfを生成するためにはクラスが必要不可欠なので、クラスをサポートできるようにがんばってる。 ただ、CLOSは荷が重すぎるので、独自のクラスシステムになっている。 (define-class Foo Object ((init) "hello")) をコンパイルすると class Foo extends Obje…