このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2017-11-04 (土) 10:01:59

OCaml.JP へようこそ!

ここはプログラミング言語OCamlに関する情報を集めたコミュニティサイトです。

OCamlとは

top2.png

OCaml(オキャムル/オーキャムル)は、INRIA(フランス国立情報学自動制御研究所)で開発されている関数型言語の一種で、最新の言語理論の成果が取り入れられたプログラミング言語です。

  • 型安全な静的型システムを基盤に、バグの少ない高信頼なプログラムが開発できます。
  • オブジェクト、型推論、代数的データ型、モジュールシステム、多相バリアント、第一級モジュール、GADTといった様々な機能を利用して、より簡潔で整理されたコードが記述できます。
  • x86, x86-64, ARM, PowerPCなど多数のアーキテクチャのネイティブコードを出力できるコンパイラを持っています。Android や iOS 向けのクロスコンパイルも可能です(Linux 上でのクロスコンパイルは opam-cross-androidopam-cross-ios, opam-cross-windows も参考になるでしょう)。
  • OCamlのソースコードはGNU LGPL v2.1 with static linking exceptionの元で公開されています
  • リポジトリはgithubで公開されています。pull requestも受け付けています。課題管理はgithubではなく別個Mantisでされています。
  • いますぐOCamlを触ってみたいという人は、 http://try.ocamlpro.com/ でブラウザ上でOCaml対話環境を試すことができます。
  • ライブラリを探す場合は、パッケージ管理システムOPAMを試してみましょう。
  • 最新バージョンのダウンロードはこちら
    download-now_1-1_orange.png
    • opam を使っている場合は opam switch install でインストールできます

