Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 91 lines (89 sloc) 4.76 KB

-*- mode: org -*-

WIP Complete manual

All exported symbols documented.
WIP Cleanups
Some docstrings talk of EXPRESSIONS, some of FORMS.”Yields” vs “returns” a value.Restricts vs constrains.Don’t talk about noticers: they’re an implementation detail.
Simplify the language in the constraint section.

Make iscream.el work under Slime.

Rewrite dynamic-extent continuations using FLET

At least SBCL cannot currently stack-allocate a let-bound lambda, but manages FLET and LABELS just fine.

Dynamic-extent in CPS-CONVERT-TAGBODY.

WIP Split the system into logical pieces.

Most of the DEFUN-COMPILE-TIME functions should probably go to a file of their own, loaded before the main screamer code is compiled.


#:DUMMY-N gensyms used all over the place

This makes macro-expansions harder to read than they need to be. Use differently named gensyms for different things.


Check if Allegro still needs this.

primordial.lisp has some commented-out tests using LOOP

Apparently LOCAL and LOOP interactions depend on the specific expansion of loop. :/ If nothing else, documentation should mention this. An alternative would be to provide our own implemntation of LOOP that is well-behaved when it comes to LOCAL.

review the remaining limitations listed in the old source, and put the in the manual

  1. Does not handle SETF methods with multiple values for LOCAL SETF.
  2. If you do a (SETF (SYMBOL-FUNCTION ‘FOO) …) to a nondeterministic

function you will lose when you attempt to evaluate (FOO …).

  1. If you do a (SETF (SYMBOL-FUNCTION ‘FOO) …) to a deterministic

function when FOO was previously defined as a nondeterministic function you will lose when you attempt to evaluate (FOO …).

  1. The function record table will not work if we ever support FLET and

LABELS and in particular, if we ever support FLET and LABELS of nondeterministic functions.

  1. There is no way to force Screamer into compiling a deterministic

function as a nondeterministic one. A wizard might want to do this to take advantage of the fact that a LOCAL SETF/SETQ in a nondeterministic function does not cons up closures.


LOCAL only reliable with explicit SETF/SETQ:

If (INCF (FOO)) expands into a form that does SET-FOO instead of (SETF (FOO) …) form, the code walker will not know about the side-effect.


  • Implement SCREAMER:INCF, etc.
  • Wrap all non-SETF/SETQ forms in GLOBAL, so that those side-effects are never undone.
  • Leave it as-is.

Old “Bugs to fix” list from screamer.lisp

These haven’t been verified or anything, just moved here.

Deterministic/nondeterministic LOCAL SETF/SETQ undone out of order.

Changing determinism status

can cause code from a different file to be included causing wierd behavior.

May loop when expressions contain circular lists.


Old “TTMTTD” list from screamer.lisp

Things to Maybe Think Then Do? shrug

Should have way of having a stream of values.

Kashket’s constraint additions Fall90-158.

Compress trail after repeated LOCAL SETF/SETQ to same variable

LOCAL SETF/SETQ on symbol can use special variable binding stack instead of unwind-protect.

(F (G (H (EITHER X Y)))) where F, G and H are deterministic can


Should give warning when it recompiles functions due to changing determinism status.

=V <V <=V >V and >=V should do congruence/monotone closure.

=V should propagate domains.


Should cache VARIABLE-LOWER-BOUND/VARIABLE-UPPER-BOUND for domain variables.

Faster version of BIND! which doesn’t cons.


Get GROW-UP and NONLINEAR examples to work.

FUNCALLV and APPLYV need to assert the domains of the variable that they return.

Check that +V, -V, *V, /V, MINV and MAXV work and do the right thing with type propagation.

Check that PROPAGATE does the right thing with bounds of integers.

MEMBERV and derivatives should support vectors.

Backtracking out of INTEGER-BETWEENV and the like will yield an

unconstrained variable since the constraints are asserted locally.


Depend on Alexandria

peal-off-documentation-string-and-declarations -> alexandria:parse-body

SETF and SETQ walking is suspiciously different

Future Work

See if it would make sense to make nondeterministic functions funcallable instances.

Lock package on SBCL.