HN 日本語サマリー

← 一覧へ戻る
プログラミング

Zig v0.17.0 リリースノート

Zig v0.17.0 (ziglang.org)

255 pointsby ErenayDev182 コメント

要約

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ソースコードを生成できます。 サポートテーブル § 以下のテーブルでは、✅は完全なサポート、❌はサポートなし、⚠️は部分的なサポート(例:一部のサブターゲットのみ、またはいくつかの顕著な既知の問題あり)を示しています。