OCaml4.02.0の変更点

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

last mod. 2014-09-24 (水) 20:38:34

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


OCaml 4.02.0 の変更点

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

言語機能

  • 属性(attributes)と拡張ノード(extension node) (Alain Frisch)
  • 生成的な(Generative)ファンクタ (Jacques Garrigue)
  • モジュールの別名(alias) (Jacques Garrigue)
  • * 文字列リテラルの代替構文 {id|...|id} (コメントを壊す可能性がある) (Alain Frisch)
  • 読み込み専用の文字列(type string)と読み書き両用のバイト列(type bytes)の分割。 -safe-string コマンドラインオプションで有効になる (Damien Doligez)
  • PR#6318: パターンマッチ中の exception case (Jeremy Yallop, backend by Alain Frisch)
  • PR#5584: 拡張可能な開いたデータ型 (Leo White)

Build system for the OCaml distribution:

  • ビルド中に -bin-annot オプションを付ける
  • ポータブルな Makefile ではなく GNU make を使う
  • Intel ハードウェア上の 32-bit Mac OS X でのビルド方法を更新

Shedding weight:

  • * 配布物から Camlp4 を削除。サードパーティのソフトウェアとして利用可能
  • * 配布物から Labltk を削除。サードパーティのソフトウェアとして利用可能

型システム

  • * PR#6235: パターンの型付けを principal モードとは無関係に(パターンマッチで前にあるパターンの情報はパターンの型付けに使われない。 testsuite/test/typing-warnings/records.ml の 'PR#6235' を参照) (Jacques Garrigue)
  • 生成的なファンクタの本体部分で、第一級のモジュールを open したり、生成的なファンクタを適用するのを認める。さらに、型を作らない場合は、これらは適用的なファンクタの本体部分でも認められる。 (Jacques Garrigue, suggestion by Leo White)
  • * モジュールの別名が特別な方法で型付けされ、モジュールの同一性を記録するようになった。これにより、特に、 module type of で推論されるシグネチャが変更になった (Jacques Garrigue, feedback from Leo White, Mark Shinwell and Nick Chapman)
  • PR#6331: prvaite な略記や private な列型を区別する際の基準が微妙に変わり、閉じたオブジェクトや固定された多相バリアントに private な略記を作るようになった (Jacques Garrigue)
  • * PR#6333: 第一級のモジュールを名前ではなく構造で比較するようになった。モジュールの内部表現が同じであれば、値の部分型付けでモジュールの部分型付けができる (Jacques Garrigue)

コンパイラ

  • float, int32, int64, nativeint の算術を含む、より積極的な定数伝播。実行時に浮動小数点数の丸めモードを変えるようなコードのため、 -no-float-const-prop で float の定数伝播を無効にすることもできる (Xavier Leroy)
  • 新たな最適化パスとして、共通部分式削除(CSE)が追加された(値を再計算するのではなく、前に計算した値を再利用する) (Xavier Leroy)
  • 新たな最適化パスとして、デッドコード削除が追加された(結果が使われないような算術演算やロード命令を削除する) (Xavier Leroy)
  • PR#6269: 文字列パターンの最適化 (Benoît Vaugon and Luc Maranget)
  • AArch64 (ARM 64 bits) 用の実験的なネイティブコード生成系 (Xavier Leroy)
  • PR#6042: 除数が定数の場合の除算・剰余の最適化 (Xavier Leroy and Phil Denys)
  • 型付け前にモジュールを open する -open コマンドラインオプションの追加 (Leo White, Mark Shinwell and Nick Chapman)
  • * "-o" で指定された出力ファイル名の最初の . より前の部分をモジュール名にする(これは -o を指定しなかった場合にも適用される。この場合、モジュール名は入力ファイル名の最初の . のより前の部分になる) (Leo White, Mark Shinwell and Nick Chapman)
  • * PR#5779: 構造的な定数値がよりよく共有されるようにする (Alain Frisch)
  • PR#5817: cmi ファイル中に位置を保持するための新たなフラグ (Alain Frisch)
  • PR#5854: [@@ocaml.deprecated] 属性のついた値を参照したときに警告3を発する (Alain Frisch, suggestion by Pierre-Marie Pédrot)
  • PR#6017: GADT ベースの新たな vormat の実装 (Benoît Vaugon and Gabriel Scherer)
  • * PR#6203: 定数例外コンストラクタでメモリ割り当てをしないように (Alain Frisch)
  • PR#6260: let での無駄な boxing を避ける (Vladimir Brankov)
  • PR#6345: デフォルト値付きの省略可能引数のコンパイルを改善 (Alain Frisch, review by Jacques Garrigue)
  • PR#6389: インクリメンタルなネイティブコンパイル要の ocamlopt -opaque オプション (Pierre Chambart, Gabriel Scherer)

