Commits

camlspotter committed 712ac5d

update

Comments (0)

Files changed (1)

 .. contents::
     :local:
 
-OCamlYacc オワコン。Menhir を使え
-======================================
+OCaml を使うなら Unix で
+===============================================
 
-http://caml.inria.fr/mantis/view.php?id=1703 曰く:
+要するに Linux とか Mac OS X とかを使って。
+一言で言うと Windows では使わない。時間の無駄。理由は、
 
-    Since menhir is a much better alternative to ocamlyacc, we now recommend that all users switch to menhir. At any rate, we do not spend any time on new features for ocamlyacc.
+* Cygwin, Mingw, MS native の三種類ありそれぞれ使える機能、出来たコードのライセンス、スピード特性が違う
+* Windows というとコンパイラバイナリパッケージに頼る人が続出し、そしてあまり出来が良くない。OCaml できる人はコンパイラは自分でビルドするのでバイナリパッケージ固有の問題はできる人には共有されていないというか他人事
+* どの種類を使ってもコンパイラ Cygwin をビルドツールとして使う。Cygwin は頑張っているが、まあ、 Unix の真似事に過ぎないのでバッドノウハウは沢山ある
+* 外部ライブラリのインストール、アンインストールが一々面倒
+* そういうわけでユーザーが少ない。上記三種類のせいで、少ないユーザーが更に分断されている。何かあっても誰も助けてくれない。
+
+もちろんこの問題はほとんどが Windows は Unix 系プログラムを持ってきて作業するにはあまりにも辛すぎる、
+という事に起因する。OCaml がダメだというわけではない。普通に Windows で OCaml のプログラム開発してビジネスしているところはある。あるが、それは顧客が金払ってくれるからで… 趣味の範囲で、中級以上の作業(初級とは ocaml トップレベルとか簡単な ocamlc 単発使用とかそんなレベル)はとても面倒。まあやめておいたほうが良い。
+
+``ocamlopt`` を使いましょうね
+============================================
+
+``ocamlc`` でコンパイルして OCaml 遅いと言わない…約束だ。
+
+``ocaml`` トップレベルをそのまま使わない
+============================================
+
+OCaml の REPL(歴史的に OCaml のトップレベルと呼ぶ) コマンド ``ocaml`` は
+複雑な履歴操作などを提供しない。そういう物が欲しければ、普通欲しいと思うのだが、
+他のツールを組み合わせて使う:
+``rlwrap`` 、 ``ledit`` 、 emacs の ``shell-mode`` なりで wrap するのだ。
+
+こういうプログラムを組み合わせる発想は Unix世界ではごく当たり前なので
+大したことではないと思っていたのだが、 GUI 主体で育った若者はどうも発想自体思いつかないようだ。
 
 トップレベルで ``let _ =`` は使わない
 ======================================
 要はスレッドなど使わなければ良い。どうせいまのところ OCaml は parallel GC が無いので
 並列(スピード)的に利点は無いし、並行性が欲しければ Lwt などの協調スレッドを使えばよいのだ。
 
+今のところ Thread は使わない
+===========================================
+
+使っても嬉しいことは何もない。
+
+* OCaml は impure なのでスレッドから共有される mutable data structure は mutex で守る必要があるが、それが完璧にできる奴は地球上にいない。出来たように見える?一週間問題なく走り続けた後、君のサーバは謎の segfault で死ぬだろう。そのデバッグは一ヶ月かかる。
+* OCaml の GC は並行対応していないのでマルチコアでスレッドを動かしてもスレッドは並列にほとんど動かない
+* 以上の理由から誰も使わない
+
+OCaml を作った Xavier Leroy は Linux pthread の作者。
+それくらいなので、まあ真面目に動くんだよ、ちゃんと mutex 使えばね。
+
+並行計算(Concurrent computing)を行いたいなら Lwt や Async などの協調スレッドライブラリを使う。
+
+OCaml で並列計算(Parallel computing)したい奴は fork するとか OCamlMPI 使うとかする。
+
+Thread のコンテクストスイッチ
+===========================================
+
+明示的に ``yield`` したほうが身のためらしい。
+
 Record のラベルは差し支えなければ型名と同じにする
 ===========================================================
 
 
    end
 
