Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Branch: master
Fetching contributors…

Cannot retrieve contributors at this time

executable file 91 lines (89 sloc) 4.877 kB
-*- mode: org -*-
* WIP Complete manual
***** DONE All exported symbols documented.
***** WIP Cleanups
******* DONE Some docstrings talk of EXPRESSIONS, some of FORMS.
******* DONE "Yields" vs "returns" a value.
******* TODO Restricts vs constrains.
******* TODO Don't talk about noticers: they're an implementation detail.
***** TODO Simplify the language in the constraint section.
* TODO Make iscream.el work under Slime.
* TODO Rewrite dynamic-extent continuations using FLET
At least SBCL cannot currently stack-allocate a let-bound lambda,
but manages FLET and LABELS just fine.
* TODO 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.
* TODO Cleanups
*** TODO #: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.
*** TODO 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.
*** TODO 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
2. If you do a (SETF (SYMBOL-FUNCTION 'FOO) ...) to a nondeterministic
function you will lose when you attempt to evaluate (FOO ...).
3. 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 ...).
4. 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.
5. 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.
* Bugs
*** TODO 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
- 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.
*** TODO Deterministic/nondeterministic LOCAL SETF/SETQ undone out of order.
*** TODO Changing determinism status
can cause code from a different file to be included causing wierd behavior.
*** TODO May loop when expressions contain circular lists.
* Old "TTMTTD" list from screamer.lisp
Things to Maybe Think Then Do? *shrug*
*** TODO Should have way of having a stream of values.
*** TODO Kashket's constraint additions Fall90-158.
*** TODO Compress trail after repeated LOCAL SETF/SETQ to same variable
*** TODO LOCAL SETF/SETQ on symbol can use special variable binding stack instead of unwind-protect.
*** TODO (F (G (H (EITHER X Y)))) where F, G and H are deterministic can
*** TODO Should give warning when it recompiles functions due to changing determinism status.
*** TODO =V <V <=V >V and >=V should do congruence/monotone closure.
*** TODO =V should propagate domains.
*** TODO Should cache VARIABLE-LOWER-BOUND/VARIABLE-UPPER-BOUND for domain variables.
*** TODO Faster version of BIND! which doesn't cons.
*** TODO Get DIAGNOSIS and MONTAGUE to work.
*** TODO Get GROW-UP and NONLINEAR examples to work.
*** TODO FUNCALLV and APPLYV need to assert the domains of the variable that they return.
*** TODO Check that +V, -V, *V, /V, MINV and MAXV work and do the right thing with type propagation.
*** TODO Check that PROPAGATE does the right thing with bounds of integers.
*** TODO MEMBERV and derivatives should support vectors.
*** TODO Backtracking out of INTEGER-BETWEENV and the like will yield an
unconstrained variable since the constraints are asserted locally.
* Refactoring
*** Depend on Alexandria
***** peal-off-documentation-string-and-declarations -> alexandria:parse-body
*** SETF and SETQ walking is suspiciously different
* Future Work
*** TODO See if it would make sense to make nondeterministic functions funcallable instances.
*** TODO Lock package on SBCL.
Jump to Line
Something went wrong with that request. Please try again.