トップレベル対話システム

  • PR#5377: "#show_*" 指示子を新たに追加 (ygrek, Jacques Garrigue and Alain Frisch)

実行時システム

  • 新たな configure オプション -no-naked-pointers。メジャー GC の block darkening とマークフェーズでページテーブルのテストを避けることでパフォーマンスを向上させる。このモードではヒープ外のポインタはすべて OCaml の値に見えるようなものを指していなければならない。特に、値は OCaml の値として有効なヘッダを持っていなければならない。ヘッダ中の colour は black であるべきである (Mark Shinwell, reviews by Damien Doligez and Xavier Leroy)
  • caml_raise_with_string のネイティブ版にヒープを壊す可能性のあるバグがあったのを修正 (Mark Shinwell)
  • CAMLlocal* と caml_alloc で初期化した変数が 0 ではなく Val_unit で埋められるようになった (Mark Shinwell)
  • ヒープが大きい場合(〜1GB)の主な性能上の問題を、ヒープの拡大をヒープサイズに応じて行なうようにすることで修正 (Damien Doligez)
  • PR#4765: Structural equality treats exception specifically
  • PR#5009: 例外の比較と indexing を効率化 (Alain Frisch, request by Markus Mottl)
  • PR#6075: 安全でない C ライブラリ関数(strcpy, strcat, sprintf)を使わない (Xavier Leroy, reports from user 'jfc' and Anil Madhavapeddy)
  • ISO C-99 準拠の C コンパイラを仮定するようになった(MSVC 用の例外はある)。特に、 64-bit 整数演算のエミュレーションコードが取り除かれた。コンパイラは 64-bit 整数型をサポートしていなければならない (Xavier Leroy)

Standard library:

  • * 変更可能なバイト列のためのモジュール Bytes と BytesLabels? を追加 (Damien Doligez)
  • PR#4986: List.sort_uniq と Set.of_list を追加 (Alain Frisch)
  • PR#5935: バックトレースを保存しない、より高速な raise: Pervasives.raise_notrace (Alain Frisch)
  • PR#6146: Windows 上で Unix.kill pid Sys.sigkill をサポート (Romain Bardou and Alain Frisch)
  • PR#6148: Buffer の高速化 (John Whitington)
  • PR#6180: 未初期化の float 配列作成の効率化 (Alain Frisch, request by Markus Mottl)
  • PR#6355: ファイナライザとマルチスレッドについてのドキュメントを改善 (Daniel Bünzli, Mark Shinwell)
  • ドキュメントに非推奨(deprecated)とあったすべての値について警告3を発するようにした (Damien Doligez)

OCamldoc:

  • PR#6257: バリアント構成子とレコードフィールドの doc コメントをすべて処理するように (Maxence Guesdon, request by ygrek)
  • PR#6274: オブジェクト型に doc コメントを付けられるように (Thomas Refis)
  • PR#6310: 下付き文字、上付き文字の CSS font-size を修正 (Anil Madhavapeddy)
  • PR#6425: man ページの生成を修正 (Maxence Guesdon, report by Anil Madhavapeddy)

バグ修正

