From 34af14ca7b9889a9226f616f5c071fd393da8dab Mon Sep 17 00:00:00 2001 From: Dave Gauer Date: Mon, 14 Jun 2021 15:39:49 -0400 Subject: add ex090 async 7 --- exercises/090_async7.zig | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 exercises/090_async7.zig (limited to 'exercises/090_async7.zig') diff --git a/exercises/090_async7.zig b/exercises/090_async7.zig new file mode 100644 index 0000000..89113bd --- /dev/null +++ b/exercises/090_async7.zig @@ -0,0 +1,43 @@ +// +// Remember how a function with 'suspend' is async and calling an +// async function without the 'async' keyword makes the CALLING +// function async? +// +// fn fooThatMightSuspend(maybe: bool) void { +// if (maybe) suspend {} +// } +// +// fn bar() void { +// fooThatMightSuspend(true); // Now bar() is async! +// } +// +// But if you KNOW the function won't suspend, you can make a +// promise to the compiler with the 'nosuspend' keyword: +// +// fn bar() void { +// nosuspend fooThatMightSuspend(false); +// } +// +// If the function does suspend and YOUR PROMISE TO THE COMPILER +// IS BROKEN, the program will panic at runtime, which is +// probably better than you deserve, you oathbreaker! >:-( +// +const print = @import("std").debug.print; + +pub fn main() void { + + // The main() function can not be async. But we know + // getBeef() will not suspend with this particular + // invocation. Please make this okay: + var my_beef = getBeef(0); + + print("beef? {X}!\n", .{my_beef}); +} + +fn getBeef(input: u32) u32 { + if (input > 0xDEAD) { + suspend {} + } + + return 0xBEEF; +} -- cgit v1.2.3-70-g09d2