gcc-4.8の変更点

相変わらずchangesに何も書かれてませんのでメモっときます。
4.7の時の変更が派手だったぶん、今回はおとなしいです。まあでも4.8で一番嬉しいのは-Ogと思う。

Ada2012のattributeの更なる実装

'Overlaps_Storageとか'Importとか'Conventionとか。めぼしいのはだいたい揃った感じ。

'Valueで例外発生時、エラーメッセージに引数の文字列が入るようになった

地味に便利と思います。

pragma Overflow_Checks

今までコマンドラインオプションでしかON/OFFできなかったオーバーフロー検出をソース中でON/OFFできるように。

pragma Loop_Optimize

http://gcc.gnu.org/onlinedocs/gnat_rm/Pragma-Loop_005fOptimize.html

Adaフロントエンドでも自動ベクトル化ですよ奥さん。

pragma No_Inline

要るよね。

pragma Warnings

でバックエンドの警告も操作できるように。

アドレス値の配置が自由に

今まで、アドレス値は必ずアライメントされてたんですが、x86みたいなアライメントが必須ではないプラットフォームではアライメントしなくてよくなりました。

protected型がロックフリーに

できるようになりました。
pragmaが必要です。(デフォルトではread-write lock)

protected Prot_Obj is
   pragma Lock_Free; -- undocumented
   ...
end Prot_Obj;

protectedがロックフリーになったんですか。エッグシェルモデルやめたってことですかね?

https://twitter.com/i_yudai/status/313838044199411714

エッグシェルモデルやめてcompare-and-swapになるっぽいですね。

訂正の訂正。本当にprotected型をロックフリーにできます。

バグ修正

とりあえず直ってるのを見つけられたのは

  • 2引数以上の時のuser-defined indexingのバグが直った。
  • StringとWide_Stringのオーバーロードコンパイラが落ちるバグが直った。
  • discriminantsまわりのバグが直った。

入ってないもの

  • raise expressionはAdaCore版GNATのDev Logにはあるのですが、gccには入ってません。
  • use all typeの実装は進展ないっぽいです。
  • 4.7でControlled型の実現方法が変わって、それ関係で結構バグがあったのですが、直ってないです。