2006-07-01から1ヶ月間の記事一覧

failmalloc : mallocの失敗を意図的に起こす

http://enbug.tdiary.net/20060714.html あー、なんと言うか・・・、考えます。

仕事

ここのところ、仕事内容についてかなり鬱っているが、今日、すこし持ち直せそうな気がしてきた。 でも、自信は4割くらい。 1週間くらい、実作業を止めて、メタなことをやっていれば、もうちょっと確実な気がするけど、この時点でそれをやっていいものか・…

Concurrent Clean : generic

CleanJの開発で、StdEnvで後残るのはファイル操作系とGeneric系のみということで、ファイル操作系は最後に回すので、ここはGeneric系を見ておこうということに。 StdEnvには、Generic系はほとんど記述がなく、基盤となるStdGenericのみが存在するだけだ。実…

Concurrent Clean : CleanJ : .keep

.keepという命令を、_SystemEnumStrictを調査中に発見。 とりあえず、無視。

Concurrent Clean : CleanJ : _Conss, _Consts

StdOverloadedListを調査中に、新しいConsを発見。 _Conss _Consts - あ、これは、ただの関数だ。 CleanSystemに_Consstsがあるので、このグループの関数でした。 - 多分、 _Conss 頭部正格リスト _Consts 尾部正格リスト _Conssts 頭部尾部正格リスト です。

Concurrent Clean : CleanJ : repl_r_args_a

repl_r_args_a命令について。引数の意味が良くわからない。 - 分かった。 repl_r_args_a al bl aidx alen第1引数と第2引数は、argumentsの全体のサイズ。 第3引数はargumentのインデックスで、第4引数は指定したargumentのサイズ。 - 以下、参考資料

Concurrent Clean : CleanJ : 非ボックス化正格リスト

Intの非ボックス化リストには、ConsiとConsitsの2つのリストがある。Consiは頭部正格リストで、Consitsは頭部尾部正格リストだ。 最初、ConsiとConsitsは尾部の持ち方を変えて、Consitsは尾部が評価済みであることを前提にした実装にしていたのだが、Consit…

Concurrent Clean : CleanJ : 基本値の正格リストの実装が完了 & レコード型非ボックス化リスト

StdOverloadedListの関数に対するテストも完了。 - 次は、レコード型の非ボックス化正格リストの実装。 レコード型非ボックス化リストが必要なときは、次のレコードが生成される。 .record r_Cons#Rec lRiaa 2 1 "[#Rec]"対応しているレコードは、 ::Rec = {…

Concurrent Clean : CleanJ : buildの第3引数の活用

build命令の第3引数は、ほとんどの場合意味のない引数だと思っていたのだけれど・・・ build d_cons_u;4 2 n_cons_u;4このような場合、第3引数の「n_cons_u;4」は無視していたのだけれど、 .desc d_cons_u;4 _ l_cons_u;4 2 0 "_cons_u;4"対応する宣言がこ…

Concurrent Clean : StdOverloadedList Diag2

Diag2という関数を使うと、コンパイルエラーになる。なんか、マクロ展開された局所関数の型付けが上手く行かないようだが・・・

Concurrent Clean : CleanJ : レコード型非ボックス化正格リストの実装完了

ひとまず、実装完了して、動作確認まで。 レコード型リストのデータが次のように連続してできることに着目して、プリティプリンタを実装した。 .record r5 ia 1 1 "!!!" .record r_Cons#!!!! lRiaa 2 1 "[#!!!!]" .record r_Cons#!!! lRiaa 2 1 "[#!!!]" - S…

Concurrent Clean : CleanJ : buildとbuildhとbuild_r

いまさらbuildとbuildhの違いが分かった。 buildもbuildhもスタック上のデータをargumentsとして新しいnodeを作成する命令なのだが、buildはスタック上のデータをそのままにして新しいnodeを生成するのに対し、buildhはスタック上のデータをpopして新しいnod…

修正履歴

修正したら、ソースコードにコメントで修正履歴を残すようにしてくれ、みたいなことを品質管理をしている人から言われたのだけれど、絶句してしまった。 そういえば、他の人のソースを読むと、人によって、日付と修正内容(一行くらい)がやたらと書いてあっ…

Concurrent Clean : CleanJ : レコード型非ボックス化正格配列

実装完了。テストは、test05.RecordArray。 Subversionにコミットした。 - 次は、GenericをやるかStrictListをやるかだけど、どうするかな? Genericは使い方そのものをまだ良く分かっていないので・・・StrictListからにしようかな。

Concurrent Clean : CleanJ : buildF

