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社のブログで説明されています。