What's New

  • 2017/11/04: OCaml 4.06.0 がリリースされました
  • 2017/07/13: OCaml 4.05.0 がリリースされました
  • 2017/06/24: OCaml 4.04.2 がリリースされました
    • Security fixです。 OCaml 4.04.0で導入されたplugin機構にはローカルの権限昇格脆弱性があります(CVE-2017-9772)。このバージョンでは、setuidされたバイナリではSys.getenv / Unix.getenvが常に Not_found を投げるように変更することで脆弱性が修正されました。この脆弱性を理解した上でそれでも getenv する必要がある場合は Unix.unsafe_getenv を使ってください
    • OCaml4.04.2の変更点
  • 2017/04/14: OCaml 4.04.1 がリリースされました
    • バグフィクスリリースです。 4.05.0 も間もなくリリースされるでしょう。
    • OCaml4.04.1の変更点
  • 2016/11/05: OCaml 4.04.0 がリリースされました
    • 4.04.0 で追加された Set.map にはバグがありますGPR#894)。おそらく 4.04.1 で修正されるでしょう。
    • OCamlのリリースプロセスが変更になり、機能ベースのリリースではなく、6ヶ月おきの期間ベースのリリースになりました。今回はその最初のリリースです。 4.05.0 は 2017/02 ごろフリーズの予定です。
    • メモリプロファイラ Spacetime, local exception の追加、最適化まわりが改良されています。
    • バイトコード版ではなくネイティブ版が ocamlc, ocamlopt, ... としてインストールされるようになりました。
    • OCaml4.04.0の変更点
  • 2016/09/23: ICFP 2016 の併設イベントとして OCaml 2016 が開催されました。動画は YouTube?ICFP Video チャンネルで公開されています。
  • 2016/04/26: OCaml 4.03.0 がリリースされました
    • 全コードのライセンスが LGPL v2.1 with static linking exception になりました。
    • バリアント型のコンストラクタ定義に直接レコードを書ける inline records、 GADTs の網羅性チェックの改善、新たな最適化パス flambda、Pervaisives への ('a, 'b) result 型の追加、 Uchar, Ephemeron モジュールの追加、GCの改良、 unboxing ……等々様々な改善がされています
      • flmabda を有効にするにはコンパイラビルド時に configure -flambda しておく必要があります。 opam からインストールする場合は 4.03.0+flambda のような switch が使えます。
      • result 型と Uchar モジュールは、 4.02.3 以前で使うための互換モジュールが opam で公開されています。以前のバージョンもサポートするようなライブラリでは、このモジュールを利用するとよいでしょう
    • ocamlbuild がコンパイラ本体とは別のプロジェクトになりました
    • マニュアルもコンパイラと同一のリポジトリで管理されるようになりました。
    • OCaml4.03.0の変更点
  • 2015/09/22: 2015/9/4 にバンクーバーで開催された OCaml 2015 の動画が公開されています。 http://ocaml.org/meetings/ocaml/2015/program.html
  • 2015/07/27: OCaml 4.02.3 がリリースされました
    • バグフィクスリリースです。 4.02.2 で導入されてしまった非互換性の解消や、 GADTs や GC まわりのバグ修正があります。
    • OCaml4.02.3の変更点
  • 2015/06/18 Version 4.02.2 リリース
    • バグフィックス中心ですが、新機能も少し追加されています。
    • OCaml4.02.2の変更点
    • Changes には書いてありませんが、型式や型表現に対する属性の付け方が少し変更されているので注意が必要です。
  • 2014/10/14 Version 4.02.1 リリース
  • 2014/08/29 Version 4.02.0 リリース
    • 様々な新機能が追加されています。
      • 文字列を変更不可能にするための第一歩として、変更可能なバイト配列を表わす bytes 型と、それを操作するための Bytes ライブラリが導入されました。デフォルトでは bytes は単なる string の別名なので、既存の string を破壊的に書き換えているコードも(警告は出ますが)そのままコンパイルできます。 -safe-string オプションを使うと string と bytes は別の型になり、 string は変更不可能になります。
      • match 構文を拡張して、引数の式の評価値に対して場合分けするだけでなく、引数の式を評価するときに発生した例外についても場合分けできるようになりました。これにより、昔からある let x = a in b で a で発生した例外は捕捉されるが b で発生した例外は捕捉されないという問題が解決できます。
      • 型システム及びコンパイラがモジュールの別名(module M = AnotherModule? のように既存のモジュールに付けた別の名前)を追跡するようになりました。これにより、適用的な(applicative)ファンクタの型付けがより精確になるだけでなく、リンク時により精確な依存性解析ができるようになり、実行ファイルのサイズを削減できる可能性ができました。
      • OCaml のほとんどの構文要素(式、定義、型宣言等々)にアノテーションを付けられるようになりました。アノテーションはコンパイラによって使われる(例えば、非推奨の関数を使っていたら警告する)だけでなく、 ppx 前処理で、構文木書き換えの手掛かりにするのにも使われます。
      • type t = ... で拡張可能な型を定義し、 type t += A of int のようにして新たな構成子で型を拡張できます。これは例外値の型 exn の扱いを一般化したものです。
      • ファンクタとファンクタ適用の引数として () を取ることができるようになりました。これを使うことで抽象型の generativity を強制できるようになります。
      • トップレベル指示子として、トップレベル環境について問い合わせる #show_type と #show_modules 等が追加されました。
      • 以下のような最適化が加わったことにより、プログラムによっては、 ocamlopt で生成されたコードの性能が向上します。より aggressive な定数伝播、新たな最適化パス(到達不能コードの削除、共通部分式の削除)、文字列に対するパターンマッチの改良、定数例外の表現の最適化、ヒープの大きい場合の GC の調整。
      • printf の書式文字列が GADT で表現されるようになりました。これにより、 printf がかなり高速化されました。さらに書式文字列の型検査がより精確にできるようになりました。
      • ネイティブコードコンパイラが AArch64 (ARM 64 bits) をサポートするようになりました。
      • Camlp4 と Labltk が配布物から分割されました。これらは別のプロジェクトになりました。
    • OCaml4.02.0の変更点
  • 2013/09/12 Version 4.01.0 リリース
  • 2012/10/05 Version 4.00.1 リリース
    • 22個のバグフィックス。クリティカルなバグがあるのでアップデート推奨です。
    • OCaml4.00.1の変更点
  • 2012/07/26 Version 4.00.0 リリース
  • 2012/05/14 和訳マニュアルを更新しました。

過去のニュース

新規 編集 添付