Zig:配列リストのポインタ安定性

2026/08/30 23:41

Zig:配列リストのポインタ安定性

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

2026 年における Zig の進化は、アーキテクチャの再設計、メモリ安全性の向上、およびパフォーマンス最適化に駆動される画期的な転換を示しています。主要な突破は 2026 年 5 月~6 月に起こり、ビルドシステムが特殊化した

configurer
maker
プロセスに分割されました。このシリアライズされたビルドロジックにより、
zig build
の実行時間は約 90% 削減され、バイナリサイズは約 4% 減少しました。同時に、LLVM バックエンドへの統合により高速な増分コンパイルが実現可能となり(数ミリ秒対数秒)、新しい ELF リンカーによって Zig + LLVM + LLD プロジェクトの結合をサポートするようになりました。

安全性の改善も同等に重大でした。2026 年 8 月には、

std.ArrayList
lockPointers()
unlockPointers()
のコールが追加され、リスト操作中の不整合ポインタなどのメモリ安全性違反を防止できるようになりました。さらに、論理的なビットレイアウトに基づいた新しい
@bitCast
セマンティクスによってエンドアンアグノスティックなキャストが可能となり、「Pointer Stability Locks」という機能も導入されました。

パフォーマンスと機能の拡大には、適切な整数ローディング化による LLVM バックエンド効率の約 5% の向上、SPIR-V バックエンドでのパッセージ行為テスト合格率の 10% の増加(現在はマルチスレッドコード生成および spv オブジェクトファイル結合をサポート)が含まれます。また、io_uring および Grand Central Dispatch 向けの実験的な I/O ストラテジーである

std.Io.Evented
などが含まれます。今後の作業には、動的配列に対する普遍的な安全性保証の最終化、ならびにサードパーティライブラリ向けの高度な I/O ストラテジーの完全な統合が含まれますが、一部の側面はまだ調査中です。

本文

Zig メインブランチ 2026 年最新変更まとめ

このページは、Zig メインブランチへの 2026 年の修正内容が精選された一覧です。他の年は Devlog Archive ページ を参照してください。


2026 年 8 月:メモリ安全性とパッケージ管理の進化

8 月 27 日:ArrayList のポインタ安定化機能実装

  • 執筆者: ロビー・ライマン (Robbie Lyman)
  • 背景: 2024 年に
    std
    のハッシュマップコンテナに追加された「ポインタ安定化ロック」機能を、リオ・エマー=カル氏により提出された PR が
    _ArrayList_
    に移植されました。
  • 機能概要:
    • メモリ安全性を保証する技術です。
    • 利用手順:
      1. ArrayList が管理する要素またはスライスのポインタを初めて格納する際に、
        lockPointers()
        を呼び出します。
      2. そのポインタが不要になったタイミングで、
        unlockPointers()
        を呼び出します。

6 月 30 日:パッケージ管理機能のコンパイラからビルドシステムへ移行

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
  • 理由: ユーザーの
    build.zig
    スクリプトとビルドシステムのプロセスを分離する観点から、パッケージ管理ロジックをビルドシステム内に再配置しました。
  • 移行されたサブコマンド:
    • zig build
    • zig fetch
    • zig init
    • zig libc
  • ソースコード形式への移行: 以前コンパイラ実行ファイルに含まれていた機能が多く、現在ではソースコードとして配送されています。
    • パッケージ取得ロジック
    • HTTP クライアントおよびネットワーク機能
    • TLS(トランスポート層セキュリティ)および暗号化処理
    • Git プロトコル
    • build.zig.zon
      解析機能(xz, gzip, zstd, flate, zip など)
  • セキュリティ強化:
    • パッケージ管理時、安全性チェックが有効化されます(メーカー実行ファイルが ReleaseSafe モードでコンパイルされているため)。
    • 暗号化処理において、ホスト機器の特別 CPU インストラクションを活用できるようになりました。

2026 年 6 月:コンパイラバックエンドと型システム

