Zig v0.13.0 リリース⚡

2024/06/08に公開

イントロ

Zig v0.13.0がリリースされたみたいです。めでたいですね!⚡⚡⚡

Zigといえば、アップデートのたびに破壊的変更がまだ入る言語です。今回はv0.12.0との違いに注目して、v0.13.0での変更点をかる〜くだけ見ていきましょう。

概要

  • リリース日: 2024.06.07
  • リリースノート
    • ちなみにZigのリリースノートはv0.12.0には破壊的変更やAPIの変更点については列挙されなくなりました。試してみるまで分からない、それがZigです。

変更点

基本的な変更点についてはリリースノートを参照してください。ここでは、v0.12.0からのマイグレーションの際に気をつける必要がある点や、個人的に気になった点だけをピックアップしています。

LazyPath.pathフィールドを削除

std.Build.LazyPath(ソース)から.pathフィールドが削除された模様です。LazyPathといえばソースファイルのパスを指定する際などに以下のように使うことが出来ていました:

# v0.12.0
dwarf_exe = b.addExecutable(.{
    .name = "out",
    .root_source_file = .{ .path = "src/main.zig" },
});

v0.13.0では素直にstd.Build.path()を使いましょう:

dwarf_exe = b.addExecutable(.{
    .name = "main",
    .root_source_file = b.path("src/main.zig"),
});

zig-cache.zig-cacheに改名

Zig v0.12.0までビルド生成物はビルドツリーのルートのzig-cacheに置かれてきました。これがv0.13.0からは.zig-cacheに置かれるようになります。ドットが付きました、可愛いですね。
皆様におかれましては、.gitignoreを更新するのをお忘れなきよう。

glibc 2.39のサポート

クロスコンパイルの際にglibc 2.39を使うことができるようになったらしいです。因みにZigはlibcをたくさん同包しています
というか、もうglibcって2.39なんですね...。ちょっと前に2.32か出たと思ってました。

std.debug.getStderrMutex()がdeprecatedに

std.debug.getStderrMutex()がdeprecatedになりました。その代わりに、std.debug.lockStdErr()のようにロックを取るためのメソッドが生えました。一手間消えて嬉しいですね:

# v0.12.0
std.debug.getStderrMutex().lock();

# v0.13.0
std.debug.lockStdErr()

LLVMが18に

LLVMが18.1.7になりました。
その影響なのかわからないけど、ELFヘッダに.relro_paddingというセクションヘッダが追加されていることに気が付きました。LLD18からこういうセクションが入るようになったとか、なっていないとか...。

アウトロ

正直(自分に関係する範囲で)そんなに大きな変更はないかな〜という感じです。破壊的変更も、このくらいは可愛いものですね。
他の変更点で何かこれは気をつけておけというものがあれば、教えてください。

それでは、しば犬を撫でようと思います。

GitHubで編集を提案

Discussion