リスト実装したぜー

リスト実装しました。 作ってる途中に、いくつかバグを見つけたので、次はそれを潰そうと思う。 swfがエラーを吐く。 -> ブート用のクラスが必要 Windowsでビルドできない -> Windowsかぁ

リスト対応を目指します

Schemeを名乗ってるのに、リストが使えないのはいいかげんマズい気がしてきたのでリスト対応を目指します。TODO: 複数モジュールを使えるようにする 標準ライブラリを作る 標準ライブラリにリストを実装する リストのシンタックスシュガーを実装する

リファクタリング終了

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

バックパッチしようぜ

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

モジュール名をcapitalizeに

モジュール名をOCaml風にcapitalizeにしてみた。 (define-class Main (Flash.Display.Sprite) ()) (define-method init ([self Main]) (let [(t (new Flash.Text.TextField))] (. t (appendText "Hello,world!!")) (. self (addChild t)))) これがいいのか、…

開発日記もここに書こう

リリース通知なんてしてもだれも見てないんだから、開発日記もここに書こう。 今は、リストを使えるようにするために、がんばってますよー。

HappyABC 0.5.0リリース

http://happyabc.org 久しぶりにリリースします。今回は、リリースを自動化するための仕組み作りに力をいれたため、リリースそのものが遅くなってしまいました。今回の目玉は、external/external-class宣言の廃止です。なにも指定せずに、flash.display.Spri…

スナップショットビルド、始めました

http://happyabc.org/deploy/index.html 誰かかがコミットするたびに、自動でビルドしてサーバにアップロードしてくれる仕組みを作りました。 EURO 2016 NewsとSinatraを組合せています。詳しくは、capistrano/を参照してください。 Windowsバイナリはまだ不…

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

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

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

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

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

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

モジュールの自動インポート

早いもので、年が明けてからもう2週間以上たっています。 今のHappyABCは、flashがどういう関数を持っているか知らないので、毎回コンパイラに指示しなければなりません。 (external-class flash.display.Sprite (...)) .... これは面倒なので、どう解決する…

HappyABC 0.4.0リリース

http://happyabc.orgあけましておめでとうございます。今年もよろしくお願いいたします。 というわけで、新年早々、新バージョンをリリースです。今回は、ActionScriptのpackageに対応するモジュールという仕組みを追加しました。 (module foo () (define x …

バグ管理初めました

Overview - HappyABC - mzp そろそろバグが溜ってきたので、バグ管理を初めました。

0.3.1リリース

http://happyabc.orgいままでは不正なコードコンパイルすると、単純に例外を投げるか不正なABCを生成してました。今回からは、ある程度そういったエラーを検出できるようになりました。 $ habc-scm if.scm if.scm:0: synatx error, malformed syntax (if x) …

0.3.0の予定 - エラーレポート

次は、より詳しいエラーメッセージを表示できるようにする予定です。 今のエラーメッセージ $ habc-scm.run if.scm Fatal error: exception Lisp.Syntax_error("")例外をそのまま表示している。 次のエラーメッセージ $ habc-scm if.scm if.scm:0: synatx er…

HappyABC 0.2.0リリース

http://happyabc.orgMinGWなどと格闘しつづけて、やっとWindowsでビルドできるようになりました。このときのボクの苦労のあとがhttp://happyabc.org/build%252Fwindows.htmlにあります。 新機能 cond式のサポート Windowsバイナリの提供開始 その他の機能な…

0.2.0の予定 - Windows対応

次はWindowsでコンパイルできるようにしたいです。 Cygwinを使えば楽にコンパイルできると思ってたけど、そうでもないらしい。よくよく考えるとWindows上のOCamlは全機能が使えないんだった。あと、シェルスクリプトも使えないから、バッチファイルに移植し…

HappyABC 0.1.0リリース

http://happyabc.org一段落したので、いったんリリースします。 これはなに? Flashのフォーマットであるswfを生成することを目的としているSchemeコンパイラです。 できること ActionScriptのかわりにSchemeを使って、Flashプログラミングができます。 イン…

やっとバグがとれた

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

オブジェクトシステムをCLOS風に変更

http://github.com/mzp/scheme-abc/tree/master今までのダサいオブジェクトシステムをやめて、CLOS風にしました。 CLOS風といっても、メソッドコンビネーションやMOP(メタオブジェクトプロトコル)は持っておらず、単純に文法だけを真似をした。あんまりパワ…

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…

実装しない機能

こんな機能は実装しないよ。 作業量が多い、もしくはABC的に不可能な機能。 CLOSやMOPなどActionScriptの範囲を越えるオブジェクトシステム Flash8以前のサポート 継続、スレッドサポート ポリシーとして実装しないやつ。 単純なset!による破壊的代入。もっ…