202301 | 包管理来了

0.10.1 版本发布

一个小版本,主要是 bugfix。最主要的功能是:Package Manager MVP,Zig 终于开始支持包管理了! 不过才刚刚开始,有一个面板来跟踪相关 issue 进度。使用的配置文件是 build.zig.ini ,格式如下:

[package]
name=libffmpeg
version=5.1.2

[dependency]
name=libz
url=https://github.com/andrewrk/libz/archive/f0e53cc2391741034b144a2c2076ed8a9937b29b.tar.gz
hash=c9b30cffc40999d2c078ff350cbcee642970a224fe123c756d0892f876cf1aae

[dependency]
name=libmp3lame
url=https://github.com/andrewrk/libmp3lame/archive/497568e670bfeb14ab6ef47fb6459a2251358e43.tar.gz
hash=9ba4f49895b174a3f918d489238acbc146bd393575062b2e3be33488b688e36f

build.zig 引用方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const std = @import("std");

pub fn build(b: *std.build.Builder) void {
    const target = b.standardTargetOptions(.{});
    const mode = b.standardReleaseOptions();

    const libz_dep = b.dependency("libz", .{});
    const libmp3lame_dep = b.dependency("libmp3lame", .{});

    const lib = b.addStaticLibrary("ffmpeg", null);
    lib.setTarget(target);
    lib.setBuildMode(mode);
    lib.linkLibrary(libz_dep.artifact("z"));
    lib.linkLibrary(libmp3lame_dep.artifact("mp3lame"));
    lib.linkLibC();
    lib.addIncludePath(".");
    lib.install();
}

其他关注点:

  • LLVM 升级到 15.0.7
  • 是 0.10.x 的最后一个 release 版本

观点/教程

Code study: interface idioms/patterns in zig standard libraries
由于 Zig 目前还不支持接口抽空,本文介绍了标准库中来实现类似功能的五种方式
A Zig Diary
作者分享了对 Zig 的使用体验
Why Accounting Needs Its Own Database with Joran Greef of Tiger Beetle
播客分享
Crossplatform JNI builds with Zig
又一个使用 Zig 作为交叉编译的例子

项目/工具

Introducing ⚡zap⚡ - blazingly fast backends in zig
Zap 是 Zig 对 facil.io - The C Web Application Framework 的封装,本文算是对它的宣传。
Indexing every Zig for great justice
本文介绍了另一种语言服务器协议(LSP):SCIP,并用 zig 实现。项目处于早期阶段。
dantecatalfamo/zig-git
Implementing git structures and functions in zig
axiomhq/zig-hyperloglog
Zig library for HyperLogLog estimation
This Week In Zig
一个介绍 Zig 的周刊,主要是 master 分支上的改动