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

Java : コンストラクタの継承

親クラスに引数の多いコンストラクタがあって、子クラスではコンストラクタで何もしないというようなときに、いちいちコンストラクタを書かなければいけないのは若干面倒。 普通は、まぁ、許せないというほどのことでもないけど、今回、内部クラスで、抽象メ…

Concurrent Clean : CleanJ : 進捗

プリティプリンタも作って、過去のテストが全て動くことを確認。

Todo管理ツール : Delphi

http://www.geocities.jp/lethevert/softwares/otherSofts/todo_20060531.zip なんとなく、Todo管理ツールが欲しくなったので、作ってみました。Windows専用です。これだけConcurrent Cleanのことを書いているにも関わらず、使ったのはDelphiです。だって、D…

Concurrent Clean : CleanJ

eq_descは、とりあえずクリア。まだ実行できないので、テストは後回し。 次に、build_uとpush_node_uが新しい。他にも新しいものがあるが、この2つはぱっと見てよく分からない。なので、次はここ。

Concurrent Clean : フィボナッチ数列

[id:omochist:20060531]より。Haskellでフィボナッチ数列をどう表現するかというネタ。 今なら、迷わずに、こう書く。 fib = let ls = [0,1:zipWith (+) ls (tl ls)] in ls

Concurrent Clean : CleanJ : 進捗

ということで、改造が一段落し、なんか、動くようになったっぽいけど、プリティプリンタを直していなかったので、正しく動いているのか分からない・・・

Concurrent Clean : CleanJ : タプル

最適化は置いておいて、タプルも普通にプレースホルダを使うようにしておこうと思います。ちゃんと動くことの確認が先。 タプルは、アリティが決まっていない特殊なディスクリプタなので、その扱い方の検討から。アリティを -1 にしておいて、上手く動く方法…

Java : Castのコスト

Castがコスト0というわけではないみたい。 逆アセンブルしてみたら、checkcastという命令が挿入されていて、キャストの正当性のチェックをしていた。 その他、配列とオブジェクトでは、命令がいろいろ異なっているけれど、コストに差があるかどうかまでは良…

仮想メモリ

http://blog.so-net.ne.jp/nakagami/2006-05-19より 仮想メモリとページファイル(やスワップ領域)の関係のことですが、仮想メモリを実装するのに、ページファイル(やスワップ領域)は必須ではないのではないかと思うのですけど・・・。違うかな? 仮想メ…

Concurrent Clean : CleanJ : 代数データ型、プレースホルダ、プリミティブ

ここ最近考えていたことの結論。 [id:lethevert:20060528:p6], [id:lethevert:20060528:p3], [id:lethevert:20060528:p4] Cleanの一般的なデータは、Javaの特定のクラスのオブジェクトで表現します。このオブジェクトが項書き換えにおけるプレースホルダにも…

相互評価の誤差

ちと古い話ですが、[id:lethevert:20051213:p3]で取り上げた相互評価の話。 直感的な話で申し訳ないですが、全社員が自分に仕事上関係する人の評価を相互につけて、その結果を集計して個々人の評価を決定するというようなシステムの場合、 1.人数が少ない…

TAPL : Types and Programming Languages (The MIT Press)

[id:lethevert:20060527:p1] もう届いたよ。すげ―なAmazon。

Concurrent Clean : CleanJ : プレースホルダ

ポインタのないJavaで項書き換えを行うには、プレースホルダを用意する必要があるのだけれど、全てのケースでプレースホルダを用意するのは効率が悪い。項書き換えが起こる可能性があるところにだけ、プレースホルダを用意すべき。 項書き換えが起こる可能性…

Concurrent Clean : CleanJ : 代数データ型

