motoko icon indicating copy to clipboard operation
motoko copied to clipboard

experiment: sanity check `async` vs `async*`

Open crusso opened this issue 4 months ago • 1 comments

@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

crusso avatar Aug 21 '25 15:08 crusso

Comparing from 6a60840e61d525c77af1882dc4c37388a2a1f729 to b968d01a7b40f08f8ade4c502366eb8e87516a45: The produced WebAssembly code seems to be completely unchanged.

github-actions[bot] avatar Aug 21 '25 15:08 github-actions[bot]