motoko
motoko copied to clipboard
experiment: sanity check `async` vs `async*`
@ggreif all seems ok to me.
import Prim "mo:prim";
actor a {
public func m() : async () {
Prim.debugPrint(debug_show {
cycles = Prim.cyclesAvailable();
deadline = Prim.replyDeadline()
});
};
func sync() : () {
Prim.debugPrint("f()");
};
func fstar() : async* () {
Prim.debugPrint("fstar()");
await (with cycles=200; timeout = 400) m();
ignore (with cycles=400; timeout = 800) m();
};
func f() : async () {
Prim.debugPrint("f()");
await (with cycles=600; timeout = 1200) m();
ignore (with cycles=800; timeout = 1600) m();
};
public func go() : async () {
await (with cycles=100; timeout = 200) m();
sync(); // some effect
ignore sync(); // some effect
let _ = fstar(); // no effect
ignore fstar(); // no effect
await* fstar(); // some effect
let _ = f(); // some effect
ignore f(); // some effect
await f(); // some effect
};
};
output:
debug.print: {cycles = 100; deadline = 1_755_789_114_000_000_000}
debug.print: f()
debug.print: f()
debug.print: fstar()
debug.print: {cycles = 200; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 400; deadline = 1_755_789_214_000_000_000}
debug.print: f()
debug.print: f()
debug.print: f()
debug.print: {cycles = 600; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 600; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 600; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 800; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 800; deadline = 1_755_789_214_000_000_000}
debug.print: {cycles = 800; deadline = 1_755_789_214_000_000_000}
ingress Completed: Reply: 0x4449444c0000
Comparing from 6a60840e61d525c77af1882dc4c37388a2a1f729 to b968d01a7b40f08f8ade4c502366eb8e87516a45: The produced WebAssembly code seems to be completely unchanged.