OCaml4.01.0の変更点

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

last mod. 2013-09-16 (月) 09:40:41

http://caml.inria.fr/pub/distrib/ocaml-4.01/notes/Changes の翻訳です。


OCaml 4.01.0 の変更点:

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

その他のライブラリ

  • Labltk: Tck/Tk 8.6 へアップデート

型システム

  • PR#5759: 型情報の伝播により、ラベルや構成子名の曖昧性をなくす (Jacques Garrigue, Alain Frisch and Leo P. White)
  • 多相バリアントが存在する場合でもパターンマッチを通して型情報を伝播させる(存在する可能性のある構成子の情報だけを捨てる)。これにより、固定の正確な多相バリアントに対しては存在しない構成子にマッチさせることはできなくなる。
  • *PR#6035: オブジェクト中での同一のメソッドまたはインスタンス変数の宣言の禁止 (Alain Frisch)

コンパイラ

  • PR#5861: (Camlp4) 型宣言中に複数の private キーワードがある場合はエラーを送出するように (Hongbo Zhang)
  • PR#5634: 構文解析木書き換え (-ppx フラグ) (Alain Frisch)
  • ocamldep で -absname をサポート (Alain Frisch)
  • PR#5768: "unbound identifier" のときにスペルチェックをして可能な名前を提案する (Gabriel Scherer)
  • ocamlc に新たなオプション -dsource。構文解析木を可視化する (Alain Frisch, Hongbo Zhang)
  • tools/eqparsetree: ふたつの構文解析木を位置情報を等閑視して比較する (Hongbo Zhang)
  • 可能であれば ocamlopt でアセンブラに clang を使う。これにより OS X で CFI サポートが有効になる (Benedikt Meurer)
  • -short-paths オプションを新たに追加。 open しているモジュールを考慮し、型内で使われる型構成子に対し、もっとも短かい表現を使うよう試みる。これにより、大量のファンクタを使っている場合に型が読みやすくなる。 (Jacques Garrigue)
  • PR#5986: ocamlc に -compat-32 フラグを追加。生成されたバイトコード実行ファイルが 32-bit のホストでも実行できるよう保証する。 (Xavier Leroy)
  • PR#5980: open により既存の識別子がシャドウされ(かつ、 open のスコープ内で実際に使われてい)た場合、警告する。この警告は新しい構文 open! で局所的に無効にできる (Alain Frisch, thanks to a report of Daniel Bünzli)
  • * warning 3 を他の非推奨機能にも拡張(Damien Doligez):
    • 識別子中の ISO-latin1 文字
    • (&&) や (||) 演算子の代替としての (&) や (or) の使用
  • ocamlc, ocamlopt 向けに実験的な OCAMLPARAM (Fabrice Le Fessant)
  • PR#5571: エラーメッセージ中の誤った序数表現 (Alain Frisch, report by John Carr)
  • PR#6073: Tstr_include に signature を追加 (patch by Leo P. White)

標準ライブラリ

  • PR#5899: 現在の呼び出しスタックを調査する方法として Printexc.get_callstack を公開 (Gabriel Scherer, Jacques-Henri Jourdan, Alain Frisch)
  • PR#5986: シリアライズ関数 (Marshal.to_*) に出力が 32-bit ホストで読み込めるよう強制するフラグ Marshal.Compat_32 (Xavier Leroy)
  • Pervasives に中置関数適用演算子 |> と @@ (Fabrice Le Fessant)

その他のライブラリ

  • PR#5568: Unix.open_file に、ファイルディスクリプタを close-on-exec モードで作成する O_CLOEXEC フラグを追加。 (Xavier Leroy)

実行時システム

  • *PR#6019: より効率的な caml_modify() と caml_initialize() の実装。新しい実装は旧実装より不寛容で、 caml_modify の代入先のポインタがマイナーまたはメジャーヒープを指していなければならず、また、 caml_initialize() の代入先ポインタがメジャーヒープを指していなければならない。 (Xavier Leroy, from an experiment by Brian Nigito, with feedback from Yaron Minsky and Gerd Stolpmann)