-今のところ Thread は使わない
-===========================================
-
-使っても嬉しいことは何もない。
-
-* OCaml は impure なのでスレッドから共有される mutable data structure は mutex で守る必要があるが、それが完璧にできる奴は地球上にいない。出来たように見える?一週間問題なく走り続けた後、君のサーバは謎の segfault で死ぬだろう。そのデバッグは一ヶ月かかる。
-* OCaml の GC は並行対応していないのでマルチコアでスレッドを動かしてもスレッドは並行にほとんど動かない
-* 以上の理由から誰も使わない
-
-OCaml を作った Xavier Leroy は Linux pthread の作者。
-それくらいなので、まあ真面目に動くんだよ、ちゃんと mutex 使えばね。
-
-並列計算を行いたいなら Lwt や Async などの協調スレッドライブラリを使う。
-
-OCaml で並行計算したい奴は fork するとか OCamlMPI 使うとかする。
-
-Thread のコンテクストスイッチ
-===========================================
-
-明示的に ``yield`` したほうが身のためらしい。
-
 Haskell や F# のように記号を使いたい
 ============================================
 
 Others
     ITPL の人は ``!%`` を ``Printf.sprintf`` に使っている。 ``%`` は format 文の意か。
 
-``ocamlopt`` を使いましょうね
-============================================
-
-``ocamlc`` でコンパイルして OCaml 遅いと言わない…約束だ。
-
-OCaml を使うなら Unix で
-===============================================
-
-要するに Linux とか Mac OS X とかを使って。
-一言で言うと Windows では使わない。時間の無駄。理由は、
-
-* Cygwin, Mingw, MS native の三種類ありそれぞれ使える機能、出来たコードのライセンス、スピード特性が違う
-* Windows というとコンパイラバイナリパッケージに頼る人が続出し、そしてあまり出来が良くない。OCaml できる人はコンパイラは自分でビルドするのでバイナリパッケージ固有の問題はできる人には共有されていないというか他人事
-* どの種類を使ってもコンパイラ Cygwin をビルドツールとして使う。Cygwin は頑張っているが、まあ、 Unix の真似事に過ぎないのでバッドノウハウは沢山ある
-* 外部ライブラリのインストール、アンインストールが一々面倒
-* そういうわけでユーザーが少ない。上記三種類のせいで、少ないユーザーが更に分断されている。何かあっても誰も助けてくれない。
-
-もちろんこの問題はほとんどが Windows は Unix 系プログラムを持ってきて作業するにはあまりにも辛すぎる、
-という事に起因する。OCaml がダメだというわけではない。普通に Windows で OCaml のプログラム開発してビジネスしているところはある。あるが、それは顧客が金払ってくれるからで… 趣味の範囲で、中級以上の作業(初級とは ocaml トップレベルとか簡単な ocamlc 単発使用とかそんなレベル)はとても面倒。まあやめておいたほうが良い。
-
 長い module type を ``\*.ml`` と ``\*.mli`` で繰り返すのが面倒なら ``\*_intf.ml`` を書く
 ===========================================================================================
 
 が ``let f = fun x -> x |> (.....)`` に展開されるようなマクロを書けば良い。
 どうやって書くか?そりゃあんたに任せる。
 
+OCamlYacc オワコン。Menhir を使え
+======================================
+
+http://caml.inria.fr/mantis/view.php?id=1703 曰く:
+
+    Since menhir is a much better alternative to ocamlyacc, we now recommend that all users switch to menhir. At any rate, we do not spend any time on new features for ocamlyacc.
+
 Ocaml と書く奴は OCaml 使わんでいい
 ============================================