6 月 26 日:SPIR-V バックエンドの修復と拡張

  • 執筆者: アリ・チェラヒ (Ali Cheraghi)
  • 改善点: 劣化していた SPIR-V バックエンドを数週間で再構築しました。
    • @SpirvType の導入: Zig の型システムで表現できないタイプの問題に対応(Issue #20550, #23326, #35461)。
    • コール規約上の実行モード: インラインアセンブリではなく、コール規約によって保持されるようになりました。メッシュシェーディング用に
      spirv_task
      および
      spirv_mesh
      が追加されました。
    • CPU 機能制御: Capabilities と Extensions が、他ターゲットと同様に CPU の機能セットで完全に制御されます(外部ベンダーは暫定的に除外)。
    • マルチスレッドコード生成: コード生成ジョブが Mir 値を生成し、コンパイラのスレッドプールでスケジュールされるようになりました。
      dedup_types
      および
      prune_unused
      の ISel パスが復活しました。
    • オブジェクトファイルリンク:
      .spv
      ファイルがオブジェクトファイルとして認識され、複数の
      .zig
      または外部
      .spv
      を単一のモジュールに結合できるようになりました。

6 月 25 日:@bitCast のセマンティクス変更と LLVM バックエンド改良

  • 執筆者: マシュー・ラグ (Matthew Lugg)
  • LLVM 整数型低下処理:
    • メモリ格納時に任意のビット幅の整数型を、ABI サイズの型へ低下させます(Clang の C
      _BitInt(N)
      と動作一致)。
  • @bitCast の再定義:
    • バイト解釈書き換えではなく、論理的ビットに基づいた実装に改めました。
    • エンディアン非依存動作が可能になります。
    • サポート例:
      [2]u3
      @Vector(3, u2)
      の変換。
    • 制限/許可: ポインタベクトルへの転送は禁止、enum に対する転送は許可。
  • パフォーマンス向上: 見逃されていた最適化が回復し、コンパイラ自体のパフォーマンスが約 5% 向上

6 月 24 日:LLVM による増分コンパイル実装

  • 執筆者: マシュー・ラグ (Matthew Lugg)
  • 概要: LLVM コード生成バックエンドへの改善に加え、増分コンパイルサポートを実装しました。
    • 「LLVM Emit Object」の加速には寄与しませんが、Zig コンパイラコード内の消費時間を最小限に抑えます。
    • master ブランチおよび 0.16.0 リリースに含まれています

2026 年 5 月:リンカーとビルドシステムの大規模改組

5 月 30 日:新しい ELF リンカーの採用

  • 執筆者: マシュー・ラグ (Matthew Lugg)
  • 概要: Zig 0.16.0 でデビューした新しい ELF リンカーにより大きな進展を遂げました。
    • 自己ホスト化: LLVM と LLD ライブラリを有効化し、自己ホスト化されたコンパイラの構築が可能に。
    • 高速増分コンパイル: x86_64 Linux 上で外部ライブラリおよび C ソースをリンクしながらも、追加パフォーマンスオーバーヘッドなしで増分再構築可能

5 月 26 日:ビルドシステムの改組(Maker/Configurer セパレーション)

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
  • 概要: メーカー(maker)プロセスと設定器(configurer)プロセスを分離する大規模ブランチがマージされました。
    • build.zig
      ロジックは小型のデバッグモードプロセス「設定器」でコンパイルされます。
    • 親プロセスである
      zig build
      は、ビルドグラフ実行プロセス「メーカー」をリリースモード(非同期)で実行します。
  • 動機:
    • ユーザーロジック変更時のみコンパイルするため、
      zig build
      が大幅に高速化
    • 変化がない場合、ビルドシステムは
      build.zig
      の再実行をスキップできます。
    • グラフ実行器は最適化付きでコンパイルできるようになります。
  • 互換性のない変更:
    • run_cmd.addArgs(args)
      run_cmd.addPassthruArgs()
      に置き換えられました。
    • ビルドスクリプトが特定の引数を観測する能力は削除されました。

2026 年 4 月:型解決の再設計

4 月 8 日(および随時):型解決ロジックの大規模再構築

  • 執筆者: マシュー・ラグ (Matthew Lugg)
  • 概要: 大規模な PR(約 30,000 ライン)により、内部型解決ロジックが再構築されました。
    • 楽観的な解析: 型が初期化されない場合、Zig はそのフィールドを分析しません。これにより型は名前空間として機能しつつ、不要なコードを避けて動作します。
    • 依存ループの改善: エラーメッセージがループ存在場所の正確な詳細情報を示すように強化されました。
    • 増分コンパイル: 多数の既知バグ(特に「過剰解析」)が修正され、増分コンパイルが著しく高速化

2026 年 2 月:I/O、パッケージ管理と OS API の最適化

2 月 13 日:io_uring と Grand Central Dispatch の std.Io 実装マージ

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
  • 概要:
    std.Io.Evented
    向けの
    io_uring
    および Grand Central Dispatch 実装がマージされました。
    • ユーザースペーススタックスイッチング(ファイバー)に基づいています。
    • 注意: 現状は実験的なものです。
    • 改善事項: より良いエラーハンドリング、ログ出力の削減、パフォーマンス診断機能の追加、欠落機能の実装、テストカバレッジの増加など。

2 月 6 日:パッケージ管理ワークフローの改良

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
    • 1. ローカルストレージ: 取得されたパッケージはプロジェクトルートディレクトリの
      zig-pkg
      build.zig
      の隣)にローカル保存されます。
      • 自己完結型ソースタールの配布が可能に。
      • .zig-cache
        外の依存関係変更が容易になり、圧縮ファイルのグローバルキャッシュも維持。
    • 2. --fork フラグ:
      --fork=[パス]
      フラグにより、依存ツリー全体で特定のソースチェックアウトと一致するパッケージを上書きできます。
      • 再ビルドなしでフォークされた依存関係の反復テストが可能。
      • 永続的に
        build.zig.zon
        を変更せずに済みます。

