osiire’s blog

ふしぎなそふとやさん

2009-01-01から1年間の記事一覧

Dvarの基本ができた

concurrent cellに新しいモジュールDvar(http://forge.ocamlcore.org/plugins/scmsvn/viewcvs.php/trunk/dvar.ml?rev=20&root=ccell&view=markup)を導入しました。で、その基本的な関数がやっとできた。最近これを作ってたので、籠ってました。 Dvarとはどん…

FRP

FRP、Functional Reactive ProgramingのFをS、RをT、PをDに置き換えるとSTD。これは、Solve The Dependencyの略。つまり、FRPは依存性解決の事だったんだ!! な、なんだって〜〜?!

多相バリアントを使いこなそう(4)

前回までで多相バリアントの基本的な機能は説明してきました。そこで今回は、多相バリアントのとても重要な応用についてお話したいと思います。それは、場合分け構造の拡張問題です。 場合分け構造の拡張は難しい 例えば、次のようなコードがあったとします…

多相バリアントを使いこなそう(3)

さて、今日は多相バリアントの「三つの型」について紹介しようと思います。この「三つのの型」をうまく活用する事で、安全さと柔軟さと再利用性を同時に手に入れることができます。 三つの型 同じ`Aと`Bというタグを使っても、宣言できる多相バリアント型に…

多相バリアントを使いこなそう(2)

前回は、OCamlの多相バリアント型のタグは複数の多相バリアント型に属する事ができるというお話でした。では、この性質を応用するとどんな嬉しいことがあるのでしょうか?今日はまず、多相バリアントを組み合わせる場合のストーリーを挙げてみたいと思います…

多相バリアントを使いこなそう(1)

以前OCamlは学習コストが低いといいましたが、私のOCaml学習の中で唯一多相バリアントだけはその意味を理解するのに時間がかかりました。ただ、分かってみると単純な話で、誰かが噛み砕いて説明してくれれば回り道しなくてもよかったのではないかと悔やまれ…

知ってる?OCamlのオブジェクトってね...

多相レコードなんだ!普通のレコードって多相にならないよね!?例えば、 # type person = { name : string; age : int };; (* person型 *) type person = { name : string; age : int };; # type car = { name : string; doors : int };; (* car型 *) type ca…

知ってる?オブジェクトってね...

レコードと高階関数で書けるんだ!TAPLに載ってるのを読んで、へー(×2)と思ったので紹介するね!*1 # type t = { mutable name : string; mutable age : int };; type t = { mutable name : string; mutable age : int; } # type m = { get_name : unit -> …

Bouncing Ball in OCaml with Amthing

http://blog.mestan.fr/2009/04/28/bouncing-ball-in-ocaml-with-ocamlsdl/という話を見つけたのでAmthingでも挑戦。 (*******************************************************************) (* Amthing Example3. bounce ball *) (**********************…

叫びの例

なぜQt程のライブラリが、ウィジットが重なっている時にその下側でマウスイベントを取るオプションすら持ってないんだー。うがー。ポップアップメニューの出現位置も全く制御できないしー。やってられねー!

Re: 時代は今、Cursesへ

時代は今、Curses へ - Oh, you `re no (fun _ → more)について。 いや、放言なんてことなくて、結構本質を捉えてらっしゃると思います。私が感じるその本質とは、このCurses最強の理由にあります。 Curses の表面だけ使ってればスケーラビリティは自分で担…

OCamlの魅力

「Debian関連の方々の勉強会でOCamlをやったが、魅力がいまいち分からない(http://d.hatena.ne.jp/mkouhei/20090419/1240106632)」という話があるみたいですが、思い立ったので、私から見たOCamlの魅力、特にシステム開発の仕事で使うという視点から見たOCam…

レコードでもバリアントでもうまく表現できない

ある属性attr1はAとBという値を持つ。またある属性attr2はCとDという値を持つ。これをOCamlで表現するとこう。 type t = { attr1 : [ `A | `B ]; attr2 : [ `C | `D ]; } ただし、attr2のDという値はattr1の値がBの時のみ有効であるという条件を加えると...…

イベントドリブン(続き)

事は簡単。イベントと処理(やりたい事)の間を繋ぐ橋を作ればいいのです。具体的には処理(やりたい事)を中心に、この処理はどのイベントから起動されるのかを指定し、どういう状態の時に実行してよいかをまとめておく。こうすればこの「橋」は、指定された(複…

イベントドリブン

GUIプログラムはイベントドリブン。イベントが起きたら、それに対する動作を記述する。単純で分かり易いモデルだし広く受け入れられています。ただ、私はそもそもこのモデルには決定的に足りないものがあると思う。それは、イベントと処理(やりたい事)の間を…

ついにAmthing公開

AmthingをOCamlForgeにコミットしました!コンパイルするのはライブラリを揃えるのが大変だと思うので、とりあえず興味のある方はコードでも眺めてみてください。 https://forge.ocamlcore.org/plugins/scmsvn/viewcvs.php/trunk/?root=amthing AmthingはOCa…

私はどうしてGUIライブラリに興味を持ったのだろう?

「小さい頃は基本的にゲーム本位だった」と以前に書いたが、実は高校生の頃には既に、PC-98+MS-DOS上で動く常駐型グラフィックドライバを開発するほど描画系には興味を持っていた。ただ、それだけならゲーム会社に就職してもいいはずだったが、そうならなか…

amthing進捗

最近amthingの進捗が素晴らしく進んでいる。I君やM君に手伝ってもらっているおかげだ。ありがとう。どうしてもこのタームで完成させたいのでよろしくお願いします。完了: pango XIM over the spot 基礎的なイベントデバッグ TODO: librsvgへの対応 CLICK_OTH…

多相バリアントと型フィルター

多相バリアントってとても簡潔に便利なので、すぐに「次の要望」が出て来てしまう。例えば、型のフィルターが欲しい。 # type x = [`A | `B];; type x = [ `A | `B ] # let filter = function #x -> true | _ -> false;; val filter : [> x ] -> bool = <fun> # l</fun>…

多相バリアントと抽象化

多相バリアントとして定義している型xとそれを内包するモジュールがあって、ファンクター経由でそのモジュールを使う為に、そのモジュールのシグネチャーを定義したい。もちろん型xは抽象化して。ところが、そのモジュール内にごくまれに型xを拡張した型を含…

良いプログラマを目指すなら「Concurrent Progrmming in ML」は今すぐ読むべき

(いえ、どうせ前から広めたいとは思ってたので、ちょっと便乗。) これからマルチコア当り前時代になるし並行処理を扱えるようになりたい。でも並行処理って難し過ぎる。そんな諸氏に朗報です。簡単かつ安全にマルチスレッドを扱える方法があります。 それ…

C-c C-r

tuareg-modeにC-c C-rで選択部分をトップレベルで実行できる機能がある。evalっぽくて何気に便利。部分的にテストもできるし。

PPL2009行ってきた

3/9,10,11とPPL2009に参加して来た。もう書かないと忘れそうなので、メモと感想。ちなみに、私のポスター資料はこちら(http://www.itpl.co.jp/PPL2009.ppt)。 まずは吉田氏と藤田氏の招待講演が楽しかった。吉田氏の話を聞くと、id:keigoiさんがやってるセ…

変数未初期化とnan

が原因で徹夜したので記念カキコ。なんか前もそうだったな...。進歩なし。

D12HW EeePC Linux

諸般の事情で、イーモバイルと急遽契約。D12HWをGET。そこで、手持ちのEee-PCでもこれを使いたくなる訳だが、 初代モデルのEee-PC 701。 Xandrosプレインストールの日本じゃ売ってない代物。 Web検索しても、D02HWの話は出てくるけど、D12HWの動作報告は見つ…

OO難しすぎな例

OOというより、JavaとかC++への恨み節かもしれないけど。 バリアント無いなんて残念すぎる。type Card = Num of int | Jokerとかどうやって表現するの? strategyパターンって何?それなんて高階関数? compositeパターンとか難しすぎ。type 'a t = Node of …

WCAN mini AS参加予定

なぜか私のような人がWCAN、というミスマッチがまた面白いかも。 http://www.wcan.jp/index.php?ID=220

専門家の責任

は重い。本来の論点とは関係ないかもしれないけど、耐震偽装の名古屋地裁判決要旨を読んでそう感じた。 私は端から見ればソフト開発を生業にしている「コンピューターの専門家」。だけど、本当にその専門家の責任が果たせるだけの技能を持っているだろうか?…

ライブラリがオープンソースだと助かる

今までにも何度かあったけど、今日も某GUIライブラリのソースコードまで降りていってスピーディに難を切りぬけた。これがもしクローズドソースのライブラリだったらスピーディどころか打つ手無しだったろう。

続・ポイントフリー的ななにか

OCamlのlet多相は、 値は多相で処理。それ以外は単相。 単相が多相の部分型になってるときは、多相を回復。 という二段階。で、この部分型判定には、単相型がcovariantな位置にのみ出現するかどうかを調べる。covariantな位置というのは、要するに関数型の右…