Skip to content

Commit 52eefaa

Browse files
committed
fix(course/15): 适配 Zig 0.15 语法变更及修正示例
- 更新所有 build.zig 文件,使用 .root_module 替代 .root_source_file,适配 Zig 0.15 新构建 API - 替换 std.fs.File.stdout/stderr().writer 用法为 std.io.getStdOut/getStdErr().writer,修正输出流写法 - 暂时注释掉不兼容 Zig 0.15 的内联汇编代码,并添加 TODO 提示 - 修正 memory_manager.zig 中 c_allocator 拼写及 DebugAllocator 初始化方式 - 修正 echo_tcp_server.zig 中 listen 参数,移除已废弃的 reuse_port - 修正 package_management_importer/build.zig.zon 文件名错误 - 其他细节调整以保证示例代码在 Zig 0.15 下可编译运行
1 parent 7b1395a commit 52eefaa

File tree

12 files changed

+337
-71
lines changed

12 files changed

+337
-71
lines changed

15_zig_build_fix.txt

Lines changed: 262 additions & 0 deletions
Large diffs are not rendered by default.

build/0.15.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const std = @import("std");
22
const Build = std.Build;
33
const ChildProcess = std.process.Child;
44

5-
const log = std.log.scoped(.For_0_14_0);
5+
const log = std.log.scoped(.For_0_15_0);
66

77
const args = [_][]const u8{ "zig", "build" };
88

