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

Concurrent Clean : CleanJ : test02 completed

test02 completed.

Concurrent Clean : L.L.Ring : Collatz予想の収束問題

観戦する、といっておきながら、結局あれこれ書いています・・・ [id:lethevert:20060713:p2]のやつは、いくつかズルしているので、その辺について考察。 まず、どうしても気に食わないのは、 y p n = q 0 n where q c n | n == 1 = c = p (q (c+1)) nのガー…

Concurrent Clean : L.L.Ring : Collatz予想の収束問題 : メモ化

せっかくなので、メモ化もしてみる。 先に作った構造をそのまま残したまま、関数 y をメモ化版に書き換える方針で。 まず、再掲。 f` y = y \e f n = if (n==1) (e 1) if (isEven n) (f (n/2)) (f (3*n+1)) g = f` y where y p = let q n = 1 + (p (const 0)…

Concurrent Clean : CleanJ : Java : オートボクシング

不思議なバグが取れないなぁと思って、いろいろ考えていたら、int値がオートボクシングでObjectに変換されているところだった。 これは、はまるとはまるかも・・・

Concurrent Clean : L.L.Ring : Collatz予想の収束問題

[id:lethevert:20060712:p2]コメント欄で指摘されました。 数学的には無限数列が収束するということにしておいて問題なさそうだけど、確かに問題文には従っていないです。 ただ、さすがに関数の呼び出し回数を何の仕掛けもなしに数えることは無理なので(Rub…

Concurrent Clean : CleanJ : build_u

StdListに build_u _ 1 1 n181という命令を見つけて、はたと考える。 基本値をそのまま持つのは、レコード型だけだと暗黙で仮定していた。 以前は、CleanBasicを使っていたので、上手くいっていたのだけど・・・

Concurrent Clean : L.L.Ring : Collatz予想の収束

本当はRound 2は観戦にしておこうと思っていたのだけれど、 http://idm.s9.xrea.com/ratio/2006/07/12/000484.html を見て、なにか挑戦された気がしたので、結局書いた。 何を挑戦された気がしたかというと、「問題を読み替えないで実装するためには、副作用…

Concurrent Clean : 8queen

そういえば、8queenって、まともに解いたことがなかったのではないかと思った。 で、解いてみた。 Start = show $ queens 8 show (n,as) = (show as,as) where show [] = "\n" show [a:ar] = "\n" +++ fill n a +++ show ar where fill n 0 = "*" +++ fill (…

Concurrent Clean : 素数

http://www.unfindable.net/~yabuki/blog/2006/06/100sql.html そういう書き方もあるよね、ということで Start = filter is_prime [2..100] is_prime n = case filter is_divisor [2..n-1] of [] = True _ = False where is_divisor x = 0 == (n rem x)うー…

"Compiling Haskell to Java", Mark Tullsen

http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20040829#p05 http://www.cs.yale.edu/homes/tullsen/ 1996年に似たようなことをやっている人がいた。

Concurrent Clean : CleanJ : ABCマシンコードの命令セットは冗長な気がする件についての考察

データ構造というのは、結局のところ、一定の大きさの目印のないメモリ領域に書き込まれたビット列なので、何かしらの補助情報を与えてやらないと、意味のあるものとして扱うことができないのですが、 補助情報をどうやって与えるかについては、ソースコード…

Concurrent Clean : CleanJ : test01 completed

fillh ARRAYの取り扱いを修正して、test01 completed

Concurrent Clean : CleanJ : ABCマシンコードの命令セットは冗長な気がする

メタデータをたどれば取れる情報も命令の引数に渡していたり、同じようなことを行う命令がいくつもあったりする。 メモリ領域を直接操作する場合には意味のある引数なのだろうか? - あと、スタック操作の順序が明らかに合理的でない場合もある・・・ もっと…

Concurrent Clean : CleanJ : ARRAY

buildh, fillhで、ARRAYというdescriptorが出現するが、これが配列の種類によらず使われている。 これは想定外。しまった。どうしようかな。

Concurrent Clean : CleanJ : Nil と null

ListのNilにnullをプリミティブとしてあてることは可能だろうか?

Concurrent Clean : CleanJ : レコード型対応 一段落

レコード型対応のために始めたCleanJの構造変更の作業が、一段落ついた。 run_test01が通るようになった。ただし、下に書いた、ARRAYに関するところは未対応。

Concurrent Clean : CleanJ : CleanNode

CleanNodeというクラスがある。CleanJの項グラフ書き換えのプレースホルダになる重要なオブジェクトなのだが、この定義はこのようになっている。 final class CleanNode { CleanDescriptor desc; Object data; }たとえば、整数型のデータなら、 final class …

HTML : target属性

http://www.salchu.net/blog/log/eid515.html フレームのことは置いておくとすれば、 そのリンクがどういうリンクかが記述できて、 (例) ページ内 サイト内 サイト外 ブラウザ側で、それぞれのデフォルト動作が定義できれば、target属性はいらないのかもと…

Java : メソッド呼び出しの効率の調査

4.フィールドの直接アクセスと間接アクセス public final class A { public int[] is = new int[10]; public int is(int i) { return is[i]; } public void is(int i, int val) { is[i] = val; } } public final class Main { public static void main(Str…

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

レコード型の非ボックス化配列である。 前に、次のようなものを考えているということを書いたが、 class A { Object o; int i; } class A_array { Object[] os; int[] is; }これは効率が悪いことをに気づく。同じレコードの要素がメモリ領域内で連続しない。…

Java : finalメソッドの効率

hiuchidaさんが詳細なテストを行ってくれました。 http://blog.goo.ne.jp/hiuchida/e/cf1c3e82d668cc21d6b6b1f71da217e1 処理系によっては、finalと非finalではっきりした違いがでることもあるようです。 # それにしても、IBMは群を抜いて速いですね

Java : クラス階層の末端かどうかはどうやって判断しているの?

http://blog.goo.ne.jp/hiuchida/e/bc14f431bd8371bc97b5fdd8cb562685を読んで思った。 確か、JavaVMって、動的にクラスを生成して、動的にそれをロードすることも許してるよね。(JSPとかって、それを活用したものでしょ?) だとすれば、VM起動時(あるいは…

細かいチューニングが大切なとき「も」ある話

「痛い」とか言われてムと思ったので、一見バカバカしいチューニングでも決定的な意味があること「も」あるということを書いておこうと思った。 - 最近のハードウェアは早くなったといいながら、メモリアクセスは結構遅いというのを、最近どこかで話題になっ…

Javaの話をしていると、レスがつくこと

CleanJの話をしているときにも、このくらいの勢いでレスをつけてくれないかなぁ。

Java : メソッド呼び出しの効率調査

ばかばかしいと言われようが、無駄だと言われようが、納得いくまで調査するのが信条ですから。それに、効果がないことが分かるというのも、有意な結果です。 1.デフォルトコンストラクタと普通のコンストラクタ public final class A { String s0; String …

Java : DI

DIが分からない。 いや、分からないわけはない。 オブジェクト間の関係をコード以外のところに記述しておいて、動的に再構築するという手法のことだということくらいは理解している。 Delphiのdfmは一種のDIだということも説明されるまでもなく分かるし、そ…

Java : final class, final method

言語仕様では、finalメソッドはinline展開できますよということでしかないということは分かりました。 でも、結局のところJavaは動的な言語なので、あるときfinalで宣言されていたとしても、その後リコンパイルされたとき(共通部分を別のjarファイルにして…

Java : 実行効率のよいクラスを定義するポイント

というわけで、次のようなところに気をつけると、実行効率のよいクラスの実装になるのではないかと思います。 class, methodをfinal指定(ないしprivateメソッド化)する -> メソッド呼び出しの効率化 クラス階層をObject直下におく -> 初期化処理の効率化 -…

Java : VMの起動の高速化(失敗)

JavaVMの起動が遅いのは、ライブラリが大きいせいなのではないかと考えて、起動時に読み込むライブラリを減らしてみる実験をした。 -Xbootclasspath:というオプションをつけると、VMの起動ライブラリを変更できるのだ。 読み込まれているライブラリは、「jre…

余計なお世話です

[id:JavaBlack:20060704:p2] あと、finalを付けられるところにはfinalを付けるというのは、別によい習慣とはいえないと思う。設計上finalであるべきところにfinalを付けるのは良い習慣といえるけど。