OpenWatcom/Changes_in_1.9

OpenWatcom/Changes_in_1.9

例によって例のごとく(無断)翻訳。

このへん→http://www.openwatcom.org/index.php/C_Compilers_Release_Changes

(2010-03-10 現時点で RC1 であり、正式リリース時はさらに追加/変更されることもありうる)

  • NULL マクロが C では ((void *)0) に定義されるようになった。 C++ ではこれまで通り 0 もしくは 0L に定義されている。 この変更により、ユーザ側のコードが NULL を整数だと誤用している場合は変更が必要になるかもしれない。 注:16bit 版の windows.h は NULL を 0 に定義している。 16bit の Windows プログラミングでは、NULL が実際どう定義されるのかは、windows.h と標準 C ヘッダのどちらを先に include するかで変わってしまう。 (つまり、Win16 アプリでは windows.h をまず最初に include すべきだ、ということをほぼ言ってるかと思われ)
  • C コンパイラで _Bool 型の扱いが改良された(C99 モード専用)。 整数が使われている式の中でも _Bool 型が普通に使えるようになった。
  • ISO C の要求に従い、C コンパイラは列挙型を、その元となる整数型と適合する (compatible) ものとみなすようになった。 元となる型としてどれが選ばれるかは決まっておらず(訳注:いわゆる「処理系定義」)、そのいずれかであることを期待してはならない点に注意。
  • C コンパイラが、浮動小数点型の static 変数を 64bit 整数型の定数で正しく初期化できるようになった。
  • C と C++ コンパイラが __int8、__int16、__int32 キーワードをサポートするようになった。
  • 16bit 用の C、C++ コンパイラは、静的記憶域 (static storage) の変数の初期化子 (initializer) の中で、オペランドが両方とも整数型の定数であれば :> 演算子を使えるようになった これは初期化子内で MK_FP マクロの利用を可能にするものである。 (訳注:User's Guide の "The Open Watcom C/C++ Compilers"→"Based Pointers"→"Void Based Pointers" あたりを参照。:> 演算子は「セグメント+オフセット」形式のポインタ指定に使う演算子。たぶん Watcom 独自)
  • C++ コンパイラが、警告 W737: implicit conversion of pointers to integral types of same size(同一サイズで型が異なる整数型を指すポインタに対する暗黙の型変換が生じた)をエラーとして扱うようになった。 (訳注:C++ の警告/エラーメッセージの詳細は "Open Watcom C++ 1.9 Diagnostic Messages" のヘルプ (wpperrs.hlp) を開いて番号で検索してください)
  • C++ コンパイラが新しい警告をサポート。 W931: warn about meaningless cv-qualifier in casts(キャスト中の無意味な const 修飾)、W932: warn about meaningless cv-qualifier in function return types(関数の戻り値に対する無意味な const 修飾)、W933: warn about use of C-style casts in C++ code(C++ のコード中に C スタイルのキャストが使われている)。 これらの警告は -wce オプションを明示的に指定しないと有効にならない。
  • 32bit インテルプロセッサ向けにサイズの最適化を行っている場合、コードジェネレータが冗長なエピローグコードを削るようになった。
  • コードジェネレータが 64bit 整数の除算と右シフト演算の畳み込み (folding) を正しく扱えるようになった。
  • コードジェネレータが 64bit の余り(モジュロ)演算の畳み込みをサポートするようになった。
  • コードジェネレータが、一方のオペランドが float 型変数、もう一方が double もしくは long double 定数の場合の浮動小数点の比較を間違えないようになった。
  • float 型の引数をとる関数に、引数として float 型の定数式(例: 1.0f + 1.0f)を渡した際にコードジェネレータが不正なコードを生成しなくなった。
  • コードジェネレータが、定数による乗算をシフトと加算に置き換えるかどうかをより的確に選択できるようになった。 選択結果はターゲット CPU の種別に依存する。
  • 386 コードジェネレータは、32bit 符号つき整数を 64bit に変換する際、いままでは MOV/SAR のシーケンスが出力されていたところで、Pentium ターゲットかつ速度重視の最適化が行われている場合以外では CDQ 命令を生成するようになった。
  • DLL からインポートされたシンボルへの呼び出しを作成するとき、コードジェネレータは冗長な CS セグメントオーバライドを出力しなくなった。
  • Win32 の API ヘッダとインポートライブラリが更新され、Windows 7 の新インターフェースをサポートした。
  • 16bit OLE 2.0 のサポート追加。
  • RDOS ターゲットのサポート追加。
  • リンカに ZDOS ターゲットのサポート追加。
  • 16bit DOS の浮動小数点例外ハンドラは、ユーザ設定のシグナルハンドラが DS を変更した場合でもクラッシュしなくなった。
  • _floodfill() グラフィックライブラリがふたたび動作するようになった。
  • _beginthread() で作成したスレッドの終了時にライブラリがメモリリークしないようになった。
  • printf 系の関数で、書式指定子 %Lf(およびそれに類する書式指定子 format specifier)が使えるようになった。
  • ストリームで 64bit ファイルオフセットポインタを使うための関数 _fseeki64 と _ftelli64 がライブラリに含まれるようになった。
  • _lseeki64、_telli64、_fileleni64、_(w)stati64、_(w)findfirsti64、_(w)findnexti64 の OS/2 ライブラリ実装が 64bit のファイル長とオフセットをきちんと使えるようになった。
  • puts と putws のライブラリ実装が、失敗時に正しく EOF を変えるようになった。
  • DOS のロングファイルネーム(LFN)サポートが追加された(モデル別の新ライブラリ doslfn??.lib に各モジュールの DOS LFN 版が入っている)。 DOS LFN サポートはデフォルトで有効になっている。 オフにするには環境変数を設定して LFN=N にすればよい。
  • wasm アセンブラが Turbo Aseembler の IDEAL モード互換サポートを実装。 IDEAL モードを選択するには -zcm オプションを使う。
  • アセンブラが組み込みシンボル @code と @data をサポートするようになった。
  • アセンブラが条件アセンブル用の ELSEIF をサポートするようになった。
  • アセンブラは絶対セグメントをバイトアラインと仮定しなくなった。 絶対セグメントはパラグラフ(16 バイト)アラインである。
  • wmake の組み込みコマンド cd が空白文字を含むパスをサポートするようになった。
  • リンカが BSD、COFF、GNU ar 形式のライブラリをサポートするようになった。
  • リンカがスタックサイズを 512 バイト未満に指定できるようになったが、この場合警告なしで変更できない。 新しい警告 (W1172) が出力される。
  • リンカに DOS EXE フォーマット専用オプション FULLHEADER が追加された。 詳しい情報は Linker Guide をご参照のこと。
  • ライブラリマネージャ (wlib) が BSD、COFF、GNU 系列の ar ライブラリフォーマットをサポートするようになった。 拡張オプション -fab、-fag、-fac でこれらの種別を選択する。 -fa オプションはホストプラットフォーム依存のデフォルトフォーマットを選択するようになっている。
  • 本リリースでは Open Watcom の IPF コンパイラ (wipfc) を使って OS/2 のヘルプファイルを作ってみる(訳注:RC1 に wpifc のバイナリは入っていない)。
  • vi エディタが 0x80-0xFF の範囲の非 ASCII 文字をサポートするようになった。
  • Windows 用 vi のコンソール版が標準的な Windows 処理を使うようになった。 AltGr とデッドキーが正しく機能するようになった。 それに加えて、Cpas Lock は文字を出すキーにだけ有効となっている。
  • エディタが awk ファイルの構文ハイライトをサポート。
  • エディタが「すべて選択 (Select All)」コマンドをサポート。
  • GUI 上のエディタは検索/置換ダイアログの位置を呼び出し時に固定しておくようになった。
  • ユーティリティ wcl と wcl386 が Linux ホストで正しく動作するようになった。
  • DOS の NetBIOS トラップファイルとデバッグサーバが修正され、Windows NT 上(NTVDM 経由)で動作するようになった。
  • 16bit Windows の GUI ツールが CTL3DV2.DLL を必要としなくなった。 ただし、ライブラリが存在する場合は今まで通り利用する。