2010-04-01から1ヶ月間の記事一覧

情報理工のポスターの暗号(?)を解読しよう。

[追記]解かれた様ですhttp://twitter.com/kinaba/status/13109925805 http://twitter.com/kinaba/status/13109851142で東大の情報理工学系研究科のポスターの中に これぞ情報科学の真髄といえるような文字列。 http://twitter.com/hagiya/status/9520249396 …

結婚指輪

このブログには書いていなかったけど実は私は新婚なのです。 今日は結婚指輪ができあがったので博物館の後に受け取りに行きました。入籍より2週間遅くなってしまいました。

科博オープンラボレポート

年に一度の[イベント]新宿分館 オープンラボ「博物館の裏側」(2010, 国立科学博物館新宿分館)に行ってきました。 実を言うと上野本館と併せて国立科学博物館に行くのは3週間連続だったりします。 画像を一部載せます。軽めのグロ画像があるので注意。 新…

Hello Worldが書けない

fortranコンパイラを作らなきゃならないので勉強開始。まずはHello World write(*,*) 'Hello World' end 必ず頭に6つスペースを入れる コンパイル % gfortran hello.f -o hello 実行 % ./hello Hello World 一見うまく動いたように見えるがHello Worldの先頭…

レジスタ割り当て断念

現在の簡便なレジスタ割り当てだと、複雑な関数でレジスタが足りなくなって失敗してしまう。名前換えとかに手を出すのは泥沼化する危険があるので、rowl1ではスタックベースの実行方法にすることにした。

クロージャが動いた

以下のコードが動くようになった! import stdlib; make_counter: (n) { return () { return n++; } }; export main: () { counter : make_counter(1); x : counter() + counter() + counter(); sys_exit(x); (% -> 6 %) }; 実装は非常に辛かった。まだ相互…

条件分岐を一部実装した

こんな感じのコードが実行出来る様になった。 import stdlib; fib: (n) { if (n) { return n * fib(n-1); }; return 1; }; export main: () { exit(fib(3)); }; if(n)の部分はまだ比較演算子を実装していない為。 コンパイルすると _fib.LT1ii: pushl %ebp m…

大域脱出する関数の型

例外やexitなどの関数の型をどう扱えば良いか困った。OCamlだと val exit : int -> 'a Haskellだと exitWith :: ExitCode -> IO a みたいに多相型を返して任意の型と単一化できるようにするのが普通のようだけど、rowlはreturnで値を返すのでこれができない…

分割コンパイルができるようになった

export/import/external宣言を実装した. (% test.rl %) export type hoge : A | B (int) ; export plus: (x, y) { return x + y; }; みたいなコードをコンパイルするとヘッダファイルが自動生成される. (% test.rli generated by rlc1 %) type hoge : A | …

variantが書けるようになった

こんな感じで。 type test : A | B (int) | C (char, int) ; export main: () { x : A; y : B (2); z : C ('a', 0); syscall(1, 0); }; パターンマッチはまだ実装していない。というか実はまだif文すら未実装。 Cのunionみたいにサイズが最大であるCに合わせ…

科博行ってきた

ものづくり展 MONODZUKURI EXHIBITIONが今日までだというので行ってきた。 面白かった。Rubyも展示されていたけどNaClのパンフと30秒位の動画のみだった。ちょっと地味だった。久しぶりに科博行ったんで一通り回ってきたけど、やっぱり計算機の展示はたまら…

名前付きフィールドを一部実装

以下の様なコードがコンパイルできるようになった。右辺値としての一部だけ実装。 f: () { return (x:1, y:2); }; export main: () { p : f(); syscall(1, p.x + p.y); }; クロージャを実装すればオブジェクト指向っぽいコードも書けるようになる。

ツイッター始めました

まだよく分かってないけど登録してみた。 http://twitter.com/9_ties

多相関数実装中

難航している。でも、型安全なhashtableなどを実装する時には多相関数があった方が良いと思う。 実装方法はtemplate instansiationとdictionary passingの混合。メンドくさいけど、非ボックス化型を扱うrowlでは仕方がない。

関数ポインタ実装

こんな感じのサンプルコードがコンパイル出来るようになった。dictionary passingへの布石。 plus: (a, b) { return a + b; }; f: () { return plus; }; export main: () { g : f(); syscall(1, g(1, 2)); };ちゃんと型安全です。 syscall(1, g(1));とか書く…