OCaml4.03.0の変更点

last mod. 2016-05-15 (日) 21:16:57

http://caml.inria.fr/pub/distrib/ocaml-4.03/notes/Changes を元にしています。

既存のプログラムを壊す可能性のある変更点には * をつけてある。

言語機能

  • PR#5528: バリアント構成子定義の引数にインラインでレコードを書けるように
    (Alain Frisch)
  • PR#6220, PR#6403, PR#6437, PR#6801: GADTs の冗長性チェックと網羅性チェックの改善。冗長性チェッカーは、あるパターンで網羅されないパターンに実際にマッチする値がないか、高々1つのワイルドカードについてチェックするようになった。これは、場合分けがひとつしかない場合に、網羅性をチェックするためにも行なわれる。さらに、到達しないケースを pat -> . の形で書くこともできる。このパターンは冗長性チェッカーが扱う。
    (Jacques Garrigue)
  • PR#6374: n引数の型構成子 "(_, _, ..) t" の略記として _ t と書けるように
    (Alain Frisch)
  • PR#6714: [@@ocaml.warning] をほとんどのストラクチャ/シグネチャの要素に付けられるように
    (whitequark)
  • PR#6806: レコードフィールドに型アノテーションを付ける省略記法: { f1 : typ = e } は { f1 = (e : typ) } の糖衣構文になり、 { f1 : typ } は { f1 = (f1 : typ) } の省略記法になる
    (Valentin Gatien-Baron, review by Jérémie Dimino)
  • PR#6806: fun x y : (int * int) -> (x, y) のように、 fun <args> -> <expr> の -> の前に型アノテーションを書けるように
    (Valentin Gatien-Baron, review by Jérémie Dimino)
  • GPR#26: (type a) (type b) の糖衣構文として (type a b) と書けるように
    (Gabriel Scherer)
  • GPR#42: ファンクタ型 functor (_ : S) -> T の短縮表記として S -> T と書けるように
    (Leo White)
  • GPR#88: オブジェクトコピー構文でも field punning を許す: {< x; y; >} は {< x = x; y = y; >} の糖衣構文である
    (Jeremy Yallop)
  • GPR#112: char と string のリテラルでも8進エスケープシーケンス "Make it \o033[1mBOLD\o033[0m" を書けるように
    (Rafaël Bocquet, request by John Whitingthon)
  • GPR#167: [@unboxed], [@untagged] アノテーションで external の引数/戻り値が unbox/タグなし形式になることを指示できるように。 int のタグなし化と int32, int64, nativeint, float の unbox 化が指定できる
    (Jérémie Dimino, Mark Shinwell)
  • GPR#173: [@inline], [@inlined] 属性で(それぞれ宣言側、呼び出し側で)インライン展開を制御できるように
    (Pierre Chambart, Mark Shinwell)
  • GPR#188: 型宣言に [@@immediate] 属性を付けることで、その型が実行時に整数で表現されることを指定できるように
    (Will Crichton, reviewed by Leo White)
  • * GPR#234: [] をユーザー定義の構成子として使えるように。 :: をユーザー定義の構成子として使う場合には:: を囲む括弧が必要になった。例えば | :: of ... と書いていたコードは | (::) of ... のように変更する必要がある
    (Runhang Li, review by Damien Doligez)
  • GPR#240: external に付けていたアノテーションを属性で置き換え
    (Jérémie Dimino)
    • "float" は [@@unboxed] に一般化
    • "noalloc" は [@@noalloc] に
    • "float" と "noalloc" は非推奨
  • GPR#254: 構成子の引数を定数パターンとマッチさせたときに警告を発する @ocaml.warn_on_literal_pattern 属性を追加。この属性は、(Invalid_arg のような)定義済みの例外で、引数に純粋に人間向きの(値が 今後変更されないことが保証されない)メッセージを取るようなものの構成子に付けられている
    (Alain Frisch)
  • GPR#268: 浮動小数点数リテラルの16進表記: -0x1.ffffp+987。 OCaml ソースコードで ISO C99 形式の16進 0x<mantissa in hex>p<exponent> 形式で浮動小数点数リテラルを書けるように
    (Xavier Leroy)
  • GPR#273: [%extension_constructor <path>] で、値を作らずに Obj.extension_constructor と同じ結果が得られるように
    (Jérémie Dimino)
  • GPR#282: short-paths のスコア付けを変更して、 __ を含む識別子を _ で始まる識別子と同じコストになるように
    (Thomas Refis, Leo White)
  • PR#6681 GPR#326: [%foo : SIG] や [@foo : SIG] の形式で、シグネチャの要素を拡張ノード/属性の payload にできるように。例: "[%%client: val foo : int]", "val%client foo : int"
    (Alain Frisch and Gabriel Radanne)
  • * GPR#342: module%foo, class[@foo] のように、すべてのキーワードに、短かい記法で拡張ノード/属性を付けられるように。 let[@foo] .. in .. は let 式ではなく変数束縛に属性が付くようになったことに注意
    (Gabriel Radanne)