_SystemStrictLists.abcを眺めていたら、buildF_bという命令が出現。 なんじゃこりゃ。 こういう文脈。 repl_r_args 1 2 push_a 0 buildF_b 0 buildh _Tuple 2対応する関数は _decons_uts :: !u:[#.e!] -> (!.e,!u:[#.e!]); - これっぽい instance UTSList F…

Concurrent Clean : CleanJ : 正格リスト

「_Nil」は全て共通 各種Cons _Consi _Consr _Consc _Consb _Consf _Consa _Consits _Consrts _Conscts _Consbts _Consfts _Consstsえっと、これ1つ1つ書くのか? めんどいな・・・ - _Consaは配列のリストみたい。 実装上、どのような違いをつけるべきか…

Concurrent Clean : CleanJ : 正格リストの実装ができてきた & Real型の取り扱い注意

とりあえず、テストプログラムが動くようになってきた。 - Real型は、2ワードなので、build_rなどでずれるので気をつけましょう。 build_r _Consr 1 2 0 0で、 public Object build(CleanVM vm, int a, int b, int as, int bs) throws CleanException { if …

Concurrent Clean : CleanJ : build_rの引数

build_rの引数の意味を間違えていた。 そのせいで、CleanDescriptorのbuild(CleanVM, int, int, int, int)の実装もおかしかった。 build_r d a b x y oのように考えていたが、 build_r d al bl o as bsの間違い。

再帰

最近、プログラミングの教育をやる機会があって、再帰って大事だよ〜便利だよ〜ということを説明したら、 int[] f (int[] ls, int i) { if (i==0) { ls[i] = i; } else { f(ls,i-1)[i] = i; } return ls; }みたいな(ちょっと脚色したけど・・・)素敵なプロ…

Concurrent Clean : CleanJ : 型クラス

型クラスが動作するのを確認しました。 StdOverloadedList.abcとStdClass.abcをコンパイルして、テストを全て実行して確認しました。 - コミットした。

Concurrent Clean : CleanJ : 動かしてみたって人が現れた

おお。 まだ何も取説を付けていないのに。 公開しておくもんだなぁ。 - で、basic-typesのメソッド引数としての受け渡しはどうやるのだ?という質問だったのだけれど、 All functions are invoked with CleanVM object as an argument which holds a-stack f…

Concurrent Clean : CleanJ : レコード型 : とりあえず動いた。

レコード型の実装の確認に使っていたテストがパスして、実装が一段落。 次は、型クラスが今のレコード型の実装で正しく動作するかどうかの確認と、型クラス関連のテストをたくさん。 その辺が終わり次第、正格リストの実装の検討に入ります。 - 実際に動作確…

Concurrent Clean : CleanJ : test03 & test04 completed

test03 & test04 completed.

Concurrent Clean : CleanJ : さて次は・・・

test04まで通して、次にやることを忘れていました。あまりにも長く間が空いたので。 [id:lethevert:20060626:p3] .record命令の実装 これは、型クラス、レコード型、代数データ型などに関係しているところ。 [StdEnv] _SystemArray, _SystemEnumStrict, _Sys…

Concurrent Clean : CleanJ : さて次は・・・(2)

直前のコミットから3週間ほども空いてしまったのはなぜかと考えて、その間にやっていたことを確認。 Javaの書き方による効率性の違いの調査 Cleanのオブジェクトの種類・特徴とその実装方法の検討 ABCマシンとJavaVMの違いに関する考察 あと、途中でfinalに…

Concurrent Clean : CleanJ : レコード型

build d17 -3 n17なんだ、この「-3」というのは? .desc d17 n17 l17 1 0 "StrictRecord.i" .n -3 d17と何か関係があるのだろうか? .record r16 ircba 1 5 "StrictRecord" .descn t16 c16 5 1 "StrictRecord" .n 5 t16 .o 1 0 c16 push_node _cycle_in_spin…

Concurrent Clean : CleanJ : build [^ ]+ -\d+

build命令に負数が登場するという怪しいものは、これまで build d_S.1 -1 n_S.1のような、タプル操作に関するところだけだった。 うむ。タプルはレコード型だったのか!? それはともかく、共通するのは、両方とも、オブジェクトの要素を取り出す関数である…

Concurrent Clean : CleanJ : fill_r

fill_r命令の引数の意味を考えている。 .record r10 aaaaa 5 0 "LazyRecord" .record r16 ircba 1 5 "StrictRecord"に対して、 fill_r r16 1 5 1 0 0 fill_r r10 5 0 5 0 0という対応。 第6引数がターゲットだよね。 第4引数って、意味なくね? 第5引数の…

Concurrent Clean : CleanJ : push_r_args_b

push_r_args_b命令の引数の意味を考えている。 .record r16 ircba 1 5 "StrictRecord"の最初の「i」を取り出す関数。 .desc d17 n17 l17 1 0 "StrictRecord.i" .n -3 d17 .o 1 0 n17 push_node _cycle_in_spine 1 jsr_eval 0 .o 2 0 l17 push_r_args_b 0 1 5…

Concurrent Clean : CleanJ : レコード型実装

とりあえず、実装したが、実行したらいろいろエラーが出る。 とりあえず、B-Stack sizeが -5 みたいなわけのわからん数字になっているのをどうにかしないと。