63 lines
1.2 KiB
Plaintext
63 lines
1.2 KiB
Plaintext
1. Syntax
|
|
|
|
symbols
|
|
numbers
|
|
conses and vectors
|
|
comments
|
|
special prefix tokens: ' ` , ,@ ,.
|
|
other read macros: #. #' #\ #< #n= #n# #: #ctor
|
|
builtins
|
|
|
|
2. Data and execution models
|
|
|
|
3. Primitive functions
|
|
|
|
eq atom not set prog1 progn
|
|
symbolp numberp builtinp consp vectorp boundp
|
|
+ - * / <
|
|
apply eval
|
|
|
|
4. Special forms
|
|
|
|
quote if lambda macro while label cond and or
|
|
|
|
5. Data structures
|
|
|
|
cons car cdr rplaca rplacd list
|
|
alloc vector aref aset length
|
|
|
|
6. Other functions
|
|
|
|
read, print, princ, load, exit
|
|
equal, compare
|
|
gensym
|
|
|
|
7. Exceptions
|
|
|
|
trycatch raise
|
|
|
|
8. Cvalues
|
|
|
|
introduction
|
|
type representations
|
|
constructors
|
|
access
|
|
memory management concerns
|
|
ccall
|
|
|
|
|
|
If deliberate 50% heap utilization seems wasteful, consider:
|
|
|
|
- malloc has per-object overhead. for small allocations you might use
|
|
much more space than you think.
|
|
- any non-moving memory manager (whether malloc or a collector) can
|
|
waste arbitrary amounts of memory through fragmentation.
|
|
|
|
With a copying collector, you agree to give up 50% of your memory
|
|
up front, in exchange for significant benefits:
|
|
|
|
- really fast allocation
|
|
- heap compaction, improving locality and possibly speeding up computation
|
|
- collector performance O(1) in number of dead objects, essential for
|
|
maximal performance on generational workloads
|