内部

  • debugger/envaux.ml を typing/envaux.ml に移動し、 env_of_only_summary を compilerlibs の一部として公開。 bin-annot ファイルに使用 (Fabrice Le Fessant)
  • OCaml にインストールしなくてもテストスイートを実行できるように (Damien Doligez)

バグ修正

  • PR#3236: Queue がスレッドセーフでないことをドキュメント化 (Damien Doligez)
  • PR#3468: (part 1) Sys_error のドキュメント (Damien Doligez)
  • PR#3679: 警告の表示に関する問題 (Fabrice Le Fessant)
  • PR#3963: Win32 でウィンドウを閉じると Graphics.wait_next_event がハングする (Damien Doligez)
  • PR#4079: Queue.copy を末尾再帰的に (patch by Christophe Papazian)
  • PR#4138: Unix.mkdir のドキュメント (Damien Doligez)
  • PR#4469: emacs mode: caml-set-compile-command を ocamlbuild と同時に使うと鬱陶しい (Daniel Bünzli)
  • PR#4485: Graphics: ネイティブコードでキーボードイベントの配送が間違っている (Damien Doligez, report by Sharvil Nanavati)
  • PR#4502: ocamlbuild が build-dir を hygiene チェックから除外するように (Gabriel Scherer, report by Romain Bardou)
  • PR#4762: ?? がまったく使われていないのに字句解析の予約語になっている (Alain Frisch)
  • PR#4788: バックトレース時に実行ファイルが見つからないと不適切なエラーメッセージが表示される (Damien Doligez, report by Claudio Sacerdoti Coen)
  • PR#4812: otherlibs/unix: extern int code_of_unix_error (value error); を追加 (Goswin von Berdelow)
  • PR#4887: close_in の後に input_char すると ocaml がクラッシュする(msvc) (Alain Frisch and Christoph Bauer, report by ygrek)
  • PR#4994: ocaml-mode が xemacs21 で動かない (Damien Doligez, report by Stéphane Glondu)
  • PR#5098: モジュールの値を作るとメモリリークすることがある (Alain Frisch, report by Milan Stanojević)
  • PR#5102: rule dependency 中で未束縛の変数を使うと ocamlbuild が失敗する (Xavier Clerc, report by Daniel Bünzli)
  • *PR#5119: camlp4 が 'DELETE_RULE' が失敗したときに 'Not_found' ではなく固有の例外を送出するように (ygrek)
  • PR#5121: Format モジュールの %( %) が壊れている (Pierre Weis, first patch by Valentin Gatien-Baron, report by Khoo Yit Phang)
  • PR#5178: INSTALL に Linux x86-64 環境で 32-bit 版をビルドする方法のドキュメント (Benjamin Monate)
  • PR#5212: ocamlbuild の _tags パーサーのエラーメッセージを改善 (ygrek)
  • PR#5240: Unix.Unix_error と Dynlink.Error 用の例外プリンタを登録 (Jérémie Dimino)
  • PR#5300: ocamlbuild: -verbose で -classic-display も設定されるべき (Xavier Clerc, report by Robert Jakob)
  • PR#5327: (Windows) Unix.select の第1および第3引数に同じソケットを指定するとブロックする (David Allsopp, displaying impressive MSDN skills)
  • PR#5343: ocaml -rectypes がモジュールの部分型付けに関して不健全 (Jacques Garrigue)
  • PR#5350: 実行時システムで戻り値チェックが抜けている (Xavier Leroy)
  • PR#5468: ocamlbuild はタグの順序を保存すべき (Wojciech Meyer, report by Dario Texeira)
  • PR#5551: 存在しない cmi ファイルのチェックを繰り返さない (Alain Frisch)
  • PR#5552: 無効な gcc オプション -no-cpp-precomp (Damien Doligez, report by Markus Mottl)
  • PR#5580: 定数伝播の機会を見逃している (Xavier Leroy and John Carr)
  • PR#5611: .cmo ファイルとリンカの出力ファイルの衝突を防ぐ (Wojciech Meyer)
  • PR#5662: md5.c 中の typo (Olivier Andrieu)
  • PR#5673: 多相的なフィールドにおける型の等価性 (Jacques Garrigue, report by Jean-Louis Giavitto)
  • PR#5674: 4.00 のメソッド呼び出しが 3.12 の2倍遅い (Jacques Garrigue, Gabriel Scherer, report by Jean-Louis Giavitto)
  • PR#5694: 型検査器が例外を送出する (Jacques Garrigue, report by Markus Mottl)
  • PR#5695: sparc コード生成器の警告を除去 (Fabrice Le Fessant)
  • PR#5697: 警告中の statement 式の位置をより精確に (Dan Bensen)
  • PR#5698: emitaux.ml のハードコードされたラベル数の制限 200000 を除去 (Fabrice Le Fessant, report by Marcin Sawicki)
  • PR#5702: bytecomp/bytelibrarian lib_sharedobjs が使われていない (Hongbo Zhang, Fabrice Le Fessant)
  • PR#5708: ocamldebug で Failure "int_of_string" を捕捉する (Fabrice Le Fessant, report by user 'schommer')
  • PR#5712: (9) -bin-annot オプションがドキュメントに載っていない (Damien Doligez, report by Hendrik Tews)
  • PR#5731: 命令スケジューリングで破壊されたレジスタを把握していない (Xavier Leroy, Benedikt Meurer, reported by Jeffrey Scofield)
  • PR#5734: Win32 の Unix.gettimeofday の実装を改善 (David Allsopp)
  • PR#5735: %apply と %revapply が第一級市民でない (Fabrice Le Fessant, reported by Jun Furuse)
  • PR#5738: 第一級モジュールパターンが ocamldep で扱われていない (Fabrice Le Fessant, Jacques Garrigue, reported by Hongbo Zhang)
  • PR#5739: Printf.printf "%F" (-.nan) が -nan を返す (Xavier Leroy, David Allsopp, reported by Samuel Mimram)
  • PR#5741: pprintast.ml を compiler_libs に (Alain Frisch, Hongbo Zhang)
  • PR#5747: -annot オプションを付けると 'unused open' 警告が出ない (Alain Frisch, reported by Valentin Gatien-Baron)
  • PR#5752: mlpack のバイトコードリンクに依存関係が欠けている (Wojciech Meyer, Nicholas Lucaroni)
  • PR#5763: ocamlbuild が menhir を実行するときに正しいフラグを与えない (Gabriel Scherer, reported by Philippe Veber)
  • PR#5765: ocamllex が line 指示子を保存しない (Damien Doligez, reported by Martin Jambon)
  • PR#5770: 括弧の閉じ忘れに関する構文エラーメッセージが間違っていることがある (Michel Mauny)
  • PR#5772: 相互再帰的な関数のマーシャリングに関する問題 (Jacques-Henri Jourdan, reported by Cédric Pasteur)
  • PR#5775: tools/pprintast.ml について複数のバグ修正 (Hongbo Zhang)
  • PR#5784: -dclambda オプションが無視されている (Pierre Chambart)
  • PR#5785: 抽象化された構造型を GADT の index に使った場合の振舞い (Jacques Garrigue, report by Jeremy Yallop)
  • PR#5787: トップレベルでの 'Unused ...' 系の警告が不正 (Alain Frisch)
  • PR#5793: 整数のマーシャリングにアーキテクチャ間の不整合がある (Xavier Clerc, report by Pierre-Marie Pédrot)
  • PR#5798: raspbian 向け ARM VFPv2 サポートの追加 (ocamlopt) (Jeffrey Scofield and Anil Madhavapeddy, patch review by Benedikt Meurer)
  • PR#5802: "let" を値の名前に使わないように (Jacques Garrigue, report by Tiphaine Turpin)
  • PR#5805: 警告 34 を有効にすると前処理済みのファイルで Assert failure (Alain Frisch, report by Tiphaine Turpin)
  • PR#5806: バックトレースのテストが常に実行されるよう保証する (testsuite) (Xavier Clerc, report by user 'michi')
  • PR#5809: 型エラー時に .cmt ファイルの生成に時間がかかる (Alain Frisch)
  • PR#5810: -dlambda 使用時に switch の表示でエラー (Pierre Chambart)
  • PR#5811: Uytypeast が1引数の構成子パターンに1項組のタプルを生成する (Tiphaine Turpin)
  • PR#5813: タイトループ内でアンマーシャリングを繰り返すと GC が呼ばれない (ocamlopt) (Xavier Leroy, report by David Waern)
  • PR#5814: read_cmt -annot が内部的な参照関係を報告しない (Alain Frisch)
  • PR#5815: シグネチャに同名の例外定義を複数回書くとエラーになる (Leo P. White)
  • PR#5816: read_cmt -annot が(型エラー時に生成される)不完全な .cmt ファイルを受け付けない (Alain Frisch)
  • PR#5819: with を大きな再帰的レコードに使うと segfault する (ocamlopt) (Xavier Leroy, Damien Doligez)
  • PR#5821: レコードフィールド重複時のエラーメッセージが間違っている (Alain Frisch, report by Martin Jambon)
  • PR#5824: より効率的な定数個右シフトコード生成 (Pierre Chambart, review by Xavier Leroy)
  • PR#5825: ソースファイルをモジュールで包んで use するトップレベルプリミティブ(#mod_use)の追加 (Grégoire Henry, Wojciech Meyer, caml-list discussion)
  • PR#5833: README.win32 の方法ではパス内の間違った flexlink がそのままになることがある (Damien Doligez, report by William Smith)
  • PR#5835: 省略可能でないラベル付き引数を ? で渡せる (Jacques Garrigue, report by Elnatan Reisner)
  • PR#5840: 'Unix.lseek' のドキュメントの改善 (Xavier Clerc, report by Matej Košík)
  • PR#5848: 型検査器内で Assertion failure (Jacques Garrigue, Alain Frisch, report by David Waern)
  • PR#5858: クラスの型付け中に Assert failure (Jacques Garrigue, report by Julien Signoles)
  • PR#5865: 未定義のフィールドラベル報告時に assert failure (Jacques Garrigue, report by Anil Madhavapeddy)
  • PR#5872: Performance: Buffer.add_char がインライン展開されない (Gerd Stolpmann, Damien Doligez)
  • PR#5876: 型付けエラーで捕捉されない例外が送出される (Alain Frisch, Gabriel Scherer, report by Julien Moutinho)
  • PR#5877: 複数回の "open" がメモリを大量に消費することがある (Fabrice Le Fessant and Alain Frisch)
  • PR#5880: 'Genlex.make_lexer' ドキュメントに書いてある例外が間違っている (Xavier Clerc, report by Virgile Prevosto)
  • PR#5885: 共有ライブラリのサポートされない環境で C スタブをコンパイルするときのルールが間違っている (Jérôme Vouillon)
  • PR#5891: ocamlbuild: mlpack ビルド時の rectypes タグをサポート (Khoo Yit Phang)
  • PR#5892: GADT の網羅性チェックが壊れている (Jacques Garrigue and Leo P. White)
  • PR#5906: GADT の網羅性チェックがまだ壊れている (Jacques Garrigue, report by Sébastien Briais)
  • PR#5907: 型検査時に循環を検知できず例外が発生する (Jacques Garrigue, report by Pascal Zimmer)
  • PR#5910: ARM 上での "mod 1" のコード生成バグを修正 (Benedikt Meurer, report by user 'jteg68')
  • PR#5911: シグネチャの代入がサブモジュールで失敗する (Jacques Garrigue, report by Markus Mottl)
  • PR#5912: configure オプション -no-cfi の追加 (for OSX 10.6.x with XCode 4.0.2) (Damien Doligez against XCode versions, report by Thomas Gazagnaire)
  • PR#5914: Functor が同値な引数シグネチャを受け付けない (Jacques Garrigue, report by Markus Mottl and Grégoire Henry)
  • PR#5920, PR#5957: 32-bit アーキテクチャで大きなバイトコードのリンクに失敗する (Benoît Vaugon and Chet Murthy, report by Jun Furuse and Sebastien Mondet)
  • PR#5928: ocamlmktop の man page で、単語間の空白が抜けている (Damien Doligez, report by Matej Košík)
  • PR#5930: ocamldep の一時的な前処理ファイルがリークする (Gabriel Scherer, report by Valentin Gatien-Baron)
  • PR#5933: 引数の多い関数があるとリンクが遅い (Valentin Gatien-Baron, review by Gabriel Scherer)
  • PR#5934: otherlibs/num 中に整数の負数分シフト (Xavier Leroy, report by John Regehr)
  • PR#5944: 巨大なバリアント型宣言で型付けが遅くなる (Benoît Vaugon)
  • PR#5945: Minor_heap_min と Minor_heap_max の単位が混乱している (Benoît Vaugon)
  • PR#5948: GADT に多相バリアントを組み合わせた場合のバグ (Jacques Garrigue, report by Leo P. White)
  • PR#5953: Unix.system が EINTR を処理していない (Jérémie Dimino)
  • PR#5965: モジュール定義内で再帰モジュールの自己参照を禁止する (Alain Frisch, report by Arthur Windler via Gabriel Scherer)
  • PR#5973: Format モジュールのフォーマット文字列の構文解析が間違っている (Pierre Weis, report by Frédéric Bour)
  • PR#5974: Str.regexp のドキュメントの改善 (Damien Doligez, report by william)
  • PR#5976: 2回スタックオーバフローから復帰すると落ちる (ocamlopt on MacOS X) (Xavier Leroy, report by Pierre Boutillier)
  • PR#5977: raspberry pi でビルドに失敗する: "input_value: integer too large" (Alain Frisch, report by Sylvain Le Gall)
  • PR#5981: 型の非互換性チェックで、抽象化された型が単射であると仮定している (Jacques Garrigue, report by Jeremy Yallop)
  • PR#5982: caml_leave_blocking section で errno が変更される (Jérémie Dimino)
  • PR#5985: GADT と変位指定が予期しない相互作用をする (Jacques Garrigue, Jeremy Yallop and Leo P. White and Gabriel Scherer)
  • PR#5988: ocamlopt の -impl オプションがドキュメントに載っていない (Damien Doligez, report by Vincent Bernardoff)
  • PR#5989: private な列に対して不等性が仮定される (Jacques Garrigue, report by Jeremy Yallop)
  • PR#5992: マッチ対象の別の値を変更するような lazy な値をパターンマッチするとクラッシュする (Luc Maranget, Leo P. White)
  • PR#5993: モジュールの型検査で private な型略記の変位指定がチェックされていない (Jacques Garrigue)
  • PR#5997: 同一の構成子を持つ具象型に対して非互換性が仮定される (Jacques Garrigue, report by Gabriel Scherer)
  • PR#6004: 型情報が inherit の引数に伝わっていない (Jacques Garrigue, report by Alain Frisch)
  • PR#6005: 再帰モジュールに関するの型の不健全性 (Jacques Garrigue, report by Jérémie Dimino and Josh Berdine)
  • PR#6010: Big_int.extract_big_int が負の引数に対して間違った結果を返す (Xavier Leroy, report by Drake Wilson via Stéphane Glondu)
  • PR#6024: @ を表示するための Format の構文が 3.12.1 と非互換 (Damien Doligez, report by Boris Yakobowski)
  • PR#6001: Camlp4 コンパイル時にメモリ使用量を減らす (Hongbo Zhang and Gabriel Scherer, report by Henri Gouraud)
  • PR#6031: -with-frame-pointers 指定時に Camomile が落ちる (Fabrice Le Fessant, report by Anil Madhavapeddy)
  • PR#6032: Windows 下での Random.self_init を改善 (Alain Frisch, Xavier Leroy)
  • PR#6033: Matching.inline_lazy_force に η 展開が必要 (command-line flags) (Pierre Chambart, Xavier Leroy and Luc Maranget, regression report by Gabriel Scherer)
  • PR#6046: testsuite が間違った ocamlbuild の dll を選択する (Anil Madhavapeddy)
  • PR#6056: match を使うと値が一般化されない (Jacques Garrigue, report by Elnatan Reisner)
  • PR#6058: 'ocamlbuild -use-ocamlfind -tag thread -package threads t.cma' が失敗する (Gabriel Scherer, report by Hezekiah M. Carty)
  • PR#6060: ocamlbuild で -principal, -strict-sequence, -short-paths を使うための規則 (Anil Madhavapeddy)
  • PR#6069: ocamldoc: lexing: empty token (Maxence Guesdon, Grégoire Henry, report by ygrek)
  • PR#6072: configure が FreeBSD current (FreeBSD 10) を正しく扱っていない (Damien Doligez, report by Prashanth Mundkur)
  • PR#6074: Condition.broadcast 失敗時のエラーメッセージが間違っている (Markus Mottl)
  • PR#6084: Netmulticore 用に caml_modify と caml_initialize を weak symbol として定義する (Xavier Leroy, Gerd Stolpmann)
  • PR#6090: モジュール制約 + private 型が ocaml 4.01.0 で壊れている? (Jacques Garrigue, report by Jacques-Pascal Deplaix)
  • PR#6109: ocamlbuild のエラーメッセージ中に typo (Gabriel Kerneis)
  • PR#6123: self がクラスから脱出すると Assert failure (Jacques Garrigue, report by whitequark)
  • PR#6158: GADT 使用時に Fatal error (Jacques Garrigue, report by Jeremy Yallop)
  • PR#6163: GADT 内で多相バリアントを使うと Assert_failure (Jacques Garrigue, report by Leo P. White)
  • PR#6164: Num.power_num で引数が 0 または 1 のとき segmentation fault (Fabrice Le Fessant, report by Johannes Kanig)

