Caml trading
Y. Minsky and S. Weeks: Caml trading - experiences with functional programming on Wall Street. JFP 18(4):553-564, 2008.
著者らが所属するJane Streetは自社資金のみでトレーディングを行う会社であり、設立当初はExcelやVBAを使っていたが2005年頃からOCamlをメイン言語として採用している。僅かなバグや数ミリ秒の遅れがパフォーマンスに大きく響く自動取引の世界で、安全性と速度の両立を実現したOCamlの特徴とその活用法とは、というのがストーリー。美点と活用法に関してReadability、Performance、Macrosの3節の後OCamlの欠点について、とバランスよく簡潔に書かれている。順に追っていくと、
- Readabilityについて
あたりの関数型言語への言及に付きもののあれこれに以下のOCamlっぽいトピックが続く。
-
- ラベル付き引数
- 型が同じ引数の混同を避けられる
- 多相バリアント
- 例として、例外を用いることを避けて多相バリアントを用い簡潔かつ扱いやすい形でその関数が「失敗」する可能性を表現する手法が紹介されている
- privateな型, 幽霊型
- privateな型については7.9 private な型、幽霊型についてはOCamlテクニック/ghost - ocaml-nagoyaが参考になる。これらは"Make illegal states unrepresentable"を実現しやすくする。
- ラベル付き引数
- Performanceについて
- コンパイラの特性、GC、C/C++とのインターフェースの3項目に分かれる。GCについてはガベージコレクション、インターフェースについてはC関数をラップしてOCamlに接続する方法 (How to wrap C functions to OCaml)あたりを見てもらうとして、コンパイラの特性について書かれていることは次のような感じ。
- Macrosについて
一方欠点については
- generic printerの欠如
- 既出だが。macroでなんとかなるけどデフォルトであったら便利だよねと書いてある
- オブジェクト指向機能の存在
- いらないよねとの指摘。確かにあまり使わないけど……
- 最適化の不足
- 並列実行不可
- 並列GCがないことによる。Jane Streetとしては作れれば作りたいのだろうけどどれくらい見込みがあるのかは知らない
- ビルドのサポートが乏しく巨大プロジェクトに不向き
- モジュールシステム+findlibだけでは不十分との指摘
- INRIAのチームによる伽藍型の開発
- もちろん彼らは素晴らしい仕事をしているが一方どうしても貧弱な標準ライブラリなどの原因となってしまっているという指摘。これも良し悪しとしかいいようのない感じがするが……
といったところ。他にも優秀な人材が集めやすかっただとか色々書いてあるのだけど省略。12ページですぐ読めるのでOCamlがどんな言語なのか(構文とかではなくもっと全体的な話)を掴みたい人にお勧めしたい。