gcc 12の変更点

gcc 12がリリースされました。 な、なんとですね。 今回は Changes, New Features, and Fixes がまともに書かれています!

Fernando Oleo Blancoさんという方が見かねてコントリビュートしてくださったみたいです[*]

というわけで変更点を調べる必要はありません。 やったー!

特筆すべき変更点

gnatfindとgnatxrefが無くなりました

これは痛い。

gnatfindとgnatxrefはgccでAdaのソースコードをコンパイルすると.oと一緒にできる.aliファイルを用いるクロスリファレンスツールでシンボルの宣言箇所や使用箇所を検索することができました。

代わりに最近流行りのlanguage serverを使え、とのことです。 GNAT Community Edition に含まれるGNAT Studio(gps)というIDEやVisual Studio Codeの拡張にコンパイル済みのものが同梱されています。

language serverは設定が結構手間ですしエディタから使うのは楽ですがクエリをJSONで渡す必要もありターミナルから使うことが難しいのですよね……。 しかも.gprファイルを用意しないといけなくなりましたし……独自の初期化を必要としますのでLSP対応済みのBBEditやQt Creatorから使うのも難がありますし……。

Ada 2022対応

Ada 2022対応は順調に進んでいるようです。

Static アスペクトが実装されましたのでコンパイル時プログラミングはじまりました。

gcc 11では独自の Ada.Strings.Text_Output.Sink'Class を使う形で実装されていた 'Put_Image 属性が規格通り Ada.Strings.Text_Buffers.Root_Buffer_Type'Class を使うようになっていました。

独自拡張

今回はGNAT独自の言語拡張も沢山追加されています。

無制約配列(unconstrained array)の下限だけを固定したり(D言語の動的配列っぽくなります)、case 文が関数型言語のパターンマッチよろしく複合型の分解や部分的な束縛ができるようになったり、Ada 2022では見送られたGeneralize prefix viewsがあっさり実装されてしまってたり、委員会が苦心して詰めてこられたAccessibility_Checkのルールを変えてみたり……。

やりたい放題です。

これら拡張の詳細はAdaCore社のブログで説明されています。

以前のgccの変更点