gcc 11の変更点¶
gcc 11がリリースされました。 早速何が変わったのかを見てみましょう。 (既視感)
Changes, New Features, and Fixesを読む¶
変更点は Changes, New Features, and Fixes に書かれています。
いつもはC/C++とFortranしか書かれないこのページ、今回はD言語の変更点も沢山書かれていますよ!
しかし、やっぱりAdaの変更点は書かれていないです。
変更点の調べ方¶
gcc 10の時と同じです。
また、私が見つけた変更点も同じく https://github.com/ytomino/drake/wiki/GCC-Versions に都度メモしております。
特筆すべき変更点¶
Ada 202x対応¶
Ada 202x対応は順調に進んでいるようです。
ただし、まだ実装の途中であったり、最新のドラフトとは違う形で実装されていたりしますので本格的に使うのは避けたほうが良いでしょう。
目立つところでは 'Put_Image
属性に使われるバッファーの型が Ada.Strings.Text_Output.Sink'Class
になっていたりします。
AI12-0020-1 の初期案では Ada.Streams.Counted_Streams.Conted_Stream
を使う形で、その後 Root_Stream_Type'Class
を使う形を経て AI12-0340-1 で Ada.Strings.Text_Buffers.Root_Buffer_Type'Class
が提案され、インデント対応等の変遷があって今に至っています。
Text_Output.Sink
という名前は提案の中には見当たりませんのでちょっと謎です。
'Image
属性をユーザー定義できるぞやった!と勇み足でこれを使ってしまいますと次のバージョンあたりで変更する羽目になると思われます。
Long_Long_Long_Integer¶
ええと、その……大昔に 長い長い長い整数 という駄文を書いたことがありまして……その時は想像もしていなかったのですが、とうとう本当に Long_Long_Long_Integer
が実装されてしまいました。
https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gnat_rm/Implementation-Defined-Characteristics.html
64ビット処理系では128ビット、32ビット処理系では64ビットとなる型です。
gccのCフロントエンドは拡張で64ビット環境でのみ __int128_t
が使えます。
これでAdaでも128ビット整数が使えることになります。
(将来C言語に long long long
が導入されて定義が食い違ったらどうなるんでしょう……)
これに伴い処理系で扱える最大の整数のビット数が Standard'Max_Integer_Size
で取得できるようになっています。
https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gnat_rm/Attribute-Max_005fInteger_005fSize.html
またユーザー定義型も64ビット環境では128ビットまで使えるようになっているようです。