2006-07-01から1ヶ月間の記事一覧
Genericsライブラリを移植したところまで。 あと残すは、StdLibライブラリの移植で、それが完了したら、ファイル操作、コマンドライン引数、ディレクトリ操作の順に対応を進めていきます。 あ、そういえば、dynamicsはどうするかな。
ってなんだろと思ったら、ニュートリノのことでした。 ヘェ、ニホンゴデハソウヨブノデスカ
という表現を良く使っていたけれど、よく考えると、普通(?)のバージョン管理ソフトでは、チェックインと呼ぶね。 Subversionでは、チェックアウトするという習慣がないので、チェックインという言葉になんとなくなじんでいないなぁ。
用意してもらうことになりました。 本当は、MSDNとVirtualPC(あるいはVMware)で問題なかった(多分、その方が安いのでは?)のですが、その辺の管理をしている人がそういうことに疎いので、いちいち費用対効果やらなんやら説明するのもめんどくさかったの…
CleanJの切りも良いので、ちょっと息抜き。 import StdEnv, OptEnv, MersenneTwister Start = mbrl 10 1 //make binary random list mbrl n seed = take n $ map (\x = (abs x) rem 2) $ genRandInt seed乱数種を与える方法として、OptEnvライブラリでrandSe…
この勢いで、Genericsライブラリまでportingできるかと思って試してみた。 GenParseとGenPrintは、ファイル操作系がまだできていないので変換できないが、それ以外はエラーなく変換ができた。 で、Genericsライブラリにあるgentestを実行してみたら・・・、…
これらの命令は、レコード型から指定したフィールドだけを取り出す命令なのだけれど、 void code_push_r_args_a (int a_offset,int a_size,int b_size,int argument_number,int n_arguments)とあるうちの、argument_numberが当初、aとbの両方をあわせたイン…
GenCompressとGenFMap以外はクリア。 GenCompressは、謎のエラーで落ちる。 GenFMapは、一つ結果が合わないものがある。 とりあえず、GenFMapからつぶしていこう。 --> select命令の修正 - GenCompressは・・・ StackOverflowErrorでした。あー。末尾再帰の…
の動作がおかしくなっていることに気づいた。 Start = (fc "abc", fi {1,2,3}, gc ['abc'], gi [1,2,3]) fc :: {#Char} -> [Char] fc t = [x\\x<-:t] fi :: {#Int} -> [Int] fi t = [x\\x<-:t] gc :: [Char] -> {#Char} gc t = {x\\x<-t} gi :: [Int] -> {#I…
GenCompressで、StackOverflowになるということで、末尾再帰にできるところを探して、できる限り末尾再帰になるように修正しました。 しかし、やはりStackOverflow。 Javaのオプションで、-Xssを指定することで、スタックサイズを変更できるということで、40…
GenCompressは、もともとメモリを消費しがちなモジュールだったようです。 Start = test [1 .. 100] where test x = case uncompress (compress x) of Nothing -> False Just y -> x === yというテストがcleanjでStackOverflowになっていたのですが、「test …
というわけで、File関連のGenParseとGenPrintを除いて、Genericsライブラリの移植を完了しました。 - テストも全部回しました。テスト中、一箇所、修正漏れを見つけたので、修正しました。
それにしても、cleanjは、だいぶメモリ効率が悪いようです。 これは、まだABCマシン命令の調査が主眼なので、ほとんど効率改善を行っていないということもあるのですが・・・ どこまでが、JavaVMの問題で、どこまでがcleanjの実装効率の問題なのか。どういう…
.record命令の d の扱いが間違っているのかもしれない。 Genericの方は置いておいて、.recordの d だけのテストを作って調査する必要があるかも。 - d の扱いは問題ないみたい。次のテストコードで確認。 :: R a = A a (R a) | B a !a !Int Start = (r1, dep…
技術書ばかり読んでいるのも疲れたので、気分転換に昔読みかけて放置していた本を取り出してみた。
A-Stackのインデックスがずれる箇所を特定した。 あとすこし!! - メモ:l7, create, case.7 - もしかして、pushD_aは、A-StackではなくB-Stackに情報を積むのか? - ビンゴっぽい。
どうやら、最後の砦は eq_desc だったらしい。 eq_descの第2引数の使い方を間違っていたようだ。 CodeGeneratorの対応する関数を見ると・・・ void code_eq_desc (char descriptor_name[],int arity,int a_offset) { INSTRUCTION_GRAPH graph_1,graph_2,gra…
pushDで、CleanDescriptorが引数に与えられたら、その表示名のchar[]をpushするようにしなければいけない。 今は、CleanDescriptorそのものをpushしているため、_match_errorでエラーになる。
[id:hira_sosuke:20060728:1154076391]を見て、ふと。 ベテランの書いたリアルなソースコードを、新人に読ませて発表させたら、教育と技術承継をかねて面白いかも。
[id:babie:20060727:p1]
もう、どこがどう悪いのか、さっぱり検討がつかなくなってきた。 とりあえず、B-Stackが空なのにpop命令が発行されているということがおかしいということは分かっている。 - もしかして、pushD_aは、B-Stackに何か積むのか? pushDもそうなのかもしれない。…
操作するように変更してみた。なかなかいい感じ。
懸案のpush_args_uは、レコード型のパターンマッチをするときに使われるらしい。 以下、テストコード。
非ボックス化した基本型を持つレコード型の場合は、push_args_uではなく、push_r_args_uの方が使われる。 push_r_args_u 2 2 1対応するCodeGeneratorの関数は、 void code_push_r_args_u (int a_offset,int a_size,int b_size)
eqD_bという命令がある。Genericのテストをやっている最中に見つけた。 CleanNodeで、 public static boolean eq_desc(CleanDescriptor d, int n, Object o) throws CleanException { return d == getDesc(o) && d.eq_arity(n,getData(o)); }というメソッド…
この2つはよく似た命令で、レコード型から要素を1つ取り出すというもの。 push_r_args_aが通常のオブジェクトで、push_r_args_bが非ボックス化基本値を対象としている。 CodeGeneratorの対応する関数は、 void code_push_r_args_a (int a_offset,int a_siz…
.record k121 daa 2 0 "Pair"これまで、.record命令は、 a : オブジェクト i : 非ボックス化整数 r : 非ボックス化実数 c : 非ボックス化文字 b : 非ボックス化真偽値 lR : レコード型非ボックス化正格リスト(頭のみ) を把握していたが、これに d が加わる…
早めに休みを入れたほうがいいが、 もっときついときは、 休みを取らないで、 出社した上で本来の仕事と 違うことをする方がいいかもしれない。
は、左手で操作したほうが便利かもしれない。 キーボード上で、右手の仕事は多いのに対して、左手の仕事は少ないので、左でマウスを操作するほうが左右のバランスが良くなるような。 今使っているマウスは、右利き用のトラックボールなので、左では使いにく…
StdGenericのgetConsPath関数で、push_args_u命令が使われているのを発見。 CodeGeneratorには、 void code_push_args_u (int a_offset,int arity,int n_arguments)とある。 void code_push_args (int a_offset,int arity,int n_arguments)との違いがまだ不…