機能要望

  • PR#5181: ocamlopt で共通の浮動小数点数定数をひとつにまとめる (Benedikt Meurer)
  • PR#5243: signatures.mli 中の ocalbuild API のドキュメントの改善 (Christophe Troestler)
  • PR#5546: 関数を内部モジュールに移動させると遅くなる (Alain Frisch, report by Fabrice Le Fessant)
  • PR#5597: OCAMLRUNPARAM に命令トレースオプション t を追加 (Anil Madhavapeddy, Wojciech Meyer)
  • PR#5676: Windows 下の IPv6 サポート (Jérôme Vouillon, review by Jonathan Protzenko)
  • PR#5721: Linux 下の perf プロファイリング用 configure -with-frame-pointers (Fabrice Le Fessant, test by Jérémie Dimino)
  • PR#5722: toplevel: 最初のレコードフィールドだけすべてのモジュールパスを表示するように (Jacques Garrigue, report by ygrek)
  • PR#5762: bigarray の次元にアクセスするためのプリミティブ (Pierre Chambart)
  • PR#5769: ネイティブコードで Sys.big_endian の結果を伝播させる (Pierre Chambart, stealth commit by Fabrice Le Fessant)
  • PR#5771: 文字列や bigarray から 2, 4, 8 バイト読み込むためのプリミティブ (Pierre Chambart)
  • PR#5774: amd64 と arm に bswap プリミティブを追加 (Pierre Chambart, test by Alain Frisch)
  • PR#5795: amd64 で外部の sqrt を呼ぶのではなく sqrtsd 命令コードを生成するように (Pierre Chambart)
  • PR#5827: コマンドライン引数を動的に解析する仕組み (Hongbo Zhang)
  • PR#5832: "wrong file naming" エラーメッセージの改善 (William Smith)
  • PR#5864: Set.find を追加 (François Berenger)
  • PR#5886: Android 用コンパイラに軽微な変更 (Jérôme Vouillon, review by Benedikt Meurer)
  • PR#5902: -ppx で渡す前処理プログラムに引数を渡したい (Alain Frisch, report by Wojciech Meyer)
  • PR#5986: バイトコード実行時に 64-bit 整数をマーシャリングできないように (Xavier Leroy, report by Alain Frisch)
  • PR#6049: OpenBSD/macppc のサポート (Anil Madhavapeddy, review by Benedikt Meurer)
  • PR#6059: ocamlbuild に -output-obj ルールを追加 (Anil Madhavapeddy)

ツール

  • OCamlbuild が bin_annot タグで .cmt ファイルを生成できるようになった (Jonathan Protzenko)
  • OCamlbuild が strict_sequence タグで strict-sequence オプションを指定できるようになった (Jonathan Protzenko)
  • OCamlbuild が ocamlfind や menhir のような非 core ツールを PATH から探すようになった (Wojciech Meyer)
  • PR#5884: emacs モードのちょっとした修正と整理 (Stefan Monnier)
  • PR#6030: -annot の性能を向上 (Guillaume Melquiond, Alain Frisch)

新規 編集 添付