Aleksey Shipilev aleksey.shipilev at
Tue Sep 25 02:45:32 PDT 2012

Hi guys,

This thread [1] makes me thinking if we want to introduce something like
runOnce() to record per-callsite invocation information. I.e. instead of
messing with maps and flags to guard this behavior, one can possibly do:

  Runners.runOnce(() -> System.out.println("Boo!"));

...where runOnce will be desugared by Javac into indy call in which
bootstrap method calls the callee, and then emits the constant callsite
holding the result. This will effectively record the "invoked" property
into callsite, so that this code:

  Runners.runOnce(() -> System.out.println("foo"));
  Runners.runOnce(() -> System.out.println("bar"));

would yield:

It might be yet another convenient way to make singletons (err...
thread-safe identity caches), like:

 public T getInstance() { return Runners.runOnce(() -> new T()); }

Was something like this considered before?



More information about the lambda-libs-spec-observers mailing list