Scope locals have come together nicely.

I have some vague thoughts on the presentation of the JEP draft.  There are (at least) three intertwined things in the motivation:

 - ThreadLocal (and ITL especially) were always compromises, and with the advent of Loom, have become untenable -- but the need for implicit parameters has not gone away  - Scoped locals, because of their effective finality and dynamic scoping, offer a programming model that is a better fit for virtual threads, but, even in the absence of virtual threads, are an enabler for structured concurrency  - The programming model constraints enable a better-performing implementation

In reading the draft, these separate motivations seem somewhat tangled.  All the words make sense, but a reader has a hard time coming away with a clear picture of "so, why did we do this exactly, besides that its cool and faster?"

A possible way to untangle this is:

 - the underlying use cases: various forms of implicit context (transaction context, implicit parameters, leaving breadcrumbs for your future self.)  - the existing solution: thread locals.  ThreadLocals are effectively mutable per-thread globals.  The unconstrained mutability makes them hard to optimize.  ThreadLocals interact poorly with pooled threads.  - Here comes Loom!  We no longer need to pool threads.  So, why are TLs not good enough?  - The more constrained programming model of SLs enables two big new benefits:    - structured concurrency, which is applicable to virtual and non-virtual threads alike
   - better optimization of inheritance and get operations







On 5/12/2021 10:42 AM, Andrew Haley wrote:
There's been considerable discussion about scope locals on the loom-dev list,
and it's now time to open this to a wider audience. This subject is important
because. although scope locals were motivated by the the needs of Loom, they
have many potential applications outside that project.

The draft JEP is at

https://bugs.openjdk.java.net/browse/JDK-8263012

I've already received some very helpful suggestions for enhancements to
the API, and it'll take me a while to work through them all. In particular,
Paul Sandoz has suggested that I unify the classes Snapshot and Carrier,
and it will take me some time to understand the consequences of that.

In the meantime, please have a look at the JEP and comment here.


For reference, earlier discussions are at

https://mail.openjdk.java.net/pipermail/loom-dev/2021-March/002268.html
https://mail.openjdk.java.net/pipermail/loom-dev/2021-April/002287.html
https://mail.openjdk.java.net/pipermail/loom-dev/2021-May/002427.html


Reply via email to