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

Concurrent Clean : 一周年

私がConcurrent Cleanに出会って、ちょうど1年経ったようです。 去年の6月30日の日記 → [id:lethevert:20050630] それに先立つ6月6日([id:lethevert:20050606])に、OCamlとHaskellの記述があります。 私の場合、コンピューターサイエンス系の大学の…

Concurrent Clean : CleanJ : レコード型

さて、そろそろ、レコード型をどう実装するかを考えないと。 レコード型で気になるポイントは 基本型を効率よく格納できること 非ボックス化配列を効率よく取り扱えること ということで、これまでは、通常のオブジェクトだけを要素にもつものしか考えていな…

Concurrent Clean : Haskell : concatN

[id:oto-oto-oto:20060629:1151588922] ん?これは、dependent typeになるのかな? Cleanの型システムでは、これが限界か?(Haskellも同様?) Start = concatN 2 (L [L [L [V 1,V 2,V 3],L [V 4,V 5,V 6]],L [],L [L [V 7],L [V 8],L [V 9]]]) ::ListValue…

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

Cleanのオブジェクトは次の4つに分類できる。 基本型 × 実行× カリー化○ 非ボックス化配列 int[ ], double[ ], char[ ], boolean[ ] 関数オブジェクト ○ 実行○ カリー化× 非ボックス化配列 代数データ型 × 実行○ カリー化× 非ボックス化配列 レコード型 × …

Java : for文

