OxCaml: OCamlプログラミング言語のための拡張セット
(oxcaml.org)- OxCamlは、OCamlに性能志向の拡張を加えた、急速に変化している拡張セットであり、Jane Streetの本番コンパイラであると同時に、OCamlの改善を実験する場でもある
- 性能を左右するプログラムの挙動を安全・便利・予測可能に制御しつつ、複雑さは必要なコードにだけ負担させる設計を目指している
- すべての有効なOCamlプログラムはOxCamlでも有効であり、新しい言語というよりもOCamlの進化形のように感じられることを目標としている
- 拡張は、データレースを静的に排除する並行処理、メモリレイアウトとSIMDアクセス、アロケーション制御、多相パラメータ・include functor・ラベル付きタプル・イミュータブル配列といった利便性機能に分かれる
- オープンソースだが、拡張の安定性や後方互換性は約束しておらず、dune・opam互換のパッケージ管理と、LSP、フォーマッタ、ドキュメント生成ツールを含む修正版OCamlツールセットを提供している
OxCamlの目標と設計原則
- OxCamlは、OCamlプログラミング言語に対する急速に変化している拡張セットである
- Jane Streetの本番コンパイラとして使われている
- 性能志向プログラミングに合わせてOCamlを改善するための実験の場でもある
- 時間とともに、一部の拡張をupstream OCamlにコントリビュートすることを望んでいる
- 性能に重要なプログラムの挙動を安全・便利・予測可能に制御することが、中心的な設計目標である
- 安全性は、プログラマーの生産性と正しいコードのデプロイに重要な機能と見なされている
- 利便性は、過度なアノテーションなしに制御力を提供することに重点を置いている
- 拡張された型システムでも、OCamlの型推論を維持しようとしている
- 予測可能性は、OCamlコードだけを見て性能特性を理解しやすいという性質を維持・改善することに向けられている
- 重要な性能上の詳細は、型レベルで明示的に表す方向を採っている
- pay-as-you-go方式で、最適化能力をさらに提供しつつ、その能力を使わないコードには追加の複雑さを強要しない
- すべての有効なOCamlプログラムはOxCamlでも有効である
- OxCamlは新しい言語というより、OCamlがより良いバージョンへ進化したように感じられることを目標としている
- OCamlの基本的な設計感覚と、安全性、容易さ、生産性を保とうとしている
拡張領域と利用条件
- OxCamlの拡張は、性能制御と言語の利便性を中心に、いくつかの領域に分かれる
- Fearless concurrency: 型システムへの追加により、データレースを静的に排除する
- Layouts: プログラマーがデータのメモリレイアウトを指定でき、SIMDプロセッサ拡張にネイティブにアクセスできる
- Control over allocation: アロケーションを制御してGC負荷を減らし、プログラムをキャッシュ効率が高く決定的なものにするためのツールを提供する
- Quality of life: 日常的な作業に有用だった拡張も含む
- Polymorphic parameters
- Include functor
- Labeled tuples
- Immutable arrays
- OxCamlはオープンソースであり、実験的なユーザーに開かれている
- 特に研究者や実験者がシステムを試用し、フィードバックを提供することを期待している
- OxCamlの拡張は実験的性格が強く、安定性や後方互換性は約束しない
- ただし、OCamlとの後方互換性は維持する
- 利用しやすいように、修正版の標準OCamlツールセットを提供している
- duneとopamに互換性のあるパッケージ管理
- LSPサーバーによるエディタ統合
- ソースコードのフォーマット
- ドキュメント生成
- Jane Streetのオープンソースライブラリとツールは、2つの形でリリースされる
- upstream OCaml向けバージョンは、OxCaml拡張が取り除かれた形である
- OxCaml向けバージョンは、拡張を積極的に活用する形である
- すべての拡張を取り除けるわけではないため、一部のライブラリはOxCaml専用としてのみ提供される
- 必要な拡張がupstreamに統合されれば、そのライブラリのOCaml互換バージョンを出す予定である
まだコメントはありません。