gcl-devel
[Top][All Lists]
Advanced

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

[Gcl-devel] Re: load speed and recompilation


From: Camm Maguire
Subject: [Gcl-devel] Re: load speed and recompilation
Date: 20 Nov 2006 18:05:49 -0500
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Greetings!

1) Doing an extra pass1 to get the function signatures in the file
   used by the file will foil code like this, which I guess is OK:

(defun foo (x)
        (when (eq x (prelim-or-final x)) x))

(defun prelim-or-final (x) nil) ;;overwrite this later with the real
                                ;;def.

The compiler will see the constant null signature and hard-code it
in. 

I've checked in a preliminary stab at what you want.  Any feedback
most appreciated.  

Right now it might be a bit more sluggish than required -- I repeat
the file open and read steps as well as the pass1 steps.  This was for
simplicity, as the top level forms must be evaled after read in
compile-file one at a time (e.g. (in-package 'foo)), making the read
not easily separable from t1expr.
 

Robert Boyer <address@hidden> writes:

> > I have something experimental you might want to try
> > soon.
> 
> Super.
> 
> > 1) compiling closures, i.e. (let (x) (defun foo nil x))
> 
> I'm not sure what the exact issue is here, but you may find this ANSI
> passage relevant:
> 
>    \issue{COMPILE-ARGUMENT-PROBLEMS-AGAIN:FIX}
>    The consequences are undefined if the lexical environment surrounding
>    the function to be compiled contains any bindings other than those for
>    macros, symbol macros, or declarations.
> 

I take it then we are free not to compile such closures -- great!  I
thought I saw some ansi test failures stemming from this, but I could
have been mistaken.  This said, quite a few functions in maxima, for
example, are written this way, and we lose performance wise by
interpreting them.  

One person once suggested something like

(defun foo nil
 
        (let ((x ..)) ; top level lexicals wrappend in defun foo above
                (setf (symbol-function 'bar) (lambda (...) ...))
                   ;;original defun bar transformed here))

And then on load

(foo)


Take care,

> I don't know what that sort of thing really means, but there it is for
> what it's worth.
> 
> Bob
> 
> 

-- 
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]