2 月 3 日:Win32 API からの脱却(Kernel32.dll バイパス)

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
  • ポリシー: Win32 API よりもネイティブ API を優先
    • エントロピーの増加:
      advapi32.dll
      から直接
      SystemFunction036
      を使用し、
      kernel32.dll
      ウラッパーの不具合(ヘッパ配列、失敗モード、肥大化)を回避。
    • ファイル I/O の効率化: 直接
      NtReadFile
      および
      NtWriteFile
      を使用し、より優れたエラー報告と、
      OVERLAPPED
      フィクスタイプのオーバーヘッドを回避。

1 月 31 日:zig libc と C ソースファイルの削減

  • 執筆者: アンドリュー・ケリー (Andrew Kelley)
  • 概要: C ソースファイル(バインド)ではなく、Zig 標準ライブラリラッパーとして
    libc
    関数を提供し、冗長なコードを段階的に削除しています。
    • 削減成果: 約 250 の C ソースファイルを削除済み(残存 2,032 ファイル)。
    • 共有機能: 他の Zig コードや ZCU を共有可能に。冗長コード排除、フロントエンドレベルのリンク時間最適化(LTO)を可能に。
    • I/O 制御:
      std.Io
      の変更と組み合わせることで、ユーザーが I/O 実行方法(例:すべての I/O を
      io_uring
      イベントループに参加させる強制)をシームレスに制御可能に。

同じ日のほかのニュース

一覧に戻る →

2026/08/30 2:49

おどろおどろしい虫たち

## Japanese Translation: Linux カーネルの公式サイトは、AI モデルの学習に使用する自動スクレーパーから多大な負荷をかけています。これらのボットはプロキシ SDK を利用し、数百万件の住宅 IP やモバイル IP を悪用しています。これらのボットは日間のトラフィックのおよそ 33% を消費し、利用可能な CPU コアを約半数(5 つの地理的に分散されたノードを通じて 90 のコアのうち 14〜16 コア)に占有しており、主にレポジトリをクローンするのではなく git コミットを HTML としてレンダリングすることによってこれを行っています。この手法はプロジェクトの著者が「スクレーパーがデータを使用する最も愚かな方法」と呼んでいます。Anubis がアクセス前に SHA256 パズルを要求しているにもかかわらず、ボットが低い難易度を解いた後に難易度がレベル 4 から 5 に引き上げられましたが、これはモバイルユーザーにとってデバイスを温めるという点で依然として不満を生み出しており、人間の行動を模倣する高度な戦術を完全に阻止していません。推定される正当な人間によるトラフィックはわずか約 2% です。スクレーパーは Linux カーネルの履歴が LLM の学習データの豊富な源泉であるためこれを標的としています。また、浅いクローンを使用している脆弱な CI システムは、さらなる即時的過負荷リスクをもたらします。緩和策としては特定の機能を無効化し、匿名ユーザーのアクションをゲートリングするなどの措置が講じられていますが、すべてのデータは引き続きダウンロード可能です。簡単な解決策はありません:新しい AI モデル企業は引き続き無料の学習データを求めており、アプリ開発者は家庭用デバイスを攻撃ベクトルに変え続けており、その結果、サイトはスクレーパーによる負荷から「背景放射線」のような状態に常時置かれています。