Bug fixes:

  • PR#2719: try...with Invalid_argument -> _ ... 内の境界チェックのスケジューリングがまずい (Xavier Leroy)
  • PR#4719: 実行ファイル名に . が含まれると Sys.executable_name が間違った結果を返す (Windows) (Alain Frisch, report by Bart Jacobs)
  • PR#5406 ocamlbuild: "tag 'package' does not expect a parameter" というメッセージが出る (Gabriel Scherer)
  • PR#5598, PR#6165: ソースファイル中の \013 の扱いが変わったことで他のツールが壊れる (David Allsopp and Damien Doligez)
  • PR#5820: camlp4 の lexer rollback 問題の修正 (Hongbo Zhang)
  • PR#5946: CAMLprim な関数群が引数を取るにも関わらず (void) 引数で定義されている (Benoît Vaugon)
  • PR#6038: x86-32 で GCC や clang との互換性のためにスタックアライメントを 16 byte にする。 Win32/MSVC ではスタックアライメントは変わらず 4 byte (Xavier Leroy)
  • PR#6062: コミット 13047 で再発 4.01 の camlp4 の DELETE_RULE 問題の修正 (Hongbo Zhang, report by Christophe Troestler)
  • PR#6173: 型付けのエラーメッセージがわかりにくくなっている (Jacques Garrigue and John Whitington)
  • PR#6174: GADTs でコンパイラがループする(-rectypes を付けた方の場合) (Jacques Garrigue and Grégoire Henry, report by Chantal Keller)
  • PR#6175: camlp4 が open! をサポートしていない (Hongbo Zhang)
  • PR#6184: ocamlbuild: `ocamlfind ocamldep` が -predicate をサポートしていない (Jacques-Pascal Deplaix)
  • PR#6194: 第一級のモジュールがパターンにあると、未使用の変数に対する警告が誤って発せられる (Jacques Garrigue, report by Markus Mottl and Leo White)
  • PR#6211: トップレベル対話環境で "let x = a let y = b;;" の形の複数の束縛と、捕捉されない例外が誤った相互作用をする (Xavier Leroy)
  • PR#6216: GADT に対するパターンマッチのインライン化で不正なアセンブリが生成される (Xavier Leroy and Alain Frisch, report by Mark Shinwell)
  • PR#6232: mkstemp が使えるプラットフォームでは mktemp を使わない (Stéphane Glondu, Mark Shinwell)
  • PR#6233: ARM と PowerPC で out-of-bounds 例外の位置が失われる (Jacques-Henri Jourdan and Xavier Leroy, report and testing by Stéphane Glondu)
  • PR#6235: バリアントパターン間での型情報の流れにまつわる問題 (Jacques Garrigue, report by Hongbo Zhang)
  • PR#6239: -g してバックトレースを有効にした場合、例外を送出するとスタックアライメントがおかしくなることがある (Xavier Leroy, report by Yaron Minsky)
  • PR#6240: 部分型付け中にモジュール型略記の展開に失敗する (Jacques Garrigue, report by Leo White)
  • PR#6241: ファンクタ引数のパスについて非等価性が仮定されている (Jacques Garrigue, report by Jeremy Yallop)
  • PR#6243: "ocamlopt -g" を不正な情報に対してより寛容に (Xavier Leroy, report by Pierre-Marie Pédrot)
  • PR#6262: 第一級のモジュールの等価性でモジュールの別名を考慮に入れる (Alain Frisch and Leo White)
  • PR#6268: asmrun/arm.p.o をビルドするときに -DMODEL_$(MODEL) が渡されていない (Peter Michael Green)
  • PR#6273: ラージファイルに対する Sys.file_exists を修正 (Win32) (Christoph Bauer)
  • PR#6275: 型制約に関する健全性のバグ (Jacques Garrigue, report by Leo White)
  • PR#6293: 不正なモジュール型で Assert_failure する (Jacques Garrigue, report by Elnatan Reisner)
  • PR#6300: ocamlbuild: -use-ocamlfind と -ocamlc が衝突する (Gabriel Scherer)
  • PR#6302: bytecode のデバッグ情報が毎回ファイルシステムから再読み込みされる (Jacques-Henri Jourdan)
  • PR#6307: モジュールの別名を考慮した module type of (Jacques Garrigue, report by Alain Frisch)
  • PR#6332: Unix.open_process が Windows 上で空の引数を渡すのに失敗する (Damien Doligez, report Virgile Prevosto)
  • PR#6346: OSX で 最新の Xcode だとビルドに失敗する (Jérémie Dimino)
  • PR#6348: GADT の元の定義が隠蔽されていると単一化に失敗する (Leo White and Jacques Garrigue, report by Jeremy Yallop)
  • PR#6352: 省略可能引数と逐次実行を自動的に取り除く (Jacques Garrigue and Alain Frisch)
  • PR#6361: 再帰型のついた lazy な値に対して Hashtbl.hash が停止しない (Xavier Leroy, report by Leo White)
  • PR#6383: 存在しないモジュールのクラス型を使うと Not_found 例外が発生する (Jacques Garrigue, report by Sébastien Briais)
  • PR#6384: .cmi ファイルを隠すと捕捉されない Not_found 例外が発生する (Leo White)
  • PR#6385: バイトコードインタプリタが巨大なクロージャを不正に割り当てる (Xavier Leroy, report by Stephen Dolan)
  • PR#6394: Typecore.expand_path で Assert_failure (Alain Frisch and Jacques Garrigue)
  • PR#6405: -rectypes と GADTs の相互作用で健全性が損われる (Jacques Garrigue, report by Gabriel Scherer and Benoît Vaugon)
  • PR#6408: エラーメッセージで省略可能引数が ?arg ではなく ~?arg と書かれている (Michael O'Connor)
  • PR#6411: mingw で libgcc_s_sjlj-1.dll が足りない(-static-libgcc を付ける) (Jun Furuse and Alain Frisch, Jonathan Protzenko and Adrien Nader)
  • PR#6436: stdlib/arrayLabels/mli の @deprecated テキスト中に typo がある (John Whitington)
  • PR#6439: 非推奨の [getpagesize] 関数を使わない (John Whitington, Mark Shinwell)
  • PR#6441: 相互再帰関数で末尾呼び出しが検知されないことがある(引数が多く、相互再帰的な定義が関数と非関数を混ぜている場合) (Stefan Holdermans, review by Xavier Leroy)
  • PR#6443: List.fold_left を trace して実行すると ocaml が落ちる (Jacques Garrigue, report by user 'Reventlov')
  • PR#6451: untypeast.ml にいくつかのバグ (Jun Furuse, review by Alain Frisch)
  • PR#6460: 巨大な float 型配列式 [| e1;...eN |] で実行時に表明検査に失敗する (Leo White)
  • PR#6463: -dtypedtree がクラスのフィールドに対して失敗する (Leo White)
  • PR#6469: "external _pipe = ...", "Pervasives.(!)" に対して -dsource の表示か不正になる (Gabriel Scherer and Damien Doligez, user 'ngunn')
  • PR#6482: _tags ファイルが unhygienic なディレクトリにあると ocamlbuild が失敗する (Gabriel Scherer)
  • PR#6502: ocamlbuild が "use_menhir" タグに誤った警告を出す (Xavier Leroy)
  • PR#6505: レコードアクセスで segfault を起こす型エラーが見逃されていた (Jacques Garrigue, Jeremy Yallop, report by Christoph Höger)
  • PR#6507: AArch64 で caml_bottom_of_stack が正しく設定されていなくて落ちる (Richard Jones, Mark Shinwell)
  • PR#6509: ocamlcommon.cma に -linkall フラグを追加 (Frédéric Bour)
  • PR#6513: ファンクタの型付けで Ctype.Unify(_) 例外
  • PR#6523: 巨大な文字型の bigarray のアクセスに失敗する。比較順序が無用に変わっている。 (Jeremy Yallop, Mark Shinwell)
  • cking bug in caml_string_{get,set}{16,32,64} の境界チェックに関するバグ (Pierre Chambart and Gabriel Scherer, report by Nicolas Trangez)
  • 配列の領域外アクセスでスタックのアライメントがまずいことがある (Gabriel Scherer and Xavier Leroy, report by Pierre Chambart)

