► |  | The Racket Reference

1 | Language Model
2 | Syntactic Forms
3 | Datatypes
4 | Structures
5 | Classes and Objects
6 | Units
7 | Contracts
8 | Pattern Matching
9 | Control Flow
10 | Concurrency and Parallelism
11 | Macros
12 | Input and Output
13 | Reflection and Security
14 | Operating System
15 | Memory Management
16 | Unsafe Operations
17 | Running Racket
| Bibliography
| Index

▼ | 3 | Datatypes

3.1 | Booleans and Equality
3.2 | Numbers
3.3 | Strings
3.4 | Byte Strings
3.5 | Characters
3.6 | Symbols
3.7 | Regular Expressions
3.8 | Keywords
3.9 | Pairs and Lists
3.10 | Mutable Pairs and Lists
3.11 | Vectors
3.12 | Boxes
3.13 | Hash Tables
3.14 | Sequences and Streams
3.15 | Dictionaries
3.16 | Sets
3.17 | Procedures
3.18 | Void and Undefined

On this page:

box?
box
box-immutable
unbox
set-box!
box-cas!

top← prev up next →

#### 3.12`` Boxes

> > > Boxes in The Racket Guide introduces boxes.

A box is like a single-element vector, normally used as minimal mutable storage.

A literal or printed box starts with #&. See Reading Boxes for information on reading boxes and Printing Boxes for information on printing boxes.

> > procedure

> > (box? v) → boolean?

> v : any/c

Returns #t if v is a box, #f otherwise.

> > procedure

> > (box v) → box?

> v : any/c

Returns a new mutable box that contains v.

> > procedure

> > (box-immutable v) → (and/c box? immutable?)

> v : any/c

Returns a new immutable box that contains v.

> > procedure

> > (unbox box) → any/c

> box : box?

Returns the content of box.

For any v, (unbox (box v)) returns v.

> > procedure

> > (set-box! box v) → void?

> box : (and/c box? (not/c immutable?))
> v : any/c

Sets the content of box to v.

> > procedure

> > (box-cas! box old new) → boolean?

> box : (and/c box? (not/c immutable?) (not/c impersonator?))
> old : any/c
> new : any/c

Atomically updates the contents of box to new, provided that box currently contains a value that is eq? to old, and returns #t in that case. If box does not contain old, then the result is #f.

If no other threads or futures attempt to access box, the operation is equivalent to

> (and (eq? old (unbox loc)) (set-box! loc new) #t)

When Racket is compiled with support for futures, box-cas! uses a hardware compare and set operation. Uses of box-cas! be performed safely in a future (i.e., allowing the future thunk to continue in parallel).

top← prev up next →