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

strstr、もしくは文字列内の文字列を探す関数

OCaml の標準ライブラリにはなぜ文字列内の文字列を探す関数がないのか? C にだって、char * strstr(const char *haystack, const char *needle) という関数があって、haystack(藁の山)から needle(針)を探し出してくれるのに、、、おかしいよ、変だよ。お…

ライブラリの質について

id:ytqwerty さんの OCamlのライブラリのビルドが通らない10の理由 を読んだ。どうやらWindowsで開発されているようなので、お気の毒としか言いようがない理由が多いが、、、OCaml のライブラリは昔から基本的に「この機能ないじゃん、じゃあ自分で書くか」…

外国語は細かい事言っても始まらない

こんどこそOCamlと関係ない話。どこぞのblogで、これからはToDoじゃなくてToCanだ、とか書いていた。いいこと書いてるなと思ったら、内容のことはほっといて、誰かがご丁寧に文法の間違いを指摘していた。ToCanでいいじゃないですか。ToDoという文脈の上でな…

Timezone と Uniqlock

ちょっと酔っている。仕事で扱っているOCamlコードのタイムゾーンの扱いがヌルい。誰か地球が平坦だと思っている奴がいるらしい。残念ながらOCamlは使ったからといって誰でもよいコードが書ける言語ではない。逆にそんな言語があっても困ってしまうが。ある…

デバッガは必要か

極論だが。OCamlではデバッガは特に必要ない。以下理由: Cでデバッガが必要になるようなメモリ回りのバグはそもそも発生しない。これまず重要。 ocamldebugは強力だが、実際使わないでも仕事が出来る。故Cristalでも使ってるのほとんど見たことない。 Uncau…

omake: OCamlフレンドリーな超強力ビルド ツール

omake という make のパチモンみたいなものがある。だが、「おまけ」の癖にこれが素晴らしいツールなのだ。私が仕事でOCamlプログラムを書く時には必ずこれを使う。念のために言っておくと、OCamlMakefile という、OCaml でよく使う定義を集めた Makefile 集…

進捗: OCamlSpotter

変数について query を発した場合の、それを定義しているコードへのジャンプの可能性を考えている: local variable : 場所が判っているので問題無し global variable : stypes.ml の時点でモジュール名がフルパスで判っているし、.spot ではコンパイル時の i…

ocamlbuild 対処法

前にも書いた ocamlbuild の hygiene violation に関する問題の解決法が判ったのでメモしておく。OCaml を改造しようとする人以外は意味のない内容だ:新しいディレクトリを OCaml コンパイラソースに追加、そこで .ml ファイルをコンパイルする場合、ocamlbu…

続 Recursive module と class

日本のOCaml界(と限定するのは失礼か)のホープ Nさんから recursive module の typing のバグに関する情報を頂いた。現在の OCaml の recursive module の実装では再帰型に関するコンパチビリティーを調べる際の展開(folding)が不十分なのではないかとのこと…

OCamlSpotter

何をする(ことになる)プログラムか: editor 上での OCaml プログラミング支援ツール カーソル位置にある式等の情報を教えてくれる 変数の定義に簡単に飛ぶことができる(と嬉しい) functor で作成された module の id に関しても解析して functor 中の定義に…

ocamlbuild sucks

ocamlbuild が嫌いだ。CamlP4は評価する点もあるが、ocamlbuildは少なくとも今のところ完全な間違いだ。ocamlbuild のドキュメントには: automating the compilation of most OCaml projects with minimal user input と書かれているが、ocaml のソースにあ…

CamlP4 sucks

CamlP4 が嫌いだ: 他のツール群が全て ocaml○○ にもかかわらず、p4 は camlp4○○。3.09の時はもっとひどかった。ocpp とかなんですか? camlp4{o,of,oof,orf,r,rf} いい加減にしてほしい。ちなみに ocamlprof は名前は似ているが全く別のツール。 revised syn…

続 lazy pattern

Michel 自身も caml-devel でコメントしているが、lazy _ というパターンは内部を見る必要がないにもかかわらず、force する: (fun (lazy _) -> ()) (lazy (prerr_endline "hello")) は hello を出力する。まあ、これはいいんじゃないかと思う。lazy とパタ…

ICFP contest

火星人ねえ。参加する人は頑張って下さい。 私はこういうコンテストには参加するほどの体力ないし、参加しても後に何か役にたつ物が残るわけでもないし、今やってることのほうがよほど面白いので、あまり興味ありません。 問題を出す方なら非常に興味があり…

lazy pattern in HEAD

Michel が cvs HEAD に lazy pattern を導入。楽しいバージョン名は、 Objective Caml version 3.11+dev12 Private_abbrevs+natdynlink+lazy_patterns (2008-07-09) ここまで長くなったことはないんじゃないか?肝心の中身: lazy を pattern 中で書くことで …

Recursive module

ノードが Set で実装された tree を書こうと思ったら、recursive module が必要だった。まあ、明示的に signature を書かなければいけないことを除けば recursive module は別に難しくない。書いてみてから OCaml リファレンスを見たら例としてほとんど同じ…

Set の真ん中を取ってくる

Set は binary balanced tree なので、その(おおよそ)真ん中の元を取ってくることが出来れば、バイナリーサーチを書くことが出来るはずだ。Binary tree の一番根元のノードを取ってくるだけなので、簡単なはずなのだが、なぜか、真ん中の元を取ってくる関…

OCamlSpotter: Oh, you `re no (fun _ -> more)

open, let module, functor の多用したコードが広大なディレクトリ階層に配置されていると、変数や型がどこで定義されているのかさっぱり判らなくなる。砂漠で迷うのには正直飽きてきた。何かよい方法があるはずだ。あるはずなのだ。 というわけで、OCamlSpo…

Tuareg

Tuareg の改行が嫌だ。Version 1.45 では List.iter (fun x -> えっ、ここからですか? Version 1.46.2 では ocaml-mode に近くなって、 List.iter (fun x -> ああ、これがいいのだ となるのだが、1.46.x は何か他のインデントの問題があるらしく取り下げら…