2026/08/31 5:00

宇宙のコア:1980年のスペースシャトル搭載のSpacelabコンピュータから復元されたコアメモリモジュール

## Japanese Translation: Spacelab は、スペースシャトルの貨物コンパートメントに搭載された再利用可能な欧州製実験室であり、標準的な IBM AP-101 システムではなく、フランス製 Mitra 125 MS ミニコンピュータを 3 台採用していた。これら 3 台のうち 1 台は実験室を、もう 1 台は実験を担当し、残りの 1 台が予備として機能した。各コンピュータのメモリシステムは 1980 年頃製作され、シリコンではなくフェライトリングを使用した磁性コアメモリを採用しており、「2½D」アーキテクチャにより抑制線を廃止するため、各ビットに独立した X ドライバ回路を設け、位相反転技術を用いることで垂直ドライバの数を半減させていた(U 字形の配線ループを使用)。メモリスタックは 7 ボードで構成され、ドライバボード、4 つのコアプレーンボード、第 2 のドライバボード、およびインターフェースボードからなっていた。各コアプレーンは 1024 本の垂直 Y ワイヤーと 288 本の水平 X ワイヤーで支えられ、16K の 18 ビット語(32 KB)を保持し、総計で 294,912 個のリチウムフェライトコアを有していた。ノイズキャンセレーションにはねじれペアセンスワイヤと「蝶結び」状のクロス構成が用いられ、ダイオードマトリクスはプリント基板間にコードウッド構造を採用しており、各ダイオードチップには 8 コアラインに対応する 16 個のダイオードが含まれていた。1991 年、IBM AP-101S のアップグレードにより、AP-101SL モディフィケーションを通じて磁性コアを半導体メモリに置き換えられながら、フェライトコアメモリが廃棄される直前まで Spacelab システムとの互換性を維持した。 ## Text to translate: Spacelab was a reusable European laboratory carried in the Space Shuttle's cargo bay that employed three French-built Mitra 125 MS minicomputers—rather than standard IBM AP-101 systems—with one managing the laboratory, one managing experiments, and one as a backup. Each computer's memory system, built around 1980, used magnetic core memory with ferrite rings (not silicon) in a "2½D" architecture that eliminated inhibit lines by using separate X driver circuitry for each bit; phase reversal techniques halved the number of vertical drivers via U-shaped wiring loops. The memory stack comprised seven boards: a driver board, four core plane boards, a second driver board, and an interface board. Each core plane held 16K of 18-bit words (32 KB) supported by 1024 vertical Y wires and 288 horizontal X wires, totaling 294,912 lithium ferrite cores. Noise cancellation was achieved through twisted pair sense wires and a "bow tie" crossing configuration, while diode matrices used cordwood construction between printed circuit boards (each diode chip containing 16 diodes for 8 core lines). In 1991, IBM AP-101S upgrades replaced the original magnetic cores with semiconductor memory via the AP-101SL modification, maintaining compatibility with the Spacelab system before ferrite core memory became obsolete.

2026/08/31 1:01

Haiku R1/beta6 がリリースされました

## Japanese Translation: 2026 年 8 月 26 日(水曜日)に、R1/beta6 のリリースをもって Haiku は創業 25 周年を迎えます。これは記念日から約 1 ヶ月後、そして前回から約 2 年後の発表です。この大きなアップデートは開発の一時停止を経て実現され、ユーザーに待ち望まれていた機能向上を提供します。ファンは提供されたダウンロードポータルを通じてすぐにアップグレードを行うか、詳細なリリースノートを確認するか、またはお問い合わせにはプレスコンタクトまでご連絡ください。この発売は Haiku の遺産を称えつつ、オープンソース OS が専用コミュニティと共に進化し続ける中、個々のユーザーならびにテクノロジー企業双方がアクセス可能な導入と継続的なフィードバックへと導く重要な瞬間を象徴します。

Zig:配列リストのポインタ安定性 | そっか~ニュース