昨日の件。 for (int i=0, l = args.length; i < l; ++i) {は、イディオムとしても簡潔だなと思った。 これは、iとlがどちらもint型であるために成立する文で、次のように型が違う場合には、文法的に正しく書く方法がない。*1 for ({int i=0; String s=""}; i…

Concurrent Clean : SQLを組み立てる

CleanでSQLの文法を真似した構文で、SQLを動的に組み立てるようなものを作ってみようと思った。特に、何に使うというわけではないが、唐突に。 10分程度で適当に作ってみた。 Start = sql_select ["col1" @ "t", "col2" @ "s"] ["table1" as "t", "table2"…

ベストエフォートメモリ管理

今の時代、特別な性能要求がなければ、メモリ管理機構を備えた処理系を選択するのが当然だと思いますが、諸般の理由から、特別な性能要求がないにもかかわらず、CやDelphiといったメモリ管理機構を備えていない処理系を使わなければいけないことがあります。…

Concurrent Clean : パターンマッチとガード

Types and Programming Languages (The MIT Press)のP.47あたりで、こんな関数定義があって、 let rec isval t = match t with TmTrue(_) -> true | TmFalse(_) -> true | t when isnumerical t -> true | _ -> false"when"って便利そうなキーワードだなーと…

Java : 「.」のコストとfor文の最適化

http://dev.ariel-networks.com/Members/dev/300cfor-6587-2-0300d304b3089306e30e130bf30e130c330bb30fcより for (int i=0; i < args.length; ++i) {という書き方よりも for (int i=0, len = args.length; i < len; ++i) {という書き方の方が早いよという話…

なんか、過去の記事がいまさらにブックマークされていた

これ(→[id:lethevert:20040321:p4])なんだけど・・・ 自分の書いた文章だとは思えん。

Concurrent Clean : CleanJ : Snapshot更新

昨日までの更新分を全て反映。 cleanj.20060627.zip

オブジェクト指向 : なぜ、継承するのか?

と、[id:m-hiyama:20060627:1151371730]を見て思った。 ここでは、特に実装の継承のことを念頭においているのだけれど、どうしてオブジェクト指向の話になるとすぐに継承の話が出てくるのかなと思うことがある。継承なんて、必要なら使えばいいわけで、無理…

お、Perlが増えてる

歴史のこと

[id:habuakihiro:20060618:1150619450]を見て。 実績を年数で見れば、PerlはJavaの2倍以上昔から使われているのになと思った。PythonもRubyも、生まれはJavaより早いしね。

L.L.Ring

チケット取ってきた。 - ところで、表記なんですが、LL Ringと表記しようと思ったけれど、hatenaだと、スペースが入った文字列を上手く検索できないので、L.L.Ringの表記に統一することにしました。

Concurrent Clean : CleanJ : StdList

あれこれ苦しんだ挙句、とうとうStdListの移植が完了しました。 あと、_SystemEnumの移植も完了。 - Subversionを更新しました。 SnapShotはこちらより「cleanj.20060626.zip」

Concurrent Clean : CleanJ : 次は・・・

積み残し分 [StdEnv] StdFunc, StdMisc, StdOrdList [OptEnv] OptEnv - .record命令の実装 これは、型クラス、レコード型、代数データ型などに関係しているところ。 [StdEnv] _SystemArray, _SystemEnumStrict, _SystemStrictLists, StdCharList, StdClass, …

Concurrent Clean : CleanJ : ycomb

OptEnvのycombが、次のようにコンパイルされる。 ycomb :: !((.a -> .b) .a -> .b) -> (.a -> .b) ycomb g = let f = g f in f.export e_OptEnv_sycomb .export e_OptEnv_eaycomb .descexp e_OptEnv_dycomb e_OptEnv_nycomb e_OptEnv_lycomb 1 0 "ycomb" .o …

Concurrent Clean : CleanJ : CAF

CAFの対応を行う。ただし、レコード型に対する対応は、また今度。 関連する命令 .caf CAFの宣言 testcaf CAFが初期化されているか? pushcaf CAFをスタックに積む fillcaf スタックトップのデータでCAFを書き換える

Concurrent Clean : CleanJ : StdFunc, StdMisc, StdOrdList, OptEnv

移植完了。

『関数型言語なんてクソの役にも立ちません!!』

昨今のHaskellブームやSICPブームで関数型言語が順調に広まっていくと、そんなことをいう経営者が出てきたりして。 あなたが、業務システムの開発において、カリー化する機会がないからといって、世間を怨んではいけません。高階関数を実装する機会に恵まれ…

Haskell : 遅延評価

ふらふらしていたら見かけたのですが、 [id:cyross:20060624:p2] Haskellは純粋関数型言語なので、同じ式を何度評価しても、同じ値が返るだけなんですよね。

Concurrent Clean : CleanJ : StdTuple

StdTupleも移植とテストを完了。

Concurrent Clean : CleanJ : _system.abc

このファイルの存在を忘れていた。 CleanSystem.javaというファイルに対応するものなのだけれど、初期の頃に、CleanSystem.javaを手書きで書いていたため、_system.abcに対応していることを、すっかり忘れていた。 _system.abcは、手書きで書かれたabcファイ…

Concurrent Clean : CleanJ : n_S.1, n_S.2, ...

_system.abcを思い出したのは、StdListの移植をやっているときに、n_S.1などの関数エントリーのラベルが出てきたためで、これが、_system.abcに定義されていたからだ。 で、この関数、定義を見ても、何をやりたいのかわからない。何せ、対応するiclファイル…

Concurrent Clean : CleanJ : StdList

次のプログラムの結果が合わない。 Start = avg ['a'..'z'] instance / Char where (/) a b = toChar (toInt a / toInt b)CleanJでは、ある程度期待通りの結果なのだけれど、 $ java test03.Avg 'i'Cleanでは、何か良く分からない文字になる(コントロールコ…

あれ?

L.L.RingでOCamlの話をするのって、id:soutaroさんじゃないですか?

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

プリティプリンタで出力するプリミティブの形式を、Cleanの形式にするか、Javaの形式にするかを迷う。 今のところ、Clean形式にしていたのだが、それだと、 -0.9507383192248376が、 -.950738319224838となるのを見て、Java形式にあわせる方がいろいろ面倒が…

Concurrent Clean : CleanJ : StdChar

StdBool, StdRealも移植完了。 ただし、StdCharは、コンパイルは成功したものの、結果が合わない。 Javaの文字型とCharの文字型の内部形式が違うことに起因している可能性もあり、どのように扱うかを考慮中。 - 結局、何が原因かわかりました。 Cleanの内部…

Trac

Tracを使ってみた。 Windows版だと、Python24ではバイナリ配布版が利用できないので、Python23を使うこと。 インストールには成功したものの、リポジトリブラウザの応答が異様に重い。何故だろう? 普通のWikiは快適な速度。Subversionにアクセスするところ…