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

Concurrent Clean : CleanJ : Subversionにコミットしました

Genericsライブラリを移植したところまで。 あと残すは、StdLibライブラリの移植で、それが完了したら、ファイル操作、コマンドライン引数、ディレクトリ操作の順に対応を進めていきます。 あ、そういえば、dynamicsはどうするかな。

幽霊粒子

ってなんだろと思ったら、ニュートリノのことでした。 ヘェ、ニホンゴデハソウヨブノデスカ

Subversionにコミット

という表現を良く使っていたけれど、よく考えると、普通(?)のバージョン管理ソフトでは、チェックインと呼ぶね。 Subversionでは、チェックアウトするという習慣がないので、チェックインという言葉になんとなくなじんでいないなぁ。

仕事でPCをもう一台

用意してもらうことになりました。 本当は、MSDNとVirtualPC(あるいはVMware)で問題なかった(多分、その方が安いのでは?)のですが、その辺の管理をしている人がそういうことに疎いので、いちいち費用対効果やらなんやら説明するのもめんどくさかったの…

Concurrent Clean : 各要素が「0または1をとる乱数」から成る長さnのリストを得よ。

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…

Concurrent Clean : CleanJ : Generics -> eqD_b

この勢いで、Genericsライブラリまでportingできるかと思って試してみた。 GenParseとGenPrintは、ファイル操作系がまだできていないので変換できないが、それ以外はエラーなく変換ができた。 で、Genericsライブラリにあるgentestを実行してみたら・・・、…

Concurrent Clean : CleanJ : push_r_args_a, push_r_args_b, repl_r_args_a, repl_r_args_b

これらの命令は、レコード型から指定したフィールドだけを取り出す命令なのだけれど、 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の両方をあわせたイン…

Concurrent Clean : CleanJ : Generics

GenCompressとGenFMap以外はクリア。 GenCompressは、謎のエラーで落ちる。 GenFMapは、一つ結果が合わないものがある。 とりあえず、GenFMapからつぶしていこう。 --> select命令の修正 - GenCompressは・・・ StackOverflowErrorでした。あー。末尾再帰の…

Concurrent Clean : CleanJ : List Comprehension -> select命令

の動作がおかしくなっていることに気づいた。 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…

Concurrent Clean : CleanJ : Java : 末尾再帰とスタックサイズ

GenCompressで、StackOverflowになるということで、末尾再帰にできるところを探して、できる限り末尾再帰になるように修正しました。 しかし、やはりStackOverflow。 Javaのオプションで、-Xssを指定することで、スタックサイズを変更できるということで、40…

Concurrent Clean : CleanJ : GenCompress

GenCompressは、もともとメモリを消費しがちなモジュールだったようです。 Start = test [1 .. 100] where test x = case uncompress (compress x) of Nothing -> False Just y -> x === yというテストがcleanjでStackOverflowになっていたのですが、「test …

Concurrent Clean : CleanJ : Generics移植完了

というわけで、File関連のGenParseとGenPrintを除いて、Genericsライブラリの移植を完了しました。 - テストも全部回しました。テスト中、一箇所、修正漏れを見つけたので、修正しました。

Concurrent Clean : CleanJ : メモリ効率

それにしても、cleanjは、だいぶメモリ効率が悪いようです。 これは、まだABCマシン命令の調査が主眼なので、ほとんど効率改善を行っていないということもあるのですが・・・ どこまでが、JavaVMの問題で、どこまでがcleanjの実装効率の問題なのか。どういう…

Concurrent Clean : CleanJ : .record d

.record命令の d の扱いが間違っているのかもしれない。 Genericの方は置いておいて、.recordの d だけのテストを作って調査する必要があるかも。 - d の扱いは問題ないみたい。次のテストコードで確認。 :: R a = A a (R a) | B a !a !Int Start = (r1, dep…

The End of Poverty: How We Can Make it Happen in Our Lifetime

技術書ばかり読んでいるのも疲れたので、気分転換に昔読みかけて放置していた本を取り出してみた。

Concurrent Clean : CleanJ : 見つけた!!

A-Stackのインデックスがずれる箇所を特定した。 あとすこし!! - メモ:l7, create, case.7 - もしかして、pushD_aは、A-StackではなくB-Stackに情報を積むのか? - ビンゴっぽい。

Concurrent Clean : CleanJ : eq_desc

どうやら、最後の砦は 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…

Concurrent Clean : CleanJ : pushD

pushDで、CleanDescriptorが引数に与えられたら、その表示名のchar[]をpushするようにしなければいけない。 今は、CleanDescriptorそのものをpushしているため、_match_errorでエラーになる。

教育

[id:hira_sosuke:20060728:1154076391]を見て、ふと。 ベテランの書いたリアルなソースコードを、新人に読ませて発表させたら、教育と技術承継をかねて面白いかも。

それって、ICFPコンテストのこと?

[id:babie:20060727:p1]

Concurrent Clean : CleanJ : はまった -> pushD_a

もう、どこがどう悪いのか、さっぱり検討がつかなくなってきた。 とりあえず、B-Stackが空なのにpop命令が発行されているということがおかしいということは分かっている。 - もしかして、pushD_aは、B-Stackに何か積むのか? pushDもそうなのかもしれない。…

マウスを左手で

操作するように変更してみた。なかなかいい感じ。

Concurrent Clean : CleanJ : push_args_u

懸案のpush_args_uは、レコード型のパターンマッチをするときに使われるらしい。 以下、テストコード。

Concurrent Clean : CleanJ : push_r_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)

Concurrent Clean : CleanJ : eqD_b

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)); }というメソッド…

Concurrent Clean : CleanJ : push_r_args_a, push_r_args_b

この2つはよく似た命令で、レコード型から要素を1つ取り出すというもの。 push_r_args_aが通常のオブジェクトで、push_r_args_bが非ボックス化基本値を対象としている。 CodeGeneratorの対応する関数は、 void code_push_r_args_a (int a_offset,int a_siz…

Concurrent Clean : CleanJ : .record d

.record k121 daa 2 0 "Pair"これまで、.record命令は、 a : オブジェクト i : 非ボックス化整数 r : 非ボックス化実数 c : 非ボックス化文字 b : 非ボックス化真偽値 lR : レコード型非ボックス化正格リスト(頭のみ) を把握していたが、これに d が加わる…

きつくなってきたときは

早めに休みを入れたほうがいいが、 もっときついときは、 休みを取らないで、 出社した上で本来の仕事と 違うことをする方がいいかもしれない。

マウス

は、左手で操作したほうが便利かもしれない。 キーボード上で、右手の仕事は多いのに対して、左手の仕事は少ないので、左でマウスを操作するほうが左右のバランスが良くなるような。 今使っているマウスは、右利き用のトラックボールなので、左では使いにく…

Concurrent Clean : CleanJ : push_args_u

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)との違いがまだ不…