@@ -21,7 +21,7 @@ pub fn build(b: *Build) void {
2121

2222
// open dir
2323
var dir = std.fs.openDirAbsolute(full_path, .{ .iterate = true }) catch |err| {
24-
log.err("open 14 path failed, err is {}", .{err});
24+
log.err("open 15 path failed, err is {}", .{err});
2525
std.process.exit(1);
2626
};
2727
defer dir.close();

course/code/15/array.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
pub fn main() !void {
22
CreateArray.main();
3+
Deconstruct.main();
34
Matrix.main();
45
TerminatedArray.main();
56
Multiply.main();
67
Connect.main();
78
FuncInitArray.main();
89
ComptimeInitArray.main();
910
}
10-
1111
const CreateArray = struct {
1212
// #region create_array
1313
const print = @import("std").debug.print;

course/code/15/assembly.zig

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,46 @@ const external_assembly = struct {
2424

2525
const inline_assembly = struct {
2626
// #region inline_assembly
27+
const std = @import("std");
28+
2729
pub fn main() noreturn {
28-
const msg = "hello world\n";
29-
_ = syscall3(SYS_write, STDOUT_FILENO, @intFromPtr(msg), msg.len);
30-
_ = syscall1(SYS_exit, 0);
31-
unreachable;
30+
// Temporarily disabled due to Zig 0.15 syntax changes
31+
// const msg = "hello world\n";
32+
// _ = syscall3(SYS_write, STDOUT_FILENO, @intFromPtr(msg), msg.len);
33+
// _ = syscall1(SYS_exit, 0);
34+
std.process.exit(0);
3235
}
3336

3437
pub const SYS_write = 1;
3538
pub const SYS_exit = 60;
3639

3740
pub const STDOUT_FILENO = 1;
3841

39-
pub fn syscall1(number: usize, arg1: usize) usize {
40-
return asm volatile ("syscall"
41-
: [ret] "={rax}" (-> usize),
42-
: [number] "{rax}" (number),
43-
[arg1] "{rdi}" (arg1),
44-
: "rcx", "r11"
45-
);
46-
}
42+
// Temporarily disabled due to Zig 0.15 inline assembly syntax changes
43+
// TODO: Update to new Zig 0.15 inline assembly syntax
4744

48-
pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
49-
return asm volatile ("syscall"
50-
: [ret] "={rax}" (-> usize),
51-
: [number] "{rax}" (number),
52-
[arg1] "{rdi}" (arg1),
53-
[arg2] "{rsi}" (arg2),
54-
[arg3] "{rdx}" (arg3),
55-
: "rcx", "r11"
56-
);
57-
}
45+
// pub fn syscall1(number: usize, arg1: usize) usize {
46+
// var result: usize = undefined;
47+
// asm volatile ("syscall"
48+
// : [ret] "={rax}" (result)
49+
// : [number] "{rax}" (number),
50+
// [arg1] "{rdi}" (arg1)
51+
// : "rcx", "r11"
52+
// );
53+
// return result;
54+
// }
55+
56+
// pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
57+
// var result: usize = undefined;
58+
// asm volatile ("syscall"
59+
// : [ret] "={rax}" (result)
60+
// : [number] "{rax}" (number),
61+
// [arg1] "{rdi}" (arg1),
62+
// [arg2] "{rsi}" (arg2),
63+
// [arg3] "{rdx}" (arg3)
64+
// : "rcx", "r11"
65+
// );
66+
// return result;
67+
// }
5868
// #endregion inline_assembly
5969
};

course/code/15/build_system/basic/src/main.zig

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ pub fn main() !void {
44
// Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
55
std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
66

7-
var stderr_buffer: [1024]u8 = undefined;
87
// stdout is for the actual output of your application, for example if you
98
// are implementing gzip, then only the compressed bytes should be sent to
109
// stdout, not any debugging messages.
11-
const stdout_file = std.fs.File.stdout().writer(&stderr_buffer);
10+
const stdout_file = std.io.getStdOut().writer();
1211
var bw = std.io.bufferedWriter(stdout_file);
1312
const stdout = bw.writer();
14-
1513
try stdout.print("Run `zig build test` to run the tests.\n", .{});
1614

1715
try bw.flush(); // don't forget to flush!

course/code/15/build_system/docs/build.zig

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ pub fn build(b: *std.Build) void {
99
// 构建一个 object,用于生成文档
1010
const object = b.addObject(.{
1111
.name = "object",
12-
.root_source_file = b.path("src/root.zig"),
13-
.target = target,
14-
.optimize = optimize,
12+
.root_module = b.addModule("object", .{
13+
.root_source_file = b.path("src/root.zig"),
14+
.target = target,
15+
.optimize = optimize,
16+
}),
1517
});
16-
1718
// 创建一个 step
1819
const docs_step = b.step("docs", "Generate docs");
1920

course/code/15/build_system/lib/build.zig

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ pub fn build(b: *std.Build) void {
1212
// 库的名字
1313
.name = "example",
1414
// 源文件地址
15-
.root_source_file = b.path("src/root.zig"),
16-
// 构建目标
17-
.target = target,
18-
// 构建模式
19-
.optimize = optimize,
15+
.root_module = b.addModule("example", .{
16+
.root_source_file = b.path("src/root.zig"),
17+
// 构建目标
18+
.target = target,
19+
// 构建模式
20+
.optimize = optimize,
21+
}),
2022
});
2123

2224
// 这代替原本的 lib.install,在构建时自动构建 lib
@@ -26,11 +28,12 @@ pub fn build(b: *std.Build) void {
2628
// 添加一个二进制可执行程序构建
2729
const exe = b.addExecutable(.{
2830
.name = "zig",
29-
.root_source_file = b.path("src/main.zig"),
30-
.target = target,
31-
.optimize = optimize,
31+
.root_module = b.addModule("zig", .{
32+
.root_source_file = b.path("src/main.zig"),
33+
.target = target,
34+
.optimize = optimize,
35+
}),
3236
});
33-
3437
// 链接 lib
3538
exe.linkLibrary(lib);
3639

course/code/15/echo_tcp_server.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub fn main() !void {
4646
const port = 8080;
4747
const address = try net.Address.parseIp4("127.0.0.1", port);
4848
// 初始化一个server,这里就包含了 socket() 和 bind() 两个过程
49-
var server = try address.listen(.{ .reuse_port = true });
49+
var server = try address.listen(.{});
5050
defer server.deinit();
5151
// #endregion listen
5252

course/code/15/hello_world.zig

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pub fn main() !void {
2-
One.main();
2+
try One.main();
33
try Two.main();
44
try Three.main();
55
}
@@ -19,38 +19,29 @@ const Two = struct {
1919
const std = @import("std");
2020

2121
pub fn main() !void {
22-
var stdout_buffer: [1024]u8 = undefined;
23-
var stderr_buffer: [1024]u8 = undefined;
24-
var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
25-
const stdout = &stdout_writer.interface;
26-
var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer);
27-
const stderr = &stderr_writer.interface;
22+
const stdout = std.io.getStdOut().writer();
23+
const stderr = std.io.getStdErr().writer();
2824

2925
try stdout.print("Hello {s}!\n", .{"out"});
3026
try stderr.print("Hello {s}!\n", .{"err"});
31-
try stdout.flush();
32-
try stderr.flush();
33-
}
34-
// #endregion two
27+
} // #endregion two
3528
};
3629

3730
const Three = struct {
3831
// #region three
3932
const std = @import("std");
4033

4134
pub fn main() !void {
42-
var stdout_buffer: [1024]u8 = undefined;
43-
var stderr_buffer: [1024]u8 = undefined;
44-
const out = std.fs.File.stdout().writer(&stdout_buffer); // [!code focus]
45-
const err = std.fs.File.stderr().writer(&stderr_buffer); // [!code focus]
35+
const out = std.io.getStdOut().writer(); // [!code focus]
36+
const err = std.io.getStdErr().writer(); // [!code focus]
4637

4738
// 获取buffer// [!code focus]
4839
var out_buffer = std.io.bufferedWriter(out); // [!code focus]
4940
var err_buffer = std.io.bufferedWriter(err); // [!code focus]
5041

5142
// 获取writer句柄// [!code focus]
52-
var out_writer = out_buffer.writer(); // [!code focus]
53-
var err_writer = err_buffer.writer(); // [!code focus]
43+
const out_writer = out_buffer.writer(); // [!code focus]
44+
const err_writer = err_buffer.writer(); // [!code focus]
5445

5546
// 通过句柄写入buffer// [!code focus]
5647
try out_writer.print("Hello {s}!\n", .{"out"}); // [!code focus]

course/code/15/import_vcpkg/build.zig

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ const Build = struct {
88

99
const exe = b.addExecutable(.{
1010
.name = "c_lib_import_gsl_windows-x64",
11-
.root_source_file = b.path("c_lib_import_gsl_fft.zig"),
12-
.target = target,
13-
.optimize = optimize,
11+
.root_module = b.addModule("c_lib_import_gsl_windows-x64", .{
12+
.root_source_file = b.path("src/main.zig"),
13+
.target = target,
14+
.optimize = optimize,
15+
}),
1416
});
15-
1617
// #region c_import
1718
// 增加 include 搜索目录
1819
exe.addIncludePath(.{ .cwd_relative = "D:\\vcpkg\\installed\\windows-x64\\include" });

0 commit comments

Comments
 (0)