-*- mode: org -*-
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.At least SBCL cannot currently stack-allocate a let-bound lambda, but manages FLET and LABELS just fine.
Most of the DEFUN-COMPILE-TIME functions should probably go to a file of their own, loaded before the main screamer code is compiled.
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.
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.
- Does not handle SETF methods with multiple values for LOCAL SETF.
- If you do a (SETF (SYMBOL-FUNCTION ‘FOO) …) to a nondeterministic
function you will lose when you attempt to evaluate (FOO …).
- 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 …).
- 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.
- 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.
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.
Options:
- Implement SCREAMER:INCF, etc.
- Wrap all non-SETF/SETQ forms in GLOBAL, so that those side-effects are never undone.
- Leave it as-is.
These haven’t been verified or anything, just moved here.
can cause code from a different file to be included causing wierd behavior.
Things to Maybe Think Then Do? shrug
CPS-CONVERT to (FUNCALL #’(LAMBDA (Z) (F (G (H Z)))) (EITHER X Y)).
unconstrained variable since the constraints are asserted locally.