# Copyright 2008 Kevin Reid, under the terms of the MIT X license # found at http://www.opensource.org/licenses/mit-license.html ................ ? def makeDelayingRef := # value: ? def recipient match msg { > stdout.println(msg) > E.callWithPair(__identityFunc, msg) > }; null ? def [dr, resolver] := makeDelayingRef(false) # value: [, ] ? makeDelayingRef(true) # value: [, ] ? dr(2) # problem: not synchronously callable: .run(2) ? def x := dr <- (2) # value: ? ? ? ? x # value: ? resolver.resolveSoFar(recipient) > x # value: # stdout: ["run", [2]] # The buffered messages are delivered as sends, so x is not immediately resolved. ? x # value: 2 Different target ? def x := dr <- (2) # value: ? resolver.resolveSoFar(fn x { x + 1 }) ? x # value: 3 Verifying sendOnly support ? def x := E.sendOnly(dr, "run", ["run"]) ? resolver.resolveSoFar(recipient) # stdout: ["run", ["run"]] # ? [x] # value: [null]