gcc 11の変更点 ============== .. post:: Jun 02, 2021 01:00:00 :tags: gcc gcc 11がリリースされました。 早速何が変わったのかを見てみましょう。 (既視感) Changes, New Features, and Fixesを読む -------------------------------------- 変更点は `Changes, New Features, and Fixes `_ に書かれています。 いつもはC/C++とFortranしか書かれないこのページ、今回はD言語の変更点も沢山書かれていますよ! しかし、やっぱりAdaの変更点は書かれていないです。 変更点の調べ方 -------------- :doc:`gcc 10の時 `\ と同じです。 また、私が見つけた変更点も同じく https://github.com/ytomino/drake/wiki/GCC-Versions に都度メモしております。 特筆すべき変更点 ---------------- Ada 202x対応 ++++++++++++ Ada 202x対応は順調に進んでいるようです。 ただし、まだ実装の途中であったり、最新のドラフトとは違う形で実装されていたりしますので本格的に使うのは避けたほうが良いでしょう。 目立つところでは ``'Put_Image`` 属性に使われるバッファーの型が ``Ada.Strings.Text_Output.Sink'Class`` になっていたりします。 https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/ada/libgnat/a-stteou.ads;h=9eaf98a820cc34205e1b8565a1e17ce59e24677f `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ビットまで使えるようになっているようです。 .. _`AI12-0020-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0020-1.txt .. _`AI12-0340-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0340-1.txt