Also, on a related note, is there any benefit in having core.sync primitives not final? What would be a use case to inherit from e.g. Mutex or Condition? GC does that with Mutex, but only to devirtualize all methods :) Maybe we should also consider making them final along the way?