SigScheme開発録(49)

  • add testcases for mutable immutable string
  • add testcases for basic sytaxes (if, let, let*, letrec, do) and found bugs.
    • fix "do" behavior
  • abolish SHIFT_* macro
    • change the argument extraction way
  • add testcases for define
    • fix crash bug (e.g. (define a . 1) )

if, let, do辺りをいぢめてみた。doとか酷すぎだし..。こんな所にcrash bugが有るなんてまだまだだのぉ。defineにも有った。

  • uim
    • "commit_string" helper message の charset に今更ながら着手。やらないよりやるほうがまし、か。
      • uim-ximも直そうと思ったらekatoさんが動いてくれた。仕事早い。

Binary 2.0 Conference

今日は3, 4限が休講なので、5限面倒なのでサボる。その後Binary 2.0 Conferenceへ。

  • id:succeed先輩の所にまとめが。
    • 内容自体は結構理解できた。でもハードコアバイナリアンへの道は遠い...。
  • Yamakenさんに久々に会えた。
  • k.inaba先輩に会えた。もうちょっと喋りたかった...。
  • ssさんに久々に会った。
    • 結婚おめでとうございますとか。
    • ML Compiler本良いよとか。
  • 飲み会では28辺りに見られてショック...。やっぱり最近上に見られる気がする。

id:shinichiro_hさんの話が個人的には一番面白かった。でもsripting言語から直接Cの関数を呼び出したいのならば、↓のようにすれば良いのではないか?

# ライブラリ名とヘッダファイル名を指定し、dlopenする。
# includeファイルを強引にparseする事により、ライブラリ名・関数名・引数情報・返り値情報のテーブルを作成する。
require_c("m", "math.h");

# ライブラリ名・関数名・引数のリストを渡す。適当にdlsym。
cos = call_c("m", "cos", 1.1);

もしくは

# ライブラリ名とヘッダファイル名を指定し、dlopenする。
# includeファイルを強引にparseする事により、ライブラリ名・関数名・引数情報・返り値情報のテーブルを作成する。
libm = require_c("m", "math.h");

# ライブラリ名・関数名・引数のリストを渡す。適当にdlsym。
cos = libm.call("cos", 1.1);

ヘッダファイルを強引にパースするのがキモだが、こうしてしまえば言語バインディングを作らなくて良くなるので十分強力。オブジェクトファイルをパースすると返り値の型が分からないみたいだが、これだと分かるし。でもバイナリアン的手法では無い。

実現方法としてはC言語をきっちりパースするというのが正攻法だが、それをやるのは面倒なので、langscanを使いたい所だが、この用途には大雑把すぎるので駄目。誰かRubyC言語パーサーとか持ってないすかね?...

WebBrowser as X Server Client

Ajaxでは文字列をサーバーに送って、返ってきた文字列をごにょごにょしてサーバーに表示してるよね?その代わりに、JavaScriptで catch した event をそのままサーバーに送信して、サーバーからはその結果を描画情報として返せば面白いんじゃないかとふと思った。つまり、ブラウザが xserver 的役割を果たす訳だ。

イメージし易く言うと、ブラウザの画面がデスクトップみたいになるわけだね。これによって既存のHTMLでは出来ないコンテンツを作成したり、GUIツールキットを再利用したりする事が出来て、なんか面白い事が出来るんじゃないかなぁ。JavaScriptの描画については、Canvas等が出てきているので、ここ1年以内にかなり高度な描画が出来るようになるはず。こんなん出来るんすよ (Firefox 1.5 or later only)?

という訳で誰かつくってみませんか?僕は今時間が有ったらこれをやりたい。