昨日の話([id:lethevert:20060527:p3])が良くわからなくなってきたので、代数データ型の例を作ってみた。 module Algebraic import StdEnv, OptEnv ::Tree x = Leaf x | Branch [Tree x] Start = sumTree $ Branch [Leaf 1, Leaf 2, Branch [Leaf 3, Leaf …

Java : 配列の部分コピー

配列の部分コピーを行うのに、最も効率の良い方法は何かと考えていたのですが・・・ int[] src = new int[] {1,2,3,4,5}; int[] dst = new int[6]; dst[0] = 0; for (int i=0; i

Concurrent Clean : CleanJ : Java : 配列とオブジェクトのどちらが効率的か

代数データ型の内部データ構造を考える。 Object[] data = new Object[2] { CleanSystem._Cons, vm.topN(2) };のように、これまた配列として取り扱うか、 CleanData data = new CleanData( CleanSystem._Cons, vm.topN(2) );のように、専用のオブジェクトを…

Concurrent Clean : 部分適用関数の印字

module HeadNormal import StdEnv Start = (+) 1は、(+)関数の部分適用を印字します。 (+;6 1)

TAPL : Types and Programming Languages (The MIT Press)

[id:lethevert:20060121:p5]で目をつけていた本。 もあと残り50ページを切ったので、そろそろ次の本を買おうかなと。 - で、買った。

ハードリンク

http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-05-24より % ln hoge hoge.old && mv hoge.new hogeなるほど。ハードリンクっていうのは、こう使うのか。

Concurrent Clean : CleanJ

ポインタのないJavaで、項書き換えを効率的に実装するにはどういう構造にするのがいいんだろう・・・ 今の実装はどうにもad-hocな感じなんだよねぇ。 あと、eq_descは、結局のところ、どういうチェックが通ればOKなのか。Object#equals()とは違う気がする…

Concurrent Clean : CleanJ : 次のプログラム

これが動作するようにしてみます。 module InfList import StdEnv Start = my_take 10 (my_from_o 0) my_take 0 _ = [] my_take n [x:xr] = [x:my_take (n-1) xr] my_from_o n = [n: my_from_o (n+1)]

Windowsって、

プログラムをバイナリ配布できるけど、それって考えてみたら結構すごいことかもね。 パッチをあてても互換性が維持できるというくらいならともかく、サービスパックが違っても、OSのメジャーバージョンが違っても、同じバイナリが動作するようになってるって…

Java : double型とスレッドセーフ

Javaで、double型の演算は、アトミックでないので、volatileを付けましょうという話があるのですが、それって、代入の話なんだ、と、上の件に関連して思った。

Concurrent Clean : CleanJ : ABCマシン : Real型とB-Stack

B-Stack上でReal型を取り扱う際に、スタックのインデックスがずれる現象が起こっていて、悩んでいたのだけれど、原因がわかりました。 CleanのRealはDoubleなのですが、これがB-Stack上では2セル分に相当するんですね。考えてみればあたりまえなのだけど、…

Concurrent Clean : CleanJ : snapshot更新

http://www.geocities.jp/lethevert/softwares/clean/customize.html プリティプリンタの修正、Real型演算、ガード、コマンドラインオプションを追加。 コマンドラインオプションでは、パッケージとインポートの指定ができるように。 ということで、ファイル…

Concurrent Clean : CleanJ : プリティプリンタ

[id:lethevert:20060518:p2]では、toString()でOKとかって書いてるけど、文字列結合のコストがかかる(リストとかだと問題)し、無限リストは表示できないし、Lazyな式を評価しながら表示しないといけないしで、toString()だけでは良くない。

なんか、全部、Lispでいいような気がしてきた。

携帯電話でJavaが動くこのご時世、Lispの処理系はもっと軽いよ。Lispの文法なんて、プログラミング言語の中では、むしろ簡単な部類に入ると思うしねぇ。 まぁ、Lispというか、S式が便利なのかもしれないけど。

Concurrent Clean : CleanJ : カリー化の実装がまずかったので修正。

引数が1つ追加するごとに、新しい関数オブジェクトを生成するように変更。

Concurrent Clean : CleanJ : snapshot更新

http://www.geocities.jp/lethevert/softwares/clean/customize.html リストとカリー化ができるようになりました。 リストのテストコード。 module List import StdEnv Start = [0,1,2,3,4,5]カリー化のテストコード。 module Curry import StdEnv Start = a…

ソフトウェア技術者の分類例

漠然とした概念を、恣意的な基準でもって2つに分けるというのは、古典的だが非常に有効な分析方法で、これがために人類が知能を獲得したといってもいいすぎではないと思うのですが、そのテクニックをソフトウェア技術者に当てはめてみようという話。 2つに…