Caml trading

Y. Minsky and S. Weeks: Caml trading - experiences with functional programming on Wall Street. JFP 18(4):553-564, 2008.

著者らが所属するJane Streetは自社資金のみでトレーディングを行う会社であり、設立当初はExcelVBAを使っていたが2005年頃からOCamlをメイン言語として採用している。僅かなバグや数ミリ秒の遅れがパフォーマンスに大きく響く自動取引の世界で、安全性と速度の両立を実現したOCamlの特徴とその活用法とは、というのがストーリー。美点と活用法に関してReadability、Performance、Macrosの3節の後OCamlの欠点について、とバランスよく簡潔に書かれている。順に追っていくと、

  • Readabilityについて
    • コードの簡潔さ
    • 不変性
    • パターンマッチング
      • 記述・変更が容易、網羅性チェックがもたらす安全性
    • モジュールシステムとか

あたりの関数型言語への言及に付きもののあれこれに以下のOCamlっぽいトピックが続く。

    • ラベル付き引数
      • 型が同じ引数の混同を避けられる
    • 多相バリアント
      • 例として、例外を用いることを避けて多相バリアントを用い簡潔かつ扱いやすい形でその関数が「失敗」する可能性を表現する手法が紹介されている
    • privateな型, 幽霊型
  • Macrosについて
    • OCamlの型についてS式との相互変換を行う関数の自動生成を可能にするcamlp4拡張が紹介されている。主なご利益は、OCamlに欠如している以下の点の埋め合わせ。
      • generic printer(OCamlにはderiving Showみたいな便利機能はない)
      • 安全なmarshaling/unmarshalingの手段(標準ライブラリにMarshalがあるが自分で型を指定しなければならないという問題がある)

一方欠点については

  • generic printerの欠如
    • 既出だが。macroでなんとかなるけどデフォルトであったら便利だよねと書いてある
  • オブジェクト指向機能の存在
    • いらないよねとの指摘。確かにあまり使わないけど……
  • 最適化の不足
    • aggressiveな最適化をしていないことで性能のために可読性を犠牲にせざるを得ない場面が、という指摘。個人的にはそれはいつもそういうもんだしOCamlコンパイラの単純さも含めたトレードオフに対して十分reasonableな選択をしているのみではという感想。性能重視の書き方をしたときも大抵そんなに無茶苦茶なことにはならないのであまり文句がない
  • 並列実行不可
    • 並列GCがないことによる。Jane Streetとしては作れれば作りたいのだろうけどどれくらい見込みがあるのかは知らない
  • ビルドのサポートが乏しく巨大プロジェクトに不向き
    • モジュールシステム+findlibだけでは不十分との指摘
  • INRIAのチームによる伽藍型の開発
    • もちろん彼らは素晴らしい仕事をしているが一方どうしても貧弱な標準ライブラリなどの原因となってしまっているという指摘。これも良し悪しとしかいいようのない感じがするが……

といったところ。他にも優秀な人材が集めやすかっただとか色々書いてあるのだけど省略。12ページですぐ読めるのでOCamlがどんな言語なのか(構文とかではなくもっと全体的な話)を掴みたい人にお勧めしたい。