プログラミング
Zig v0.17.0 リリースノート
要約
Zig v0.17.0がリリースされました。このバージョンでは、ビルドシステムの大幅な改修、ビルドサーバープロトコルの導入、ELFリンカーの強化が含まれています。また、多数のターゲットサポートの追加や改善、言語仕様の変更、標準ライブラリの更新など、5ヶ月にわたる206名のコントリビューターによる変更が反映されています。
全文翻訳
0.17.0 リリースノート
ダウンロードとドキュメント
Zigは、堅牢で最適化され、再利用可能なソフトウェアを保守するための汎用プログラミング言語およびツールチェーンです。
Zigの開発は、501(c)(3)非営利団体であるZig Software Foundationからの資金提供を受けています。ロードマップの1.0への到達を加速するために、継続的な寄付をご検討ください。領収書が必要な場合や、GitHub Sponsorsからの移行を検討している場合は、Every.org経由での寄付をお勧めします。
このリリースは5ヶ月間の作業を特徴としており、925のコミットにわたる206名の異なるコントリビューターからの変更が含まれています。
当初は短くなると予測されていましたが、このリリースサイクルは実質的なものとなり、ビルドシステムは再構築され、ビルドサーバープロトコルが導入されました。また、ELFリンカーは、x86_64-linuxでインクリメンタルコンパイルがすべての人に機能するようになるレベルまで強化されました。
目次
§ 目次
ターゲットサポート
ティアシステム
ティア1
ティア2
ティア3
ティア4
サポートテーブル
OSバージョン要件
追加プラットフォーム
言語変更
言語の安定性進捗
@bitCastの変更
正式に仕様化され、ファズテストされた文法
Cへの変換
外部パッケージへの移行
@backingIntおよび@fromBackingIntの追加
@SpirvTypeの追加
配列乗算構文の削除
@divCeilの追加
comptime長のスライスに対してのみtrueを返す@hasDecl
void{}構文の削除
errdeferキャプチャの削除
i0の削除
内部およびlink_onceグローバルリンケージの削除
標準ライブラリの非推奨
StackFallbackAllocatorの再構築
SafeAllocatorの導入
ArrayList
ArrayList Pointerの安定性
debug.SafetyLockが共有ロックのサポートを獲得
fmt.allocPrintがmem.Allocatorに移動
フォーマット済み印刷の強化
std.zon.parseの再構築
bit_setのバリアント名の変更と管理対象の非推奨
std.lang.Typeの構造体配列スタイル
lang.OptimizeModeをlang.Optimizeに改名
lang.Optimize.runtimeSafety
@import("builtin")の非推奨
mem.eqlおよびmem.findDiffでの浮動小数点数の正しい処理
Uriとnet.HostNameの分離
ビルドシステム
MakerプロセスとConfigurerプロセスの分離
キャッシュシステム
Configure Cache Poisoningの概念導入
findProgram
findProgramLazy
Run Step: Passthru Args
Fmt Step: Options
Step.Options: add
addOptionPathDirectory
Lazy Dependency
エルゴノミクス強化
ビルドランナーをオーバーライドする機能の削除
パッケージ管理
パッケージパスをオーバーライドする機能
グローバルとローカルのフェッチ
DLL引数のPATHにおけるわずかな違い
ビルドサーバープロトコル
コンパイラ
インクリメンタルコンパイル
SPIR-Vバックエンド
aarch64バックエンド
loongarchバックエンド
WebAssemblyバックエンド
リンカー
ELF
COFF
新しいリンカー
テストフレームワーク
SPIR-Vファズテスター
バグ修正
このリリースに含まれるバグ
注目すべきリグレッション
ツールチェーン
LLVM 22
リグレッションを回避するためのループベクトル化の無効化
musl 1.2.5
glibc 2.44
Linux 7.2ヘッダー
macOS 27.0ヘッダー
MinGW-w64
NetBSD 11.0 libc
OpenBSD 7.9 libc
WASI libc
zig libc
zig cc
zig objdump
resinator
Windowsリソースコンパイル
外部パッケージへの移行
zig fmt
--complexityフラグの追加
ロードマップ
貢献者への感謝!
スポンサーへの感謝!
ターゲットサポート
§ Zigは幅広いアーキテクチャとオペレーティングシステムをサポートしています。サポートテーブルと追加プラットフォームのセクションは、Zigがプログラムをビルドできるターゲットをカバーしており、zig-bootstrap READMEはZigコンパイラ自体が簡単にクロスコンパイルできるターゲットをカバーしています。
注目すべき変更点:
aarch64-openbsdがZigのCIでネイティブにテストされるようになり、今後の高品質なサポートが保証されます。aarch64-freebsdおよびaarch64-netbsdのCIジョブは、masterプッシュに加えてプルリクエストでも実行されるようになりました。aarch64-windowsバイナリのほとんど(Zigコンパイラを含む)を破損させていたLLVMのバグが回避されました。Zigコンパイラは、aarch64-openbsdをターゲットとする際に必須のコード強化技術を適用するようになり、生成されたバイナリが実際に機能するようになりました。Zigは、32ビットARMでクラッシュやアサーション失敗時にスタックトレースを提供するようになりました。Thumbのみのターゲットにはまだ作業が必要です。Zigは、SPARCでクラッシュやアサーション失敗時にスタックトレースを提供するようになりました。Zigは、AArch64でのスタックアンワインディング時にポインタ認証オペコードを処理するようになりました。loongarch32-linux-gnu[sf]ターゲットのサポートが追加されました。Zigは、特にsparc64-linuxにおいて、64ビットSPARCの一般的に使用可能なサポートを持つようになりました。これは、LLDよりもこのターゲットのサポートが優れている新しいELFリンカーのおかげです。Zig標準ライブラリは、x86-64上のx32およびN32 ABI、および64ビットMIPS上でポートされました。これらは、64ビット命令セットを使用しながら32ビットポインタのみを持つニッチなILP32 ABIであり、アドレス空間の利用可能性をメモリ使用量の削減とキャッシュ利用率の向上と引き換えるという考え方です。一部のゲームコンソール用のターゲット情報が追加されました:aarch64-switch、arm-gba、mipsel-psx、powerpc-wiiu。xtensa-linuxの非常に初期のサポートがZigに追加されました。現時点では、このサポートはCバックエンドまたは実験的なLLVMバックエンドを通じてのみ利用可能であることに注意してください。Zig標準ライブラリは、Cバックエンドを使用する場合、arc[eb]-linux、csky-linux、m88k-openbsdのサポートを持つようになりました。Zig標準ライブラリは、no-libc microblaze[el]-linux、sh[eb]-linux、sparc-linuxのサポートを持つようになりました。Zigは、すべてのPowerPCターゲットで-mabi=ieeelongdoubleを強制するようになりました。これはすでに現実であったことの形式化にすぎません。ZigはIBMの「double-double」フォーマットのlong doubleをサポートしたことはなく、おそらく今後もサポートしません。その結果、このリリースではpowerpc-linux-gnueabi[hf]のサポートが削除されました。glibcはこれらのターゲットでは「double-double」フォーマットのみをサポートしています。powerpc-linux-musleabi[hf]ターゲットは、IEEEフォーマットを使用するため、引き続きサポートされます。このリリースではpowerpc64-linux-gnuのサポートが削除されました。Zigは64ビットPowerPCに対してELFv2バイナリのリンクのみをサポートしており、glibcはビッグエンディアンでのELFv2を公式にはサポートしていません(前述のIEEE long doubleも同様です)。ZigのネイティブCPUモデルと機能を検出する能力は、全体的に大幅に強化されました。これは、サポートされているOS上のほぼすべてのアーキテクチャに影響します。一部のターゲットのベースラインCPUモデルが変更されました:aarch64-haiku: cortex_a55、m68k-*: M68030、mips64-openbsd: octeon、powerpc-netbsd: 750、powerpc64-freebsd: pwr8、powerpc64-linux: pwr8、powerpc64-openbsd: pwr9、s390x-*: arch11、sparc-*: generic、sparc-linux: v9、sparc64-*: ultrasparc、xtensa-*: esp32。Zigのターゲットクエリ構文では、ネイティブlibcを使用するトリプル(つまりABIコンポーネントが省略されている場合)の場合にのみ、ネイティブlibcバージョンの検出が行われるようになりました。この新しい動作は、特にOSコンポーネントの動作を考慮した場合、ターゲットクエリがどのように機能するかについてのユーザーのメンタルモデルにより良く一致すると予想されます。
ティアシステム
§ Zigのさまざまなターゲットに対するサポートレベルは、広く4つのティアに分類されており、ティア1が最高レベルです。ティア1ターゲットの目標は、無効なテストをゼロにすることです。これは1.0.0以降のZigリリースで必須となるでしょう。
ティア1
§ すべての非実験的な言語機能が正しく機能することが確認されています。コンパイラは、LLVMに依存せずにこのターゲットのマシンコードを生成できます。統合ファズテスターはこのターゲットで機能します(該当する場合)。
ティア2
§ 標準ライブラリのクロスプラットフォーム抽象化には、このターゲットの実装があります。アサーションの失敗やクラッシュは、このターゲットでスタックトレースを生成します。libcは、クロスコンパイル時でも(該当する場合)このターゲットで利用可能です。継続的インテグレーションマシンは、すべてのプッシュでこのターゲットのモジュールテストをビルドします。
ティア3
§ コンパイラは、LLVMのような外部バックエンドに依存して、このターゲットのマシンコードを生成できます。リンカーは、このターゲットのオブジェクトファイル、ライブラリ、および実行ファイルを生成できます。
ティア4
§ コンパイラは、このターゲットのアセンブリまたはCソースコードを生成できます。
サポートテーブル
§ 以下のテーブルでは、✅は完全なサポート、❌はサポートなし、⚠️は部分的なサポート(例:一部のサブターゲットのみ、またはいくつかの顕著な既知の問題あり)を示しています。