Create volatile box for managing state

Description

Motivation:

Clojure needs a faster variant of Atom for managing state inside transducers. That is, Atoms do the job, but they provide a little too much capability for the purposes of transducers. Specifically the compare and swap semantics of Atoms add too much overhead. Therefore, it was determined that a simple volatile ref type would work to ensure basic propagation of its value to other threads and reads of the latest write from any other thread. While updates are subject to race conditions, access is controlled by JVM guarantees.

Solution overview: Create a concrete type in Java, akin to clojure.lang.Box, but volatile inside supports IDeref, but not watches etc.

API:

Patch: volatile3.diff

Screened by: fogus

Environment

None

Attachments

2

Activity

Alex Miller August 29, 2014 at 10:31 PM

Updated to volatile3.diff to address offline comment from Rich.

Fogus August 29, 2014 at 5:01 PM

I downloaded the patch and applied to latest master. I ran the isolated tests and the full test suite and also ensured that the patch didn't add any reflection warnings. I then modified the ticket description to add a little more context and motivation (for future readers). The code is straight-forward and clean.

Alex Miller August 28, 2014 at 3:05 PM

Made changes as requested.

Rich Hickey August 27, 2014 at 12:37 PM

Can you please lift the with-meta stuff out of the syntax-quote?
Actually, if volatile! ctor returned a type-hinted value that extra hinting might not even be needed. Let's do both for now.

Also the type hint on the volatile? arg makes no sense - it's a predicate asking if something is a volatile.

Jozef Wagner August 27, 2014 at 9:50 AM

why the bang in the name of volatile! function? If the reason is to warn users that this is an 'expert only' stuff, I suggest to use a verbose name instead, e.g. volatile-reference. (This will also be consistent with approach chosen in the names of volatile-mutable and unsynchronized-mutable hints.)

Completed

Details

Assignee

Reporter

Approval

Patch

Priority

Affects versions

Fix versions

Created August 25, 2014 at 3:09 PM
Updated October 7, 2014 at 10:46 PM
Resolved October 7, 2014 at 10:46 PM