gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gcl-devel] 2.7.0


From: Camm Maguire
Subject: [Gcl-devel] 2.7.0
Date: 21 Mar 2006 18:28:09 -0500
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Greetings!  Just a brief heads up about the latest commit just made.
Quite a lot of changes, improvements hopefully :-).

1) si::proper-list is now propagated somewhat.  This is basically
   intended to allow sequence -> list simplification inside certain do
   loops, etc.  Check out the difference between the disassembly of
   '(lambda (x) (let (( r t)) (dolist (x x) (push x r)) (length r)))
   and '(lambda (x) (let (r) (dolist (x x) (push x r)) (length r)))
   for example.   Also might be of interest to add (declare (optimize
   (safety 1))), which turns on arg checking.  Certain arg checks are
   eliminated automatically by the type propagation.  The map
   functions, list, etc. return proper-list.  There are doubtless
   others I haven't put in yet.

2) check-type is now consolidated at both ansi and saved_pre_gcl
   levels, and implemented in a way which does not cause untold grief
   at the overhead :-).  Replacement of the offending forms is
   supported in compiled and interpreted code at both levels.

3) Several bug fixes implemented, which still need a bit of
   refinement.  In a nutshell, conditionally executed code needs to
   have variable setq operations undone in the outside scope --
   'with-restore-vars is provided for this purpose, but the code can
   be much cleaner if it is expanded.

4) O3 -> Os as it appears faster, and is much smaller.  We could
   trigger this, as well as certain inlining/compiler-macro-expansion,
   with the *space* setting if desired.

5) Variable types are inferred and checked for constant evaluation,
   and not is handled as a predicate as is null.  Check out '(lambda
   (x) (declare (null x)) (endp x)), with null replaced by cons, list,
   si::proper-list (or just use mapcar or (let ((x '(1 2 3))))), and
   at safety 0 and 1, for example.  Expansions of the form (let ((x
   (form))) (if x x (other-form))) used to always foil the type
   propagation. 

6) error and cerror are compatible at the saved_pre_gcl with the ansi
   semantics.  We can now try to remove the specific-error hacks, and
   cleanup other continuable error disasters, such as package-error.

There is quite a bit else, but that's all I have time for for now.
We're just about at the point where we can put in some reverse type
propagation, and finish up the sequence function inlining, especially
remove and delete.

Take care,
-- 
Camm Maguire                                            address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah




reply via email to

[Prev in Thread] Current Thread [Next in Thread]