Transducers in action
In this section, we will examine how transducers are implemented. We will also get a basic idea of how our own transducible source of data can be implemented.
Managing volatile references
Some transducers can internally use state. It turns out that the existing reference types, such as atoms and refs, aren't fast enough for the implementation of transducers. To circumvent this problem, transducers also introduce a new volatile reference type. A volatile reference represents a mutable variable that will not be copied into the thread-local cache. Also, volatile references are not atomic. They are implemented in Java using the volatile
keyword with a java.lang.Object
type.
Note
The following examples can be found in src/m_clj/c5/volatile.clj
of the book's source code.
We can create a new volatile reference using the volatile!
function. The value contained in the volatile state can then be retrieved using the @
reader macro or a deref
form. The vreset!
function can...