機能追加の要望

  • PR#4243: Makefile を並列化可能に (Grégoire Henry and Damien Doligez)
  • PR#4323: Num.of_string と Big_int.of_string を二進/十六進対応に (Zoe Paraskevopoulou, review by Gabriel Scherer)
  • PR#4771: Dynlink.allow_only のドキュメントをわかりやすく (Damien Doligez, report by David Allsopp)
  • PR#4855: 'camlp4 -I +dir' のサポート。 dir は 'camlp4 -where' の相対パスとして解釈される (Jun Furuse and Hongbo Zhang, report by Dmitry Grebeniuk)
  • PR#5201: ocamlbuild: パフォーマンス向上のため、 bash 起動時の引数に --norc を追加 (user 'daweil')
  • PR#5650: Camlp4FoldGenerator? が "abstract" な型をうまく扱えない (Hongbo Zhang)
  • PR#5808: "let p : t = ..." で識別子以外に単純なパターンも認める (Alain Frisch)
  • PR#5851: ocamlbuild: -r を無効にした場合 _tags ファイルが存在しない旨を警告する (Gabriel Scherer)
  • PR#5899: プログラマがバックトレース情報に簡単にアクセスできるように (Jacques-Henri Jourdan and Gabriel Scherer)
  • PR#6000 comment 9644: non-principal な format への型強制に警告を (Jacques Garrigue, report by Damien Doligez)
  • PR#6054: M.[ foo ], M.[| foo |] 等のサポート (Kaustuv Chaudhuri)
  • PR#6064: Bigarray.kind + CAML_BA_CHAR 実行時カインドの GADT 表現 (Jeremy Yallop, review by Gabriel Scherer)
  • PR#6071: トップレベルに -noinit オプションを追加 (David Sheets)
  • PR#6087: ocamlbuild: _tags 内のエスケープされた改行の扱いを改善 (Gabriel Scherer, request by Daniel Bünzli)
  • PR#6109: ocamlbuild のエラーメッセージ内に typo (Gabriel Kerneis)
  • PR#6116: Digest.to_hex の実装を効率化 (ygrek)
  • PR#6142: ocamlobjinfo に cmt ファイルサポートを追加 (Anil Madhavapeddy)
  • PR#6166: ocamlbuild -ocamldoc オプションのドキュメント (Xavier Clerc)
  • PR#6182: virtual object と class type のメッセージを改善 (Leo White, Stephen Dolan)
  • PR#6183: 'Unix.shutdown_connection' のドキュメントを改善 (Anil Madhavapeddy, report by Jun Furuse)
  • PR#6187: ocamlbuild: myocamlbuild.ml を使わずに -plugin-tag を使った場合に警告 (Jacques-Pascal Deplaix)
  • PR#6246: for ループの添字にワイルドカード _ を認める (Alain Frisch, request by ygrek)
  • PR#6267: ocamldebug の bt コマンドでより多くの情報が表示されるように (Josh Watzman)
  • PR#6270: 通常の用途で ocamldebug の -I 指示子を指定する必要がないようにする (Josh Watzman, review by Xavier Clerc and Alain Frisch)
  • PR#6311: シグネチャ不一致時のメッセージを改善 (Alain Frisch, suggestion by Daniel Bünzli)
  • PR#6358: install 時に DESTDIR を考慮する (Gabriel Scherer, request by François Berenger)
  • PR#6388, PR#6424: -ppx 使用時に parsetree の正当性をより厳格にチェックするように (Alain Frisch, request by Peter Zotov and Jun Furuse)
  • PR#6406: OCaml のバージョンをヘッダファイルで公開するように (Peter Zotov and Romain Calascibetta)
  • PR#6446: "unused declaration" 警告で名前の隠蔽を考慮するように (Alain Frisch)
  • PR#6495: ocamlbuild: 'safe_string', 'unsafe_string' タグ (Anil Madhavapeddy)
  • PR#6497: -ppx 前処理プログラムに文脈情報を渡す (Peter Zotov, Alain Frisch)
  • ocamllex: ユーザー定義可能な refill (Frédéric Bour, review by Gabriel Scherer and Luc Maranget)
  • ファンクタシグネチャの短縮形: "functor (M1:S1) (M2:S2) .. -> .." (Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
  • ocamldebug -I の自動検知が ocamlbuild と協調するように (Josh Watzman)

新規 編集 添付