コンパイラ

  • * PR#4231, PR#5461: 警告31を、デフォルトでエラーが通知されるように(警告31: モジュールが同一の実行形式に2回リンクされている)。これは暫定の解決策である。モジュールを2回リンクした場合のセマンティクスは危険である。例えば、例外構成子がふたつの異なる宣言として扱われるといったことが起こる
    (Alain Frisch)
  • PR#4800: タプルの代入のコンパイルを改善
    (Gabriel Scherer and Alain Frisch)
  • PR#5995: 例外の名前について -for-pack を加味するように。また、バイトコードコンパイルの場合でも -for-pack が使われるように
    (Alain Frisch, report by Christophe Troestler)
  • PR#6400: _ が式として使われたときのメッセージを改善
    (Alain Frisch, report by whitequark)
  • PR#6501: ある種の %identity の使い方でネイティブコード生成器が落ちないように
    (Xavier Leroy, report by Antoine Miné)
  • PR#6636: --version オプションの追加
    (whitequark)
  • PR#6679: pprintast が型宣言中の制約を表示するよう修正
    (Alain Frisch, report by Jun Furuse)
  • PR#6737: (fun x -> body) 式の Typedstree 上での属性を修正
    (Alain Frisch, report by Oleg Kiselyov)
  • * PR#6865: ストラクチャの構文解析で let _ = expr を特別扱いしないように
    (Jérémie Dimino, Alain Frisch)
  • * PR#6438, PR#7059, GPR#315: (function Some x when x = 0 -> ()) のような網羅性チェックを無効化するようなパターンガードに対して、警告25(すべての節がガード付である)ではなく警告8(網羅的でない)が発せられるように。今後、警告25が発せられることはない。警告8がエラーになるように設定されているプロジェクトはコンパイルに失敗する可能性がある(おそらくこれが望んだ通りの意味であろう)
    (Alain Frisch, request by Martin Jambon and John Whitington)
  • PR#6920: %apply や %revapply を使ったときのデバッグ情報を修正
    (Jérémie Dimino, report by Daniel Bünzli)
  • PR#6939: let rec の間違った使い方で segfault する
    (Alain Frisch)
  • PR#6943: POWER/PowerPC 64 bit big-ending (ppc64) と little-endian (ppc64le) のネイティブコード生成をサポート
    (Xavier Leroy, with inspiration from RedHat?'s unofficial ppc64 and ppc64le ports)
  • PR#6979: x86-32 バックエンドで float をスタックにコピーする部分のコード生成を改善
    (Marc Lasson, review by Xavier Leroy)
  • PR#7018: インライン化時の識別子の名前変え忘れを修正
    (Alain Frisch, review by Xavier Leroy)
  • PR#7022, GPR#259: float と box 化された int のunbox をより早い段階で行ない、2 passにならないようにする
    (Alain Frisch)
  • PR#7026, GPR#288: 引数なしの多相バリアントに write barrier を付けないように
    (Simon Cruanes)
  • PR#7031: 警告57を追加。曖昧な、ガード付き or パターンを警告
    (Luc Maranget, Gabriel Scherer, report by Martin Clochard and Claude Marché)
  • PR#7064, GPR#316: 翻訳単位やサブモジュールに deprecated 属性を付けられるように
    (Alain Frisch)
  • PR#7067: 深い入れ子のストラクチャに対するネイティブコードコンパイラのパフォーマンスレグレッション(対4.01)を修正
    (Alain Frisch, report by Daniel Bünzli, review by Jacques Garrigue)
  • PR#7097: 第1級モジュールの型制約に対する構文エラーのメッセージが変なのを修正
    (Alain Frisch, report by Jun Furuse)
  • PR#7118, PR#7120, GPR#408, GPR#476: スタックの巻き戻しのためのメタデータ生成部分のバグを修正。このバグによって OSX で GUI プログラムがクラッシュすることがあった
    (Bart Jacobs, review by Mark Shinwell)
  • PR#7168: バイトコード実行時にスタックがあふれるとクラッシュすることがあった
    (Jacques-Henri Jourdan)
  • PR#7232: ppx_deriving を使うと Pprintast の出力が変
    (Damien Doligez, report by Anton Bachin)
  • GPR#17: C-- レベルでの定数整数演算の最適化
    (Stephen Dolan, review by Pierre Chambart)
  • GPR#89: 未適用のプリミティブが、より型ごとに特殊化されるように: 未適用のプリミティブへの型注釈 (compare : int -> _)、型の伝播 (List.sort compare [1;2;3])、さらに、シグネチャ経由の型伝播でも特殊化がされるように
    (Frédéric Bour, review by Gabriel Scherer)
  • GPR#107: 不必要なfloatのunboxingが(特にifやmatchで)行なわれないように
    (Vladimir Brankov, review by Alain Frisch)
  • GPR#109: floatとintのrefに関して新しい(lazyな)unboxing戦略
    (Vladimir Brankov, review by Alain Frisch)
  • GPR#115: C--やMachレベルでより精確に値の型付けをするように
    (Xavier Leroy, review by Pierre Chambart)
  • GPR#132: 新たな中間言語、ミドルエンド最適化Flambda
    (Pierre Chambart, Mark Shinwell, Leo White)
  • GPR#212, PR#7226, GPR#542: ソースコード上の桁位置を gas アセンブリの .loc に出力するように
    (Frédéric Bour, Anton Bachin)
  • GPR#207: コンパイラのメッセージに色がつくように。 -color {auto|always|never} オプションや環境変数 TERM=dumb 等で設定できる
    (Simon Cruanes, review by Gabriel Scherer)
  • GPR#258: PowerPC の命令サイズに関する情報をより精確に
    (Pierre Chambart, Xavier Leroy)
  • GPR#263: if と等価な (&&) や (||) のコード生成を改良
    (Pierre Chambart)
  • GPR#270: transl_exception_constructor が immutable なブロックを生成するように
    (Mark Shinwell)
  • GPR#271: with を使って生成されたレコードの変更可能フラグが間違っていた
    (Mark Shinwell)
  • GPR#275: IBM z System上のLinux用ネイティブコード生成。 追悼 Gene Amdahl (1922-2015)
    (Bill O'Farrell, Tristan Amini, Xavier Leroy)
  • GPR#282: モジュールの別名が存在するときの short-paths の safety チェックを緩くし、 printing map を作成するときに penalty を考慮するように
    (Thomas Refis, Leo White)
  • GPR#306: コンパイラのパフォーマンスレグレッションをデバッグするための仕組み
    (Pierre Chambart)
  • GPR#319: cmxファイルが存在しないことを警告する警告58を追加。さらに mli ファイルの -opaque オプションを拡張し、対応する cmi ファイルが -opaque 付きでコンパイルされていた場合は、 cmx が存在しなくても警告をしないように
    (Leo White)
  • GPR#388: 環境変数 OCAML_FLEXLINK で flexlink コマンドを上書きできるように
    (David Allsopp)
  • GPR#392: parsetreeの不変条件をすべて新モジュール Ast_invariants に移動
    (Jérémie Dimino)
  • GPR#407: Microsoft C コンパイラを呼び出すとき(アセンブラの場合と同様に)コンパイルする .c ファイルの名前を表示しないように
    (David Allsopp)
  • GPR#431: 定数float配列をパターンマッチのbranch mergingの適用対象に
    (Pierre Chambart)
  • GPR#455: Js_of_ocaml 用により多くのデバッグ情報を提供
    (Jérôme Vouillon)
  • GPR#514, GPR#554: 現在初期値で有効になっている設定を陽に有効化するコマンドラインオプションを追加: `-alias-deps`, `-app-funct`, `-no-keep-docs`, `-no-keep-locs`, `-no-principal`, `-no-rectypes`, `-no-strict-formats`
    (Demi Obenour)
  • GPR#545: match .. with exception e -> raise e で reraise を使い、バックトレースを保持するように
    (Nicolas Ojeda Bar, review by Gabriel Scherer)

実行時システム

  • PR#3612, PR#92: minor heapにファイナライザー付カスタムブロックを割り当てられるように
    (Pierre Chambart)
  • * PR#6517: 自前で定義した {,u}int{32,64}ではなく ISO C99 の {,u}int{32,64}_t を使うように。元の型は定義されなくなったため C stub を更新しなければならない可能性がある
    (Xavier Leroy)
  • PR#6760: トップレベルで評価したクロージャーをマーシャリングできるように
    (whitequark, review by Jacques-Henri Jourdan)
  • PR#6902, GPR#210: 閉じられていない IO チャネルがファイナライザに渡った場合、標準エラー出力に "channel opened on file '...' dies without being closed" という実行時警告か表示する。この動作は、 OCAMLRUNPARAM=W=1 や Sys.enable_runtime_warnings で制御することができる。この変更の影響を受けるプログラムは、挙動は変化しないが、修正はすべきである。
    (Alain Frisch, review by Damien Doligez)
  • シグナル処理: 可能であれば Read_and_clear に GCC/Clang の atomic ビルトインを使う
    (Xavier Leroy)
  • PR#6910, GPR#224: output_value, input_value 等々のマーシャリング関数で 4GB より大きいデータをサポート
    (Xavier Leroy)
  • * GPR#226: GCC 3.4以降と Clang でランタイムと C stub をコンパイルするとき、より高度な最適化を適用する。デフォルトで -std=gnu99 -O2 -fno-strict-aliasing -fwrapv を使う。これは、ユーザーが ocamlc -c foo.c でスタブをコンパイルするときのデフォルトにも適用される。これにより、スタブのバグが顕在化する可能性もある。
    (Xavier Leroy)
  • GPR#262: ひとつの翻訳単位に複数のGCルートを持てるように
    (Pierre Chambart, Mark Shinwell, review by Damien Doligez)
  • * GPR#297: 最悪ケースでのGCの停止時間か改善するための複数の変更。 Gc.control と Gc.major_slice を変更し、さらに、 Gc モジュールに複数の関数を追加。
    (Damien Doligez, with help from Francois Bobot, Thomas Braibant, Leo White)
  • GPR#325: 終了時にGCの統計を表示する v=0x400 フラグを OCAMLRUNPARAM に追加
    (Louis Gesbert, review by Alain Frisch)

標準ライブラリ

  • PR#1460, GPR#230: Array.map2, Array.iter2
    (John Christopher McAlpine?)
  • PR#5197, GPR#63: Arg: --flag arg だけでなく --flag=arg も受け付けるように
    (Richard Jones)
  • PR#6017, PR#7034, GPR#267: より効率的な ifprintf の実装
    (Jeremy Yallop, review by Gabriel Scherer)
  • PR#6296: Pervasives.float_of_string が受け付ける浮動小数点数の形式に関するドキュメント
    (Xavier Leroy)
  • PR#6316: Scanf.scanf で %u で大きな整数値を読み込んだときに失敗する
    (Xavier Leroy, Benoît Vaugon)
  • PR#6321: hypot infinity nan = infinity であることを保証する(ISO C99 準拠)
    (Xavier Leroy)
  • PR#6390, GPR#36: js_of_ocaml との可搬性のために Sys.{int_size,max_wosize} を公開
    (Hugo Heuzard)
  • PR#6449: Map.union を追加
    (Alain Frisch)
  • * PR#6494: Bytes, Char, Digest, Int32, Int64, Nativeint, String モジュールに equal 関数を追加。 module type of Int32 のようなシグネチャを持つモジュールを定義している場合は、実装を拡張する必要がある
    (Romain Calascibetta)
  • * PR#6524, GPR#79: Filename: open_temp_file に省略可能な ?perm オプションを追加。部分適用をしている場合、コンパイルが通らない可能性があるが、その場合は ?perms:None を渡せばよい
    (Daniel Bünzli, review by Jacques-Pascal Deplaix)
  • * PR#6525, GPR#80: 標準ライブラリに Uchar モジュールを追加。既存のプロジェクトと名前が衝突する可能性がある
    (Daniel Bünzli, review by Yoriyuki Yamagata and Damien Doligez)
  • PR#6577: %L, %l, %n, %S, %C 書式指定子の性能を改善
    (Alain Frisch)
  • PR#6585: win32unix/createprocess.c のメモリリークを修正
    (Alain Frisch, report by user 'aha')
  • PR#6645, GPR#174: Set.add, Set.remove, Set.filter で、引数を変更する必要がない場合には、もとの値がそのまま返ることを保証する
    (Alain Frisch, Mohamed Iguernlala)
  • PR#6649, GPR#222: (int_of_string "+3") (+ 符号のついた入力)を受け付ける
    (John Christopher McAlpine?)
  • PR#6694, PR#6695, GPR#124: Char, Bytes, String モジュールの ISO-8859-1 文字集合を扱う関数を非推奨にし、 US-ASCII を扱う代替版の *_ascii を提供。該当の関数は以下の通り: {Char,String,Bytes}.{uppercase,lowercase}, {String,Bytes}.{capitalize,uncaptialize}
    (whitequark, review by Damien Doligez)
  • GPR#22: ephemeron と weak hash table を実装した Ephemeron モジュールを追加
    (François Bobot, review by Damien Doligez, Daniel Bünzli, Alain Frisch, Pierre Chambart)
  • GPR#164: より高性能な(分岐を使わない) float特化版の Pervasive.compare の実装
    (Vladimir Brankov)
  • GPR#175: Map.add, Map.remove, Map.filter で、引数を変更する必要がない場合には、もとの値がそのまま返ることを保証する
    (Mohamed Iguernlala)
  • GPR#201: Printf.{ifprintf,ikfprintf} の型を一般化
    (Maxence Guesdon)
  • GPR#216: 欠けていた POSIX.1-2001 シグナルを Sys モジュールに追加
    (Guillaume Bury)
  • GPR#239: Stream モジュール内の型安全でないコードを削除
    (Pierre Chambart, review by Gabriel Scherer and Jeremy Yallop)
  • GPR#250: Array.sub で開始位置が負の場合をチェック
    (Jeremy Yallop)
  • GPR#265: Obj.magic を使わない新たな Queue の実装
    (Jérémie Dimino)
  • GPR#268, GPR#303: printf と scanf に16進浮動小数点数をサポートする '%h', '%H' 指示子を追加
    (Xavier Leroy, Benoît Vaugon)
  • GPR#272: classify_float を [@@unboxed] に変更
    (Alain Frisch)
  • fpclassify() を使わないようにして classify_float を高速化
    (Alain Frisch, Xavier Leroy)
  • GPR#277: 以下のexternalを [@@unboxed] に
    (Jérémie Dimino)
    • {Nativeint,Int32,Int64}.{of,to}_float
    • Int{32,64}.float_of_bits
    • Int{32,64}.bits_of_float
  • GPR#281: 以下のexternalを [@@unboxed] に
    (François Bobot)
    • Sys.time (さらに [@@noalloc] に)
    • Pervasives.ldexp (さらに [@@noalloc] に)
    • Pervasives.compare for float, nativeint, int32, int64.
  • PR#3622, GPR#195: Stack.fold を追加
    (Simon Cruanes)
  • GPR#329: Array.exists, Array.for_all, Array.mem, Array.memq を追加
    (Bernhard Schommer)
  • GPR#337: Hashtbl.filter_map_inplace を追加
    (Alain Frisch)
  • GPR#356: Format.kasprintf を追加
    (Jérémie Dimino, Mark Shinwell)

型システム

  • PR#5545: メソッドの型アノテーションで、略記された型名を自由に選択できない
    (Jacques Garrigue)
  • * PR#6465: モジュールの別名を段階的に弱化することを許す。これは、別名を展開する際にサブモジュールに等式を追加することで実現されている。この変更は、理論上、型推論を利用してモジュール型を定義していると、コーナーケースで非互換性があるはずであるが、公開されているコードでその非互換性に遭遇するものは知られていない
    (Jacques Garrigue)
  • PR#6593: tests/basic-modules 内のファンクタ適用がコミット 15405 以降壊れている
    (Jacques Garrigue)

トップレベルとデバッガ

  • PR#6113: トップレベル指示子に説明を追加。 #help でそれを表示するように
    (Nick Giannarakis, Berke Durak, Francis Southern and Gabriel Scherer)
  • PR#6396: エラー扱いにした警告の個数がトップレベルで正しくリセットされない
    (Alain Frisch)
  • PR#6401: トップレベル初期化時のエラーを適切に報告するようにし、 Env.Error(_) 例外が起動時に見えないように
    (Gabriel Scherer, Alain Frisch)
  • PR#6468: OCAMLRUNPARAM=b で起動したとき、トップレベルでもバックトレースがサポートされるように
    (whitequark and Jake Donham, review by Gabriel Scherer and Jacques-Henri Jourdan)
  • PR#6906: トップレベルで #use したとき、対応しない括弧のエラー位置がおかしくなる
    (Damien Doligez, report by Kenichi Asai)
  • PR#6935, GPR#298: load_printer にディレクトリを指定すると ocamldebug が落ちる
    (Junsong Li, review by Gabriel Scherer)
  • PR#7081: プリプロセッサ関連の警告をトップレベルでも報告するように
    (Valentin Gatien-Baron, review by Jérémie Dimino)
  • PR#7098: 例外が発生すると ppx の文脈情報が失われてしまう
    (Alain Frisch, report by whitequark)
  • PR#7101: トップレベルがコマンドラインで指定されたライブラリを読み込むための in_channel を閉じない
    (Alain Frisch)
  • PR#7119: トップレベルが [@@@warning] を無視する
    (Alain Frisch, report by Gabriel Radanne)

その他のライブラリ

  • * Unix: Windows 上で、 Unix.in_channel_of_descr, Unix.out_channel_of_descr で作成したチャネルではテキストモードをサポートしないことに。そのようなチャネルに set_binary_mode_{in,out} chan false を呼び出すとエラーが起こる
    (Xavier Leroy)
  • PR#4023, GPR#68: Unix.sleepf (秒未満の分解能を扱える sleep)を追加
    (Evgenii Lepikhin and Xavier Leroy)
  • * Unix.sleep がシグナル処理で中断されないように。以前はシグナル処理の結果として Unix.sleep が指定よりも早く返る場合があった。現在は、指定された時間が経過するまで sleep が再実行されるようになった
    (Xavier Leroy)
  • * PR#6120, GPR#462: Windows ビルドの Unix.symlink, Unix.readlink を実装。 Unix.symlink は新たに省略可能引数 to_dir を取る(non-native な Windows ビルドでは無視される)。 stat 関数を、 buggy な Microsoft CRT 実装を避けて再実装(native Windows ビルドのみ)
    (David Allsopp, review by Daniel Bünzli)
  • PR#6263: Bigarray: kind_size_in_bytes, size_in_bytes 関数を追加
    (Runhang Li, review by Mark Shinwell)
  • PR#6289: Unix.utimes で、引数が両方とも正確に 0.0 の場合だけ現在時刻を使うように。さらに、可能であれば秒未満の分解能を使うように
    (Xavier Leroy, report by Christophe Troestler)
  • PR#6896: Big_int.float_of_big_int と Ratio.float_of_ratio を再実装。結果が正しく丸められるように(以前の実装は Arith_status.set_floating_precision の影響を受けてしまっていた)
    (Xavier Leroy)
  • PR#6989: Str: すべての \(...\) がマッチ結果を束縛し、 Str.matched_group で参照できるように。以前は束縛グループの個数の上限は32個で、最初の32個以外は単に結果を束縛しなかった
    (Xavier Leroy)
  • PR#7013: Event: 偽の wake-up が送られることがある
    (Xavier Leroy)
  • PR#7024: Str: 正規表現の ^ と $ が扱う「行末」が何を指すのかドキュメントで明確化
    (Xavier Leroy, question by Fredrik Lindgren)
  • PR#7209: Unix.create_process や類似の関数で、子プロセス内で exec が失敗した時に at_exit ハンドラを呼ばないように
    (Jérémie Dimino)

OCamldep

  • GPR#286: モジュールの別名をサポート
    (Jacques Garrigue)

マニュアル

  • GPR#302: OCaml のリファレンスマニュアルをソースリポジトリの manual サブディレクトリ以下へ。マニュアルへの貢獻も歓迎する
    (François Bobot, review by Florian Angeletti)
  • PR#6601: サンプルコード内の strcpy を caml_strdump に変更
    (Christopher Zimmermann)
  • PR#6676: Language Extensionsの節を簡素化
    (Alain Frisch, John Whitington)
  • PR#6898: Unixライブラリの win32 サポートについての記述を更新
    (Damien Doligez, report by Daniel Bünzli)
  • PR#7092, GPR#379: 4.03 の新機能についてのドキュメント
    (Florian Angeletti)
  • PR#7094, GPR#468, GPR#551: 警告について説明するセクション 8.5 を追加。この節は説明の必要な警告について記述するものである。現在説明されているのは以下の通りである。
    (Florian Angeletti and Gabriel Scherer)
    • 52: 脆弱な定数パターン
    • 57: ガード付き or パターンの曖昧な変数
  • PR#7109, GPR#380: bigarryのドキュメントのレイアウトを修正
    (Florian Angeletti, Leo White)

バグ修正

  • PR#3612: ファイルから読み込んだbigarrayがメモリリークする
    (Pierre Chambart, report by Gary Huber)
  • * PR#4166, PR#6956: external な C プリミティブを呼んだときにモジュールがリンクされるように(以前は、 external のみを公開するモジュールでは -linkall を指定しないと初期化コードが呼ばれなかった)
    (Jacques Garrigue, reports by Markus Mottl and Christophe Troestler)
  • * PR#4466, PR#5325: Windows では同一のソケットに並行に read, write すると、不意にブロックすることがあった。この問題を、ソケットを同期モードで作成するのではなく、非同期モードのままにすることで解決した
    (Xavier Leroy)
  • * PR#4539: 関数値を比較したときに送出される例外文字列を変更。 Invalid_argument の文字列引数をパターンマッチしているプログラムは壊れる可能性がある。 Invalid_argument や Failure の引数文字列をパターンマッチするのはプログラミング上の間違いである。これらの文字列は将来変更されるかもしれないのである
    (Nicolas Braud-Santoni, report by Eric Cooper)
  • PR#4832: bigarrayのfillがランタイムをブロックすることがある
    (Markus Mottl)
  • PR#5663: どこにも現れない型変数が一般化できず型エラーになる
    (Jacques Garrigue, report by Stephen Weeks)
  • PR#5780: GADTsのエラーメッセージで、よりわかりやすい型名を表示する
    (Jacques Garrigue, report by Sebastien Furic)
  • PR#5887: ヘッダファイル名の衝突を避けるために byterun/*.h を byterun/caml/*.h に移動する
    (Jérôme Vouillon and Adrien Nader and whitequark)
  • * PR#6081: ocamlコマンドがカレントディレクトリではなくスクリプトのディレクトリをパスに追加するように変更
    (Thomas Leonard and Damien Doligez)
  • PR#6108, PR#6802: dynlink.cma や ocamltoplevel.cma をトップレベルでロードしたとき、例外を発生させて綺麗に失敗するように
    (Xavier Leroy)
  • PR#6171: 型がスコープを逸出したときのエラーメッセージがわかりにくい
    (Jacques Garrigue and Leo White, report by John Whitington)
  • PR#6340: Windows形式の \r\n 改行のソースファイルの \r の扱いが間違っている
    (Damien Doligez, report by David Allsopp)
  • PR#6342: 型制約が異なるときのエラーメッセージが間違っている
    (Alain Frisch, report by Philippe Wang)
  • * PR#6521: {Bytes,Char,String}.escaped がロカール依存になっていた。ロカール依存の文字ではなく、ASCIIの印字可能文字以外をすべてエスケープするよう変更した
    (Damien Doligez, report by Jun Furuse)
  • PR#6526: ocamllex はコメント内にエスケープされていない改行があっても警告を発するべきではない
    (Damien Doligez, report by user 'dhekir')
  • PR#6341: ocamldoc -colorize-code が <pre> 内に余計な <br> を追加する
    (Maxence Guesdon, report by Damien Doligez)
  • PR#6560: {Int32,Int64,NativeInt?}.of_string のエラーメッセージが (Failure "int_of_string") のようになっているのを "Int32.of_string" 等々に
    (Maxime Dénès and Gabriel Scherer)
  • PR#6648: show_module で省略部分がある場合はそれがわかるように
    (Jacques Garrigue, report by Leo White)
  • PR#6650: Cty_constr が Subst で正しく扱われていない
    (Jacques Garrigue, report by Leo White)
  • PR#6651: モジュールの構成要素の探索に失敗する
    (Jacques Garrigue, report by Leo White)
  • * PR#6664: lazy な値のファイナライザで落ちる(float と 'a lazy な値はファイナライザ中で Invalid_arg になるようになった。GC.finalise のドキュメントを参照)
    (Damien Doligez)
  • PR#6672: モジュール型の with 制約に変位指定を書けるが使われない(変位指定が検査されるように修正)
    (Jacques Garrigue, report by Leo White)
  • PR#6677: [@ocaml.warning] を let rec の最初の束縛に付けることで警告39(不要な rec)を無効にできるように
    (Alain Frisch, report by Jun Furuse)
  • PR#6744: 多相バリアント経由で単一化変数が逸出することがある(部分的な修正)
    (Jacques Garrigue, report by Leo White)
  • PR#6752: 拡張可能なバリアントとスコープからの逸出。この修正の副作用として、 ocamlc -i が(型としては健全だが)宣言前の型を参照する不正なシグネチャを出力することがある
    (Jacques Garrigue, report by Maxence Guesdon)
  • PR#6762: 型定義を再公開している場合の警告45(openにより構成子が隠蔽される)の挙動を改善
    (Alain Frisch, report by Olivier Andrieu)
  • PR#6776: tickスレッドをkillするのに失敗すると、ランタイム終了時にsegfaultする
    (Damien Doligez, report by Thomas Braibant)
  • PR#6780: -farch と -ffpu オプションの値が不正なときのメッセージが役に立たない (ocamlopt, ARM)
    (Xavier Leroy, report by whitequark)
  • PR#6805: 失敗しないような switch で各 case の値の間に空きがあると式が重複して生成される
    (Luc Maranget)
  • * PR#6808: OCAMLRUNPARAM の構文解析がゆるすぎる
    (Damien Doligez)
  • PR#6874: 関数のmodule引数に対して非効率的なコードが生成される
    (Jacques Garrigue, report by Markus Mottl)
  • PR#6888: ocamldebug の list コマンドが間違ったファイルを使う
    (Damien Doligez, report by Pierre-Marie Pédrot)
  • PR#6897: 拡張可能なバリアント型に対するパターンマッチのエラーメッセージがわかりにくい
    (Alain Frisch, report by Gabriel Radanne)
  • PR#6899: 省略可能引数で汎化できない型変数エラーになる
    (Thomas Refis and Leo White)
  • PR#6907: クラス宣言のエラー表示中にコンパイラがスタックオーバーフローする
    (Jacques Garrigue, report by Ivan Gotovchits)
  • PR#6931: レコード構成子内で型エラーになったときのエラーメッセージが正しくない
    (Damien Doligez, report by Leo White)
  • PR#6938: "%047.27{l,L,n}{d,i,x,X,o,u}" のレグレッションを修正
    (Benoît Vaugon, report by Arduino Cascella)
  • PR#6944: let module X = Path in … がモジュールの別名として扱われない
    (Jacques Garrigue, report by Frédéric Bour)
  • PR#6945 and GPR#227: Sys モジュールと Unix モジュールの関数群にナル文字が含まれる文字列を渡さないように
    (Simon Cruanes and Xavier Leroy, report by Daniel Bünzli)
  • PR#6946: %ignore に対する型エラーで catch されない例外が発生する
    (Jacques Garrigue, report by Leo White)
  • PR#6954: モジュールの別名により、型検査器が無限ループする
    (Jacques Garrigue, report by Mark Mottl)
  • PR#6972, GPR#276: 4.02.3 で .cmt ファイル内のドキュメンテーションコメントにレグレッション
    (Leo White, report by Olivier Andrieu)
  • PR#6977: コメント内の文字列リテラルでエスケープシーケンスが解釈されてしまう
    (Damien Doligez, report by Daniel Bünzli and David Sheets)
  • PR#6980: 多相バリアントと存在型で表明検査に失敗する
    (Jacques Garrigue, report by Leo White)
  • PR#6981: 多引数のファンクタで前の引数を参照すると Ctype.Unify(_) 例外
    (Jacques Garrigue, report by Nicholas Labich)
  • PR#6982: モジュールの別名を pack したときに予期せぬ型エラーが起こる
    (Jacques Garrigue, report by Valentin Gatien-Baron)
  • PR#6985: モジュールBarにprivateな列型が含まれるとき、 module type of struct include Bar end で %s#row が漏れ出てしまう
    (Jacques Garrigue, report by Nicholas Labich)
  • PR#6992: GADTs/module の型付けバグで Segfault
    (Jacques Garrigue, report by Stephen Dolan)
  • PR#6993: 網羅性についての仮定に反する再帰モジュールでSegfault
    (Jacques Garrigue, report by Stephen Dolan)
  • PR#6998: -no-alias-deps と -w -49 を指定したとき、必要のない cmi を読んで型付けに失敗することがある
    (Leo White, report by Valentin Gatien-Baron)
  • PR#7003: String.sub が 2^31 より大きなサイズに対してsegfaultすることがある
    (Damien Doligez, report by Radek Micek)
  • PR#7008: 翻訳単位の名前が空の場合、 ocamlc が Fatal error になる
    (Damien Doligez, report by Cesar Kunz)
  • PR#7012: 大文字で始まる型変数名が忘れられてしまう
    (Jacques Garrigue, Gabriel Scherer, report by Thomas Leonard and Florian Angeletti)
  • PR#7016: GADT型付け中のスタックオーバーフローを修正。注意: GADTのパターンの網羅性を検査する場合には、 -rectype オプションが使われていなくても同値再帰型を考慮する
    (Jacques Garrigue, report by Mikhail Mandrykin)
  • PR#7030: libasmrun_shared.so が SPARC Solaris でビルドに失敗する
    (report and fix by Patrick Star)
  • PR#7036: (class type内での)module型の互換性の検査で、モジュールの別名が考慮されない
    (Jacques Garrigue)
  • PR#7037: ビルドの再現性を向上。自動生成された一時ファイル名をオブジェクトファイルに含めない
    (Xavier Leroy)
  • PR#7038: caml_io_mutex_lockでメモリ不足
    (Xavier Leroy, report by Marc Lasson)
  • PR#7039: 名前のない PF_UNIX なソケットに対して Unix.getsockname がゴミを返す
    (Xavier Leroy)
  • PR#7042, GPR#295: 共通部分式削除最適化が浮動小数点数リテラルの +0.0 と -0.0 を混同している
    (Xavier Leroy)
  • PR#7075: ocamldoc の出力が重複するのを修正
    (Florian Angeletti)
  • PR#7082: 再帰モジュールの with 制約内にオブジェクト型を使うと Ctype.Unify(_) 例外
    (Jacques Garrigue and Alain Frisch, report by Nicholas Labich)
  • PR#7096: ocamldocの下付き/上付き文字のスタイルが間違っている
    (Gabriel Scherer, report by user 'pierpa')
  • PR#7108: ocamldoc: -html でカスタム/拡張HTML生成器を上書きしないように
    (Armaël Guéneau)
  • PR#7111: 空のlet束縛に対して不正な構文を出力するのではなくエラーにする
    (Jérémie Dimino)
  • * PR#7113: -safe-string によりGADTの互換性チェックが壊れることがある。 bytes と string は -safe-string が指定された場合でも互換な型として扱われる。これにより、このふたつの型が異なるものだと仮定しているコードの網羅性チェックが壊れる可能性がある
    (Jacques Garrigue, report by Jeremy Yallop)
  • PR#7115: GADTのパターンマッチの分岐内で変数を隠蔽すると、未使用変数への警告が壊れる
    (Alain Frisch, report by Valentin Gatien-Baron)
  • PR#7133, GPR#450: OSX で局所ジャンプ用ラベルを生成する
    (Bart Jacobs)
  • PR#7135: -principal モードではground coercionだけを警告する
    (Jacques Garrigue, report by Jeremy Yallop)
  • PR#7152: 汎化不能な型変数に関する型付けの等価性
    (Jacques Garrigue, report by François Bobot)
  • PR#7160: 型の別名を定義することにより、 GADT の構成子の型が弱化されることがある
    (Jacques Garrigue, report by Mikhail Mandrykin)
  • PR#7181: GADTと多相バリアントを組み合わせたときのエラーメッセージが誤解を招く
    (Jacques Garrigue, report by Pierre Chambart)
  • PR#7182: 再帰モジュールとexternal を組み合わせると表明の検査に失敗する
    (Jacques Garrigue, report by Jeremy Yallop)
  • PR#7196: `;` の左側の let open が正しく整形出力されない
    (Gabriel Scherer, report by Christophe Raffalli)
  • PR#7214: Env.add_gadt_instances で Assetion failure
    (Jacques Garrigue, report by Stephen Dolan)
  • PR#7220: スレッドと例外バックトレースを同時に使ったときのメモリリークを修正
    (Gabriel Scherer, review by François Bobot, report by Rob Hoes)
  • PR#7222: 存在型の逸出
    (Jacques Garrigue, report by Florian Angeletti)
  • PR#7230: 反駁ケース(pat -> .)のみの match で例外が捨てられる
    (Jacques Garrigue, report by Jeremy Yallop)
  • PR#7234: 抽象型構成子の互換性チェックが間違っている
    (Jacques Garrigue, report by Stephen Dolan)
  • GPR#205: caml_backtrace_last_exn をルートとして登録する前に消去する
    (report and fix by Frederic Bour)
  • GPR#220: 再帰モジュールの -dsource 関連の小修正
    (Hongbo Zhang)
  • GPR#228: (バイトコード) debug_info 内の内部ぶらさがりポインタを修正
    (Gabriel Scherer and Mark Shinwell and Xavier Leroy)
  • GPR#233: CamlinternalMod?.init_mod を最適化に対して頑健に
    (Pierre Chambart, Mark Shinwell)
  • GPR#249: Makefile内のコマンドのべた書きを修正
    (Daniel Bünzli)
  • GPR#251: ocamldocを有効にしたクロスコンパイル
    (whitequark)
  • GPR#280: 標準ライブラリの .p.cmx の依存関係を修正
    (Pierre Chambart, Mark Shinwell)
  • GPR#283: intern.c でメモリ不足になった場合のメモリリークを修正
    (Marc Lasson, review by Alain Frisch)
  • GPR#22: 弱参照ポインタの消去を修正。非常に稀ではあるが、弱参照ポインタの消去中に値にアクセスすると、値がひとつの弱参照配列からは削除中で、別のものには保持されているということが起こる。これにより、使用されていないGCされた値だけが弱参照ポインタから取り除かれるという性質が満たされなくなる
    (François Bobot, review by Damien Doligez)
  • GPR#313: 共通部分式削除で二乗オーダーの計算量を避ける
    (Pierre Chambart, review by Xavier Leroy)
  • PR#6795, PR#6996: ocamldep に [%ocaml.error] が渡ったときにエラーを通知する
    (Jérémie Dimino)
  • GPR#355: ocamlnat を復活させる
    (Jérémie Dimino, Thomas Refis)
  • GPR#405: Visual Studio 2015 でのビルドを修正
    (David Allsopp)
  • GPR#441: 型制約が存在するときの型エラーメッセージの位置情報を改善
    (Thomas Refis, report by Arseniy Alekseyev)
  • GPR#477: 再度、オブジェクト型、多相バリアント型、関数型の内部にドキュメント文字列を付けられるように
    (Thomas Refis)

機能追加の要望

  • PR#4518, GPR#29: ocamldoc: エラーの位置情報の出力形式を変更
    (Sergei Lebedev)
  • PR#4714: List.cons
  • PR#5418 (comments) : 依存関係を gcc ではなく $(CC) で生成
    (Damien Doligez, report by Michael Grünewald)
  • PR#6167: OCAMLPARAM でPIC(位置独立コード)の生成を無効化できるように(pic=0)
    (Gabor Pali)
  • PR#6367, GPR#25: ラベル付き引数を表現する Asttypes.arg_label の導入
    (Frédéric Bour and Jacques Garrigue)
  • PR#6452, GPR#140: 独自 printf フォーマットを内部的にサポート
    (Jérémie Dimino)
  • PR#6611: 省略可能引数に対する Predef.option ラッパーを構文木から削除
    (Alain Frisch, review by Damien Doligez, request by whitequark)
  • PR#6635: M.[], M.(), M.{< >} and M.[| |] 形式の local open をサポート
    (Jeremy Yallop, review by Gabriel Radanne)
  • PR#6691: 標準ライブラリと compiler-libs の .cmt[i] ファイルをインストール
    (David Sheets, request by Gabriel Radanne)
  • PR#6722: x32 (X86-64 の ILP32 モード)アーキテクチャとの互換性。 ocamlopt はサポートされないが、 bytecode は正しくコンパイルされる
    (Adam Borowski and Xavier Leroy)
  • PR#6742: Tstr_class に virtual_flag の情報が重複している
    (Gabriel Radanne and Jacques Garrigue)
  • PR#6719: 十分な入力が読めない場合の Buffer.add_channel の挙動を改善
    (Simon Cruanes)
  • * PR#6816: 整数/浮動小数点数の直後に識別子が続くものをエラーに。これらは以前はふたつの別個のトークンとして読み込まれていた。 let abc = 1 in (+) 123abc は合法であったが、現在はエラーになる
    (Hugo Heuzard)
  • PR#6876: 警告6で省略されたラベルを一覧するように(警告6: 関数適用でラベルが省略されている)
    (Eyyüb Sari)
  • PR#6924: x87アーキテクチャでfloatのレジスタあふれを避けるための小さな最適化
    (Alain Frisch)
  • GPR#111: (f [@taillcall]) x y とすることで f x y が末尾呼び出しでなければ警告する
    (Simon Cruanes)
  • GPR#118: ocamldep -allow-approx: 構文解析に失敗したときに、依存性解析を字句レベルで近似する
    (Frédéric Bour)
  • GPR#137: (open recursion 形式の) untypeast.ml を compiler-libs に追加
    (Gabriel Radanne)
  • GPR#142: CAMLparam*/CAMLlocal* を undo する CAMLdrop マクロを追加
    (Thomas Braibant and Damien Doligez)
  • GPR#145: Cmmgen.bigarray_indexing の最適化による bigarray アクセスの高速化
    (Vladimir Brankov, review by Gabriel Scherer)
  • GPR#147: Pervasives に type ('a, 'b) result = Ok of 'a | Error of 'b を追加
    (Yaron Minsky)
  • GPR#156, GPR#279: caml_frame_descriptors の再割り当てを最適化 (dynlink の高速化)
    (Pierre Chambart, Alain Frisch, review by François Bobot, Xavier Leroy and Damien Doligez)
  • GPR#165, GPR#221: Windowsビルドのコンパイル時の警告を修正
    (Bernhard Schommer, Gabriel Scherer, report by Alain Frisch)
  • * GPR#170: 任意精度の整数を構文解析できるように。さらに、整数と浮動小数点数に [a-zA-Z] 1文字の修飾子を付けられるように(l, L, n の一般化)。構文木が変更されたことにより ppx が壊れる可能性がある。これは PR#6816 に更なる変更を加える。 123a はひとつのトークンとして読み込まれるようになり、後段で ppx により書き換えできるようになる
    (Hugo Heuzard)
  • GPR#189: .dylib と .so を ocamlmklib の拡張子に追加
    (Edgar Aroutiounian, whitequark)
  • GPR#191: memory.h の一部と gc.h を公開
    (Thomas Refis)
  • GPR#196: Thread.id と Thread.self を noalloc に
    (Clark Gaebel)
  • GPR#237: CONTRIBUTING ドキュメントを追加
    (François Bobot, Gabriel Scherer, review by Xavier Leroy)
  • GPR#245: フランス語で書かれていたコメントが残っていたのを削除
    (Florian Angeletti)
  • GPR#252: MSVC Windows READMEのビルド説明を完全
    (Philip Daian)
  • GPR#308: NetBSD/arm の試験的サポート (verified on RaspberryPi?)
    (Rich Neswold)
  • GPR#335: cmi ファイルが見つからず型が抽象的である場合は型エラー時のメッセージに明記する
    (Hugo Heuzard)
  • GPR#365: 型の非互換による型エラーを表示するとき、一方の型が型変数1つだけの表示にならないように
    (Hugo Heuzard)
  • GPR#383: configure: AIX7.1 ビルド時に _ALL_SOURCE を定義する
    (tkob)
  • GPR#401: testsuite で失敗したテストディレクトリを自動的に再実行する
    (David Allsopp)
  • GPR#451: testsuite/Makefile に GNU parallel を使って並行にテストを実行する parallel ターゲットを追加
    (Gabriel Scherer)
  • GPR#555: register typing 制約が制御フローグラフの join point で考慮されることを保証する
    (Mark Shinwell, debugging & test case by Arseniy Alekseyev and Leo White, code review by Xavier Leroy)

ビルドシステム

  • GPR#388: FlexDLL を Git サブモジュールとして追加し、ブートストラップできるように
    (David Allsopp)

新規 編集 添付