タグ

ブックマーク / camlspotter.hatenablog.com (17)

  • コードレビューについて - camlspotter’s blog

    このところ立て続けにコードレビューについて話をする機会があったので 私が経験した最高のレビュー体制を簡単にまとめておこうと思います。 利点 何故必要か 何が嬉しいのか コスト うまく回すためには何が必要か 細かい運営方法 はっきり言って当たり前の事しか書きません。 私も当時は当たり前のことだと思っていましたから、特に気にもしていなかったのです。 ただ見聞するところによると、これをちゃんとやっているところはとても少ないようです。 ウォールストリート系のファンドでもろくにレビューしてないとかどういうことなんでしょう。 だから時々会社が吹っ飛ぶんですね… 結局は、ああだ、こうだ各論を言っても、ちゃんとやれるのか、それ一点に尽きてしまう話なのですが… 利点 レビューを何のためにするか、それはまず第一に自分達の書いているコードに潜在するバグによる損失をできるだけ少なくすることでしょう。 型システムや

    コードレビューについて - camlspotter’s blog
    gologo13
    gologo13 2012/08/21
    コードレビューについて - Oh, you `re no (fun _ → more) (via Instapaper)
  • OCaml の let と let rec はなぜ別扱いになっているのか、決定版、もしくは OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた - camlspotter’s blog

    はじめに断っておくが、全部Pros/Consのあるデザインチョイスなので、こうじゃなきゃいけないってことではない。ただ、 OCaml はこの選択をした、そいう事だ。 前回の「経験15年の OCaml ユーザーが Haskell を仕事で半年使ってみた」 http://d.hatena.ne.jp/camlspotter/20101212/1292165692 のような易しい文章ではないのでわからない人はとことん判らないだろう。まあ勘弁して欲しい。 あと、面倒だろうが、読む人は全部常体を敬体にして最後に「と思います」をつけて読んでくれ。ください、と思います。 Shadowing は便利であると思っている OCaml の let は非再帰なので以前定義された名前に別の値の束縛をオーバーライドできる。OCaml の人はこれが便利だと思っており皆普通に使っている。詳しくは http://d.hat

    OCaml の let と let rec はなぜ別扱いになっているのか、決定版、もしくは OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた - camlspotter’s blog
  • OMake でディレクトリ単位の依存性(のような物)を記述する - camlspotter’s blog

    大阪でおまけ言うたらコレ! サンプルソースは http://camlspotter@bitbucket.org/camlspotter/omake-depend-on-dir にあるよ。 OMake って大阪のオバチャンに言わせるところの「便利やけど使いにくいわぁ」「どっちやねん!」なツールですよね! OMakeは素晴らしいツールであり,それ自体には特に問題はありません。 各サブディレクトリを意図通りの順序でビルドするためには,ディレクトリをまたがってファイル間の依存関係を完璧に記述する必要がある。単純にディレクトリAからBの順にビルドすれば十分な場合でも簡単には表現できない場合がある(しばしば直感に反した動作をするため悩む)。 標準のビルドルールを生成する関数(OCamlLibraryなど)の定義ではフラグの指定などが足りなくて改造する必要があった。改造するためにはOMake言語の仕様を

    OMake でディレクトリ単位の依存性(のような物)を記述する - camlspotter’s blog
  • 今時 OCaml で非末尾再帰呼び出し使うなんて - camlspotter’s blog

    非    し!       -── ‐-   、  , -─-、 -‐─_ノ   O 小 末    // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )   C え 学 尾    L_ /                /        ヽ   a  | 生 再    / '                '           i  m マ ま 帰    /                 /           く  l ジ で 許    l           ,ィ/!    /    /l/!,l     /厶, で だ さ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ よ れ   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ ね る 

    今時 OCaml で非末尾再帰呼び出し使うなんて - camlspotter’s blog
  • OCaml で LLVM -- 事始め - camlspotter’s blog

    この記事は LLVM-2.8 とその OCaml binding を使った LLVM プログラミングの始め方について、良く判らないという声を聞いたので、理屈はともかく、どうやって始めるかを主眼に書いた物です。OCaml や Makefile を全く書いた事が無いし知りたくも無い、でも LLVM を使いたいという方にはちょっと無理な内容になっています clang とか LLVM とかこの頃よく聞きますよね。Apple が製品に結構使っているという話ですし、気になっている人もいるでしょう。私も LLVM、気になりました。要するに、プログラム内で Cみたいな言語(語弊がありますが)の構文ツリーを動的に生成して、それを、はいお願いと LLVM のエンジンに投げるとアーラ不思議、各アーキテクチャ用にいい感じで JIT コンパイルしてくれてスイスイ動く、という魔法のような話です。 マシン語は Z80

    OCaml で LLVM -- 事始め - camlspotter’s blog
  • 経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog

    今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあとにかく、一つ区切りがやってきました。 金融を知らないQuantsの仕事 私の職業の肩書きには Quantitatitatitatitative という単語がくっついて超カッコよさそう。普通は Quant というと、金融工学や統計数理に詳しい夜もブイブイいわしている超イケメン20代を想像しますが、私は金融とか全然知らないアラフォーお父さんです。それでも Quant です。お願いですから、私に何を買ったらいいかとか、聞かないでください。金融商品とか買った事ないし。というか、逆に教えて欲しいです。 私のチームは、当の Quant さん達が開発した、金融派生商

    経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog
  • モジュールを「拡張」するテクニック - camlspotter’s blog

    すとっどりぶ ご存知のように OCaml の stdlib は「標準ライブラリ」ではありません。「すとっどりぶ」です。大事な事などでもう二度言いますってやつです。これは OCaml コンパイラがコンパイルできる様にするための最小限のライブラリ+ INRIA の人たちの気分で加えた関数から成っています。当然、OCaml をバリバァリ使う人には全く力不足です。「すとっどりぶ」で満足できない人は Jane Street Core や OCaml Batteries Included 等を使うと良いです。 でも、なんだか自分の書いているソフトに外部のライブラリを使って変な依存性を入れるのはどうかなあ、とか、わざわざ巨大な「代替標準ライブラリ」を入れるの面倒だ、という人もいるでしょう。そういう時は自分で「すとっどりぶ」を拡張すればよい。その時に便利な方法をお教えします。 すとっどりぶを拡張する たと

    モジュールを「拡張」するテクニック - camlspotter’s blog
  • モジュールを「拡張」する― 3.12.0 の機能を使って…(みるけどうまくいかない) - camlspotter’s blog

    OCaml のモジュールが大好き!! 3.12.0 インストールしてるよ!という人だけ、読んで下さい。それ以外の人は、あんまりわかんないと思う。 前回のまとめ 綺麗にドキュメント(.mli)を書きつつ、既存OCamlモジュールを「拡張」する方法を紹介しました (* xmystdlib.ml *) module List = struct let iteri f list = let rec iteri f n = function | [] -> () | x::xs -> f n x; iteri f (n+1) xs in iteri f 0 list end (* xmystdlib.mli *) module List : sig val iteri : (int -> 'a -> unit) -> 'a list -> unit (** iteration with index

    モジュールを「拡張」する― 3.12.0 の機能を使って…(みるけどうまくいかない) - camlspotter’s blog
  • キャミバ様が id:ymotongpoo を木人形にされるようです - camlspotter’s blog

    事の次第 @camlspotter「めんどくせ、あいつに押し付けよ… @camloeba「おれには強く型付けされたコードが必要だ! あらゆる実験にたえうる木人形がな!ぶつぶつ‥ @camlspotter: 「キャミバ様、実はこんなものが… @camloeba「ほう… … ||||||:::::::;:::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::|     | |::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::||||||| |||||::::::::::/   ●   \:::|    |:::/   ●   \::::::::::||||||| |||::::::::;;;;;;;──────;;;;;;;;|    |;;;;;;──────;;;;;;;;;;:::::|||||| |;;;;;;;

    キャミバ様が id:ymotongpoo を木人形にされるようです - camlspotter’s blog
  • omake: OCamlフレンドリーな超強力ビルド ツール - camlspotter’s blog

    omake という make のパチモンみたいなものがある。だが、「おまけ」の癖にこれが素晴らしいツールなのだ。私が仕事でOCamlプログラムを書く時には必ずこれを使う。 念のために言っておくと、OCamlMakefile という、OCaml でよく使う定義を集めた Makefile 集のようなものがあるが、これは omake ではない。omake は超強力 make コマンドだと思ってもらえれば良い。 詳しいチュートリアルを書くつもりはない。それは omake の作者にまかせて、特徴を並べよう: OCamlプログラムをコンパイルする際のルールが既に登録されている。.SUFFIXES: .ml などと書く必要はない。 依存解析が自動かつ強力。依存ルールを書く手間が大幅に減る。 ディレクトリを跨いだプログラムのビルド。依存解析は OMakeroot ファイルの存在するディレクトリを頂点として

    omake: OCamlフレンドリーな超強力ビルド ツール - camlspotter’s blog
  • 補足その2 OCaml Meeting 2010 in Nagoya で話しました - camlspotter’s blog

    Find Your White Caml というタイトルで一席噺させていただきました。 スライドは http://www.slideshare.net/camlspotter/um2010 にあります。見てやってください。 テーマは「OCaml で書かれた大規模なコードベースを如何に早く理解し、チームの重要な一員になるか」です。要するに他人の書いたコードの読み方です。偶然ですが、浅井先生が私の前にコードの書き方のお話をされましたので、流れ的に良かったのではないかと思います。 ほとんど私の実体験から出てきた噺です。前半は別に OCaml に限った事や無いやんという気もしますが、逆に、OCaml であってもパッと飛び込んだら別に他の言語の仕事と変わらず、catch-up が大変ということをお知らせしたく、強調しました。それは、当然 Haskell でも同じです。まあ魔法のような言語は、世の中、

    補足その2 OCaml Meeting 2010 in Nagoya で話しました - camlspotter’s blog
  • Effective ML 9ヶ条 - camlspotter’s blog

    私の前のボスのハーバードでの講演のビデオが公開されました: http://ocaml.janestcapital.com/?q=node/82 彼は早口ですが、まあ頑張って聞いてください。普通に判れば、アメリカで普通に仕事できます。判らなくても仕事できますから安心してください。 正直、この Effective ML 9ヶ条と Jane Street Core のソースコードを見れば、 Jane Street での関数型プログラミングの秘訣は大体抑えられると言ってよいでしょう。学問的には新しいことは何もありませんが、徒党を組んで関数型言語によるプロジェクトを行うには重要な物ばかりです。 この、Effective ML 9ヶ条をまとめておきました。これを見ながら視聴すると良いかもしれないです。オリジナルは 00:47:13 で見れますね。 コードライタよりもリーダの意見を尊重せよ。大体において

    Effective ML 9ヶ条 - camlspotter’s blog
  • Windows で Emacs 内部 shell をストレスなく動かす = Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + Tramp + shell-mode - camlspotter’s blog

    たまには殺伐とした噺もいいでしょう。 WindowsEmacs 内部 shell をストレスなく動かすには? 結論から言うとそんなもんねえ。 でもそれじゃ余りに何なので、この三ヶ月間で私が泣きながら辿り着いた方法をご紹介しよう! Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + TRAMP + shell-mode です。病的だけどちゃんと動きます。 Emacs の shell-mode が好き 長年の習慣で Emacs を使っています。別に宗教入ってる訳じゃなくて、色々便利だし、慣れてるから。 Emacs には shell-mode (M-x shell) というのがあって、 Emacs 内部で interactive shell が立ち上がる。履歴は全部バッファーに残るし、コピペも Emacs 内でできるから便利。もちろん皆さん使

    Windows で Emacs 内部 shell をストレスなく動かす = Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + Tramp + shell-mode - camlspotter’s blog
  • 高階関数クイズ - camlspotter’s blog

    ちょっとした高階関数を使ったパズルです。前の会社の面接で使おうかなあと思っていたのですが、使う機会もなくなったので。全く別の機会に、高階関数を教えるための例を書いていて、遊んでいたら面白いものを見つけたので覚えていたのです。 # let twice f x = f (f x) これは f という関数と値 x をもらって、f を二回 x に適用する関数です。 次の add1 は引数 x を受け取って、1足して返す関数です。これを twice に使うと、こうなります。 # let add1 x = x + 1 # add1 0 1 # twice add1 0 2 関数型言語に慣れている方なら、twice ((+) 1) 0 でも同じですね。(OCaml を使っていますが、慣れていない方の為に、出力を一部省略しています。# はプロンプトです。コメントじゃありません。あと、入力の後には ;; を

    高階関数クイズ - camlspotter’s blog
  • 単相比較による高速化テクニック、そして、そのあまり知られていない落とし穴 - camlspotter’s blog

    今日は一転、真面目な話です ある程度 OCaml プログラミング経験がある皆様は、 int, string 等の基型の比較には多相比較ではなく、単相比較を使うべし。最適化された比較関数が使われ、早くなる という教をご存知かと思います。正しいです。でも、そこに実は落とし穴が: 実は、型だけ単相にしてもダメで、引数を全適用した形で使用しないと、最適化されない!! (OCaml 3.11.2 現在。将来は知りませんよ!!) もしこれをご存知でしたら、もう読んでいただく必要はありません。 第一のポイントは結構知られているようなのですが、実は第二のポイントはあまり知られていない様なのです。ざっと私が普段使っているOCaml のオープンソースライブラリを検索してみましたが、最適化された比較関数を使おうとしているが、第二のポイントを知らなかったため、実はされていなかった、というコードを結構見つけてしま

    単相比較による高速化テクニック、そして、そのあまり知られていない落とし穴 - camlspotter’s blog
  • OMakefile で Makefile で書かれたサブプロジェクトを管理する方法 - camlspotter’s blog

    まだ安定していません。細かいところ予告なく調整していきます。 既存 Makefile によるプロジェクトの omake への組み込み方は、二つあります。 OMakefile へ移植 ひとつは、Makefile を OMakefile に移植すること。Makefile が何やってるか完全に理解する必要がありますが、自分のプロジェクトであれば、あまり手間はかからないでしょう。というか、omake 使うんでしょ?じゃあ自分のツリーくらい、OMakefile で書きましょうよ。 Makefile へ丸投げ もひとつは、粒度が大幅に粗くなり*1ますが、make に任せてしまう方法。 Makefile.omake とか作って all: ./configure; make clean all installとか書いといて、make -f Makefile.omake all するとクリーンビルドするよう

    OMakefile で Makefile で書かれたサブプロジェクトを管理する方法 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 「さようなら」周り等で、ご批判を頂きました。ありがとうございます。元来の毒舌な者ですから、ご勘弁ください。教科書や論文を書いてるわけでも無し、このブログはお酒飲んで常に勢いで書いておりますから、深く推敲いたしません。こんなの出版しても売れないでしょ? 関数型言語では (ここで関数型言語と限定する必要は無いのかもしれませんが、他の言語のことは良く判りませんので語るべきでは無いでしょう)、 再帰ははっきり言って難しい概念で、これは逃げずに強調すべき点だと考えます。こんな感じに言い換えてみると私の強調度がわかるのでは無いでしょうか: Cでポインタ理解したくない?お互い不幸になるだけですから、ポインタの無い言語を使ってください。ごきげんよう。 私は自称「関数型言語できます」という方にはこの十

    OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog
  • 1