From 6223dc0f83cb903ad259aacfb4eb2e4e50eab9b0 Mon Sep 17 00:00:00 2001 From: hippietrail Date: Sat, 25 May 2024 11:25:09 +0000 Subject: [PATCH 1/7] Verbs agree with the head of the noun phrase, not the closest noun MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the result...are passed→the result...is passed the number...vary→the number...varies --- exercises/099_formatting.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/099_formatting.zig b/exercises/099_formatting.zig index 1952c5e..4b64209 100644 --- a/exercises/099_formatting.zig +++ b/exercises/099_formatting.zig @@ -45,7 +45,7 @@ // output. Escape sequences can also be written one after the // other, e.g. "\n\n" will cause two line feeds. // -// By the way, the result of these escape sequences are passed +// By the way, the result of these escape sequences is passed // directly to the terminal program. Other than translating them // into control codes, escape sequences have nothing to do with // Zig. Zig knows nothing about "line feeds" or "tabs" or @@ -95,7 +95,7 @@ // ... // // Without string formatting, this would be a more challenging -// assignment because the number of digits in the numbers vary +// assignment because the number of digits in the numbers varies // from 1 to 3. But formatting can help us with that. // const std = @import("std"); From 984f4af3a154c6ebdf71b2c32f4f0b419f348124 Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Sat, 8 Jun 2024 19:07:20 +0200 Subject: [PATCH 2/7] New Zig version --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index edc300d..08c2138 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Verify the installation and build number of `zig` like so: ``` $ zig version -0.13.0-dev.xxxx+xxxxxxxxx +0.14.0-dev.xxxx+xxxxxxxxx ``` Clone this repository with Git: @@ -74,8 +74,8 @@ the appropriate tag. The Zig language is under very active development. In order to be current, Ziglings tracks **development** builds of the Zig compiler rather than versioned **release** builds. The last -stable release was `0.12.0`, but Ziglings needs a dev build with -pre-release version "0.13.0" and a build number at least as high +stable release was `0.13.0`, but Ziglings needs a dev build with +pre-release version "0.14.0" and a build number at least as high as that shown in the example version check above. It is likely that you'll download a build which is _greater_ than From 1f5ec78df8d2ae9e9a1a2a5c5bd56fc60aabeea0 Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Sat, 8 Jun 2024 19:20:30 +0200 Subject: [PATCH 3/7] fixed typo --- exercises/106_files.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/106_files.zig b/exercises/106_files.zig index a6131ed..aba07b6 100644 --- a/exercises/106_files.zig +++ b/exercises/106_files.zig @@ -29,7 +29,7 @@ pub fn main() !void { // then we'll try to make a new directory /output/ // to put our output files. cwd.makeDir("output") catch |e| switch (e) { - // there are chance you might want to run this + // there is a chance you might want to run this // program more than once and the path might already // been created, so we'll have to handle this error // by doing nothing From c9e5c7d561e8fd7d3a970838bfc9d0c279ad7b7f Mon Sep 17 00:00:00 2001 From: Andrew Dunbar Date: Wed, 12 Jun 2024 17:29:11 +1000 Subject: [PATCH 4/7] English fixes for 107_files2.zig --- exercises/107_files2.zig | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/exercises/107_files2.zig b/exercises/107_files2.zig index 9266358..45e12f5 100644 --- a/exercises/107_files2.zig +++ b/exercises/107_files2.zig @@ -4,17 +4,17 @@ // - create a file {project_root}/output/zigling.txt // with content `It's zigling time!`(18 byte total) // -// Now there no point in writing to a file if we don't read from it am I right? -// let's write a program to read the content of the file that we just created. +// Now there's no point in writing to a file if we don't read from it, am I right? +// Let's write a program to read the content of the file that we just created. // // I am assuming that you've created the appropriate files for this to work. // -// Alright, bud, lean in close here's the game plan. +// Alright, bud, lean in close. Here's the game plan. // - First, we open the {project_root}/output/ directory // - Secondly, we open file `zigling.txt` in that directory -// - then, we initalize an array of characters with all letter 'A', and print it -// - After that, we read the content of the file to the array -// - Finally, we print out the read content +// - Then, we initalize an array of characters with all letter 'A', and print it +// - After that, we read the content of the file into the array +// - Finally, we print out the content we just read const std = @import("std"); @@ -30,21 +30,21 @@ pub fn main() !void { const file = try output_dir.openFile("zigling.txt", .{}); defer file.close(); - // initalize an array of u8 with all letter 'A'. - // we need to pick the size of the array, 64 seems like a good number. + // initalize an array of u8 with all letter 'A' + // we need to pick the size of the array, 64 seems like a good number // fix the initalization below var content = ['A']*64; // this should print out : `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA` std.debug.print("{s}\n", .{content}); // okay, seems like a threat of violence is not the answer in this case - // can you go here to find a way to read the content ? + // can you go here to find a way to read the content? // https://ziglang.org/documentation/master/std/#std.fs.File // hint: you might find two answers that are both vaild in this case const bytes_read = zig_read_the_file_or_i_will_fight_you(&content); - // Woah, too screamy, I know you're excited for zigling time but tone it down a bit - // Can you print only what we read from the file ? + // Woah, too screamy. I know you're excited for zigling time but tone it down a bit. + // Can you print only what we read from the file? std.debug.print("Successfully Read {d} bytes: {s}\n", .{ bytes_read, content, // change this line only From 582a2558c7b85fbdbbc7b2055ada0fb8c2cdea91 Mon Sep 17 00:00:00 2001 From: Andrew Dunbar Date: Wed, 12 Jun 2024 17:52:33 +1000 Subject: [PATCH 5/7] English fixes for 106_files.zig --- exercises/106_files.zig | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/exercises/106_files.zig b/exercises/106_files.zig index aba07b6..f5fd1ac 100644 --- a/exercises/106_files.zig +++ b/exercises/106_files.zig @@ -1,22 +1,22 @@ // // Until now, we've only been printing our output in the console, -// which is good enough for fighting alien and hermit bookkeeping. +// which is good enough for fighting aliens and hermit bookkeeping. // -// However, many other task require some interaction with the file system, +// However, many other tasks require some interaction with the file system, // which is the underlying structure for organizing files on your computer. // -// The File System provide a hierarchical structure for storing files -// by organizing files into directories, which hold files and other directories, -// thus creating a tree structure for navigating. +// The file system provides a hierarchical structure for storing files +// by organizing them into directories, which hold files and other directories, +// thus creating a tree structure that can be navigated. // -// Fortunately, zig standard library provide a simple api for interacting -// with the file system, see the detail documentation here +// Fortunately, the Zig standard library provides a simple API for interacting +// with the file system, see the detail documentation here: // // https://ziglang.org/documentation/master/std/#std.fs // -// In this exercise, we'll try to -// - create a new directory -// - open a file in the directory +// In this exercise, we'll try to: +// - create a new directory, +// - open a file in the directory, // - write to the file. // // import std as always @@ -27,42 +27,42 @@ pub fn main() !void { const cwd: std.fs.Dir = std.fs.cwd(); // then we'll try to make a new directory /output/ - // to put our output files. + // to store our output files. cwd.makeDir("output") catch |e| switch (e) { // there is a chance you might want to run this // program more than once and the path might already - // been created, so we'll have to handle this error + // have been created, so we'll have to handle this error // by doing nothing // // we want to catch error.PathAlreadyExists and do nothing ??? => {}, - // if is any other unexpected error we just propagate it through + // if there's any other unexpected error we just propagate it through else => return e, }; // then we'll try to open our freshly created directory - // wait a minute + // wait a minute... // opening a directory might fail! // what should we do here? var output_dir: std.fs.Dir = cwd.openDir("output", .{}); defer output_dir.close(); // we try to open the file `zigling.txt`, - // and propagate the error up if there are any errors + // and propagate any error up const file: std.fs.File = try output_dir.createFile("zigling.txt", .{}); // it is a good habit to close a file after you are done with it // so that other programs can read it and prevent data corruption // but here we are not yet done writing to the file - // if only there were a keyword in zig that - // allows you "defer" code execute to the end of scope... + // if only there were a keyword in Zig that + // allowed you to "defer" code execution to the end of the scope... file.close(); - // !you are not allowed to switch these two lines above the file closing line! + // you are not allowed to move these two lines above the file closing line! const byte_written = try file.write("It's zigling time!"); std.debug.print("Successfully wrote {d} bytes.\n", .{byte_written}); } // to check if you actually write to the file, you can either, -// 1. open the file on your text editor, or +// 1. open the file in your text editor, or // 2. print the content of the file in the console with the following command // >> cat ./output/zigling.txt // @@ -86,7 +86,7 @@ pub fn main() !void { // // Question: // - what should you do if you want to also read the file after opening it? -// - go to documentation of the struct `std.fs.Dir` here +// - go to the documentation of the struct `std.fs.Dir` here: // https://ziglang.org/documentation/master/std/#std.fs.Dir // - can you find a function for opening a file? how about deleting a file? // - what kind of options can you use with those functions? From 83f16709ba212696f340b2a527dcad5f191d5f08 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 16 Jun 2024 18:58:48 +0200 Subject: [PATCH 6/7] Calling `split` is deprecated The `split` function in std mem is depreacted and a `@compileError`, splitSequence, splitAny, or splitScalar should be used instead. --- build.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index 0d83737..82ce9cb 100644 --- a/build.zig +++ b/build.zig @@ -459,7 +459,7 @@ fn resetLine() void { pub fn trimLines(allocator: std.mem.Allocator, buf: []const u8) ![]const u8 { var list = try std.ArrayList(u8).initCapacity(allocator, buf.len); - var iter = std.mem.split(u8, buf, " \n"); + var iter = std.mem.splitSequence(u8, buf, " \n"); while (iter.next()) |line| { // TODO: trimming CR characters is probably not necessary. const data = std.mem.trimRight(u8, line, " \r"); @@ -521,7 +521,7 @@ fn validate_exercises() bool { return false; } - var iter = std.mem.split(u8, ex.output, "\n"); + var iter = std.mem.splitScalar(u8, ex.output, '\n'); while (iter.next()) |line| { const output = std.mem.trimRight(u8, line, " \r"); if (output.len != line.len) { From 5c000ce2d704f435c6fc5f89637bf82f6a491cd5 Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Mon, 17 Jun 2024 11:43:25 +0200 Subject: [PATCH 7/7] Fixes because of a new Zig version, which changes some functions. --- README.md | 3 +- build.zig | 2 +- patches/patches/106_files.patch | 91 ++++++++++++++++++++++++++++---- patches/patches/107_files2.patch | 50 ++++++++++++++---- 4 files changed, 125 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 08c2138..50f45eb 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,8 @@ that if you update one, you may need to also update the other. ### Version Changes -Version-0.13.0-dev.339 +Version-0.14.0-dev.42 +* *2024-06-17* zig 0.14.0-dev.42 - changes in `std.mem.split and tokenize` - see [#15579](https://github.com/ziglang/zig/pull/15579) * *2024-05-29* zig 0.13.0-dev.339 - rework std.Progress - see [#20059](https://github.com/ziglang/zig/pull/20059) * *2024-03-21* zig 0.12.0-dev.3518 - change to @fieldParentPtr - see [#19470](https://github.com/ziglang/zig/pull/19470) * *2024-03-21* zig 0.12.0-dev.3397 - rename std.os to std.posix - see [#5019](https://github.com/ziglang/zig/issues/5019) diff --git a/build.zig b/build.zig index 82ce9cb..2d8e45d 100644 --- a/build.zig +++ b/build.zig @@ -15,7 +15,7 @@ const print = std.debug.print; // 1) Getting Started // 2) Version Changes comptime { - const required_zig = "0.13.0-dev.339"; + const required_zig = "0.14.0-dev.42"; const current_zig = builtin.zig_version; const min_zig = std.SemanticVersion.parse(required_zig) catch unreachable; if (current_zig.order(min_zig) == .lt) { diff --git a/patches/patches/106_files.patch b/patches/patches/106_files.patch index e2bdbca..5eb5a19 100644 --- a/patches/patches/106_files.patch +++ b/patches/patches/106_files.patch @@ -1,16 +1,63 @@ ---- exercises/106_files.zig 2024-05-05 00:48:25.808548611 +0200 -+++ answers/106_files.zig 2024-05-05 01:00:40.742969819 +0200 -@@ -35,7 +35,7 @@ +--- exercises/106_files.zig 2024-06-17 10:11:53.651439869 +0200 ++++ answers/106_files.zig 2024-06-17 10:21:50.697337653 +0200 +@@ -1,22 +1,22 @@ + // + // Until now, we've only been printing our output in the console, +-// which is good enough for fighting aliens and hermit bookkeeping. ++// which is good enough for fighting alien and hermit bookkeeping. + // +-// However, many other tasks require some interaction with the file system, ++// However, many other task require some interaction with the file system, + // which is the underlying structure for organizing files on your computer. + // +-// The file system provides a hierarchical structure for storing files +-// by organizing them into directories, which hold files and other directories, +-// thus creating a tree structure that can be navigated. ++// The File System provide a hierarchical structure for storing files ++// by organizing files into directories, which hold files and other directories, ++// thus creating a tree structure for navigating. + // +-// Fortunately, the Zig standard library provides a simple API for interacting +-// with the file system, see the detail documentation here: ++// Fortunately, zig standard library provide a simple api for interacting ++// with the file system, see the detail documentation here + // + // https://ziglang.org/documentation/master/std/#std.fs + // +-// In this exercise, we'll try to: +-// - create a new directory, +-// - open a file in the directory, ++// In this exercise, we'll try to ++// - create a new directory ++// - open a file in the directory + // - write to the file. + // + // import std as always +@@ -27,42 +27,42 @@ + const cwd: std.fs.Dir = std.fs.cwd(); + + // then we'll try to make a new directory /output/ +- // to store our output files. ++ // to put our output files. + cwd.makeDir("output") catch |e| switch (e) { +- // there is a chance you might want to run this ++ // there are chance you might want to run this + // program more than once and the path might already +- // have been created, so we'll have to handle this error ++ // been created, so we'll have to handle this error // by doing nothing // // we want to catch error.PathAlreadyExists and do nothing - ??? => {}, +- // if there's any other unexpected error we just propagate it through + error.PathAlreadyExists => {}, - // if is any other unexpected error we just propagate it through ++ // if is any other unexpected error we just propagate it through else => return e, }; -@@ -44,7 +44,7 @@ - // wait a minute + + // then we'll try to open our freshly created directory +- // wait a minute... ++ // wait a minute // opening a directory might fail! // what should we do here? - var output_dir: std.fs.Dir = cwd.openDir("output", .{}); @@ -18,12 +65,36 @@ defer output_dir.close(); // we try to open the file `zigling.txt`, -@@ -55,7 +55,7 @@ +- // and propagate any error up ++ // and propagate the error up if there are any errors + const file: std.fs.File = try output_dir.createFile("zigling.txt", .{}); + // it is a good habit to close a file after you are done with it + // so that other programs can read it and prevent data corruption // but here we are not yet done writing to the file - // if only there were a keyword in zig that - // allows you "defer" code execute to the end of scope... +- // if only there were a keyword in Zig that +- // allowed you to "defer" code execution to the end of the scope... - file.close(); ++ // if only there were a keyword in zig that ++ // allows you "defer" code execute to the end of scope... + defer file.close(); - // !you are not allowed to switch these two lines above the file closing line! +- // you are not allowed to move these two lines above the file closing line! ++ // !you are not allowed to switch these two lines above the file closing line! const byte_written = try file.write("It's zigling time!"); + std.debug.print("Successfully wrote {d} bytes.\n", .{byte_written}); + } + // to check if you actually write to the file, you can either, +-// 1. open the file in your text editor, or ++// 1. open the file on your text editor, or + // 2. print the content of the file in the console with the following command + // >> cat ./output/zigling.txt + // +@@ -86,7 +86,7 @@ + // + // Question: + // - what should you do if you want to also read the file after opening it? +-// - go to the documentation of the struct `std.fs.Dir` here: ++// - go to documentation of the struct `std.fs.Dir` here + // https://ziglang.org/documentation/master/std/#std.fs.Dir + // - can you find a function for opening a file? how about deleting a file? + // - what kind of options can you use with those functions? diff --git a/patches/patches/107_files2.patch b/patches/patches/107_files2.patch index d434b52..ebf8a7c 100644 --- a/patches/patches/107_files2.patch +++ b/patches/patches/107_files2.patch @@ -1,23 +1,55 @@ ---- exercises/107_files2.zig 2024-05-05 00:48:25.808548611 +0200 -+++ answers/107_files2.zig 2024-05-05 01:14:03.866062288 +0200 -@@ -33,7 +33,7 @@ - // initalize an array of u8 with all letter 'A'. - // we need to pick the size of the array, 64 seems like a good number. +--- exercises/107_files2.zig 2024-06-17 10:11:53.651439869 +0200 ++++ answers/107_files2.zig 2024-06-17 10:21:50.700671057 +0200 +@@ -4,17 +4,17 @@ + // - create a file {project_root}/output/zigling.txt + // with content `It's zigling time!`(18 byte total) + // +-// Now there's no point in writing to a file if we don't read from it, am I right? +-// Let's write a program to read the content of the file that we just created. ++// Now there no point in writing to a file if we don't read from it am I right? ++// let's write a program to read the content of the file that we just created. + // + // I am assuming that you've created the appropriate files for this to work. + // +-// Alright, bud, lean in close. Here's the game plan. ++// Alright, bud, lean in close here's the game plan. + // - First, we open the {project_root}/output/ directory + // - Secondly, we open file `zigling.txt` in that directory +-// - Then, we initalize an array of characters with all letter 'A', and print it +-// - After that, we read the content of the file into the array +-// - Finally, we print out the content we just read ++// - then, we initalize an array of characters with all letter 'A', and print it ++// - After that, we read the content of the file to the array ++// - Finally, we print out the read content + + const std = @import("std"); + +@@ -30,23 +30,23 @@ + const file = try output_dir.openFile("zigling.txt", .{}); + defer file.close(); + +- // initalize an array of u8 with all letter 'A' +- // we need to pick the size of the array, 64 seems like a good number ++ // initalize an array of u8 with all letter 'A'. ++ // we need to pick the size of the array, 64 seems like a good number. // fix the initalization below - var content = ['A']*64; + var content = [_]u8{'A'} ** 64; // this should print out : `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA` std.debug.print("{s}\n", .{content}); -@@ -41,12 +41,12 @@ - // can you go here to find a way to read the content ? + // okay, seems like a threat of violence is not the answer in this case +- // can you go here to find a way to read the content? ++ // can you go here to find a way to read the content ? // https://ziglang.org/documentation/master/std/#std.fs.File // hint: you might find two answers that are both vaild in this case - const bytes_read = zig_read_the_file_or_i_will_fight_you(&content); + const bytes_read = try file.read(&content); - // Woah, too screamy, I know you're excited for zigling time but tone it down a bit - // Can you print only what we read from the file ? +- // Woah, too screamy. I know you're excited for zigling time but tone it down a bit. +- // Can you print only what we read from the file? ++ // Woah, too screamy, I know you're excited for zigling time but tone it down a bit ++ // Can you print only what we read from the file ? std.debug.print("Successfully Read {d} bytes: {s}\n", .{ bytes_read, - content, // change this line only