can you be a little more specific and provide the way
foo.volatile.compareAndSet is compiled with this example:

Hey, the JEP isn't even out of draft yet!  Stop asking hard questions.

The current strawman, though, is to expose direct (CP-ready) MH forms (Lookup API / constant pool format TBD) for field get/set with fence, array element get/set with fence, field CAS, and array element CAS. Then the static compiler translates

   foo.volatile.cAS(n,m)

as

   LDC #MH[lookupFieldCASer(foo)]
   aload n
   aload m
   invokevirtual "invokeExact"

class Linked {
   volatile Node head;

   public void add(String element) {
     for(;;) {
        Node oldHead = head.volatile.get();
        Node newNode = new Node(element, oldHead);
        if (head.volatile.compareAndSet(oldHead, newNode)) {
          return;
        }
     }
   }
}

I will be very happy to see how you solve the different issues because
i've also spent some times thinking on how the .volatile syntax can be
implemented:
   - what is the signature of the method compareAndSet, and how you
fight the generics erasure ?
   - how do you remove the extra-level of indirection if head is a
VolatileXXX,
     because accessing to the value is this.head.payload and not
this.head ?
   - what LinkedClass.class.getDeclaredField("head").getType() returns ?

regards,
Rémi

Reply via email to