From: Adam W. <li...@co...> - 2003-06-07 03:41:25
|
Issue: In the CVS version of CLISP package lock warnings are generated when using WITHOUT-PACKAGE-LOCK to disable actual package locks. These warnings are cluttering up my Apache logs. Example of current CVS behaviour: (ext:without-package-lock ("COMMON-LISP") (defun short-site-name () #.(read-line (ext:run-program "hostname" :output :stream)))) Leads to the warning: WARNING: DEFUN/DEFMACRO: redefining function short-site-name in /home/adam/.clisprc.fas, was defined in /home/adam/files/clisp/package/clisp-build/debian/build/config.fas My solution: I have created the global variable CUSTOM:*PACKAGE-LOCK-WARNINGS* which defaults to t. When *PACKAGE-LOCK-WARNINGS* is true (the default) these warnings continue to be generated. When false the warnings are disabled. lisparit.d, constsym.d and init.lisp are patched: --- ../clisp/src/lisparit.d 2003-02-25 09:24:38.000000000 +1300 +++ src/lisparit.d 2003-06-07 15:08:41.000000000 +1200 @@ -2033,6 +2033,8 @@ define_variable(S(warn_on_floating_point_contagion),T); /* *FLOATING-POINT-CONTAGION-ANSI* := NIL */ define_variable(S(floating_point_contagion_ansi),NIL); + /* *PACKAGE-LOCK-WARNINGS* := T */ + define_variable(S(package_lock_warnings),T); } /* =========================================================================== --- ../clisp/src/constsym.d 2003-05-24 14:48:34.000000000 +1200 +++ src/constsym.d 2003-06-07 15:08:37.000000000 +1200 @@ -586,6 +586,7 @@ LISPSYM(map_all_symbols,"MAP-ALL-SYMBOLS",system) LISPSYM(package_iterator,"PACKAGE-ITERATOR",system) LISPSYM(package_iterate,"PACKAGE-ITERATE",system) +LISPSYM(package_lock_warnings,"*PACKAGE-LOCK-WARNINGS*",custom) /* variable in LISPARIT */ /* ---------- PATHNAME ---------- */ LISPSYM(parse_namestring,"PARSE-NAMESTRING",lisp) LISPSYM(pathname,"PATHNAME",lisp) --- ../clisp/src/init.lisp 2003-05-16 12:49:25.000000000 +1200 +++ src/init.lisp 2003-06-07 15:08:41.000000000 +1200 @@ -433,7 +433,8 @@ (symbol-package oo)))) symbol))) symbol) - (when what ; when not yet defined, `what' is NIL + (when (and what ; when not yet defined, `what' is NIL + *package-lock-warnings*) (warn (TEXT "~a: redefining ~a ~s in ~a, was defined in ~a") caller what symbol (or cur-file "top-level") (or old-file "top-level"))) If this submission is unacceptable then perhaps ext:without-package-lock could be implemented with the keyword :DISABLE-WARNINGS. Implementing this would require rewriting the function arguments for sys::check-redefinition and therefore everything that calls it. Regards, Adam |
From: Sam S. <sd...@gn...> - 2003-06-07 14:23:26
|
> * In message <105...@wo...> > * On the subject of "PATCH: configurable *package-lock-warnings*" > * Sent on 07 Jun 2003 15:41:16 +1200 > * Honorable Adam Warner <li...@co...> writes: > > Issue: In the CVS version of CLISP package lock warnings are generated > when using WITHOUT-PACKAGE-LOCK to disable actual package locks. These > warnings are cluttering up my Apache logs. > > Example of current CVS behaviour: > > (ext:without-package-lock ("COMMON-LISP") > (defun short-site-name () > #.(read-line (ext:run-program "hostname" :output :stream)))) > > Leads to the warning: > > WARNING: > DEFUN/DEFMACRO: redefining function short-site-name in > /home/adam/.clisprc.fas, was defined in > /home/adam/files/clisp/package/clisp-build/debian/build/config.fas this has nothing to do with package locks. this is a standard feature in many lisps (e.g. ACL) which warns when a function is re-defined in different files. why don't you modify config.lisp at build time? -- Sam Steingold (http://www.podval.org/~sds) running RedHat9 GNU/Linux <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.palestine-central.com/links.html> There are two ways to write error-free programs; only the third one works. |
From: Adam W. <li...@co...> - 2003-06-07 15:36:01
|
On Sun, 2003-06-08 at 02:23, Sam Steingold wrote: > > * In message <105...@wo...> > > * On the subject of "PATCH: configurable *package-lock-warnings*" > > * Sent on 07 Jun 2003 15:41:16 +1200 > > * Honorable Adam Warner <li...@co...> writes: > > > > Issue: In the CVS version of CLISP package lock warnings are generated > > when using WITHOUT-PACKAGE-LOCK to disable actual package locks. These > > warnings are cluttering up my Apache logs. > > > > Example of current CVS behaviour: > > > > (ext:without-package-lock ("COMMON-LISP") > > (defun short-site-name () > > #.(read-line (ext:run-program "hostname" :output :stream)))) > > > > Leads to the warning: > > > > WARNING: > > DEFUN/DEFMACRO: redefining function short-site-name in > > /home/adam/.clisprc.fas, was defined in > > /home/adam/files/clisp/package/clisp-build/debian/build/config.fas > > this has nothing to do with package locks. > > this is a standard feature in many lisps (e.g. ACL) which warns when a > function is re-defined in different files. You're right. So let's call the dynamic variable *warn-on-redefinition*. > why don't you modify config.lisp at build time? Because I would like to be able to install and use precompiled CLISP packages from Debian. Turns out ACL has a dynamic variable *warn-on-redefinition*: http://www.cs.berkeley.edu/~fateman/283/acldoc/cl/aclwin.htm Can we too, please? Regards, Adam |
From: Adam W. <li...@co...> - 2003-06-07 15:54:25
|
On Sun, 2003-06-08 at 03:35, Adam Warner wrote: > Turns out ACL has a dynamic variable *warn-on-redefinition*: > http://www.cs.berkeley.edu/~fateman/283/acldoc/cl/aclwin.htm Correction: *warn-on-redefinition* is in the list of definitions no longer implemented in ACL 5.0. For *warn-on-redefinition* the documentation says to consult the "redefinition warning facility (see 5.0 Package locking and package definition locking in packages.htm)". There doesn't appear to be similar run time functionality that a *warn-on-redefinition* would provide in ACL 5.0. Regards, Adam |
From: Adam W. <li...@co...> - 2003-06-07 23:21:34
|
On Sun, 2003-06-08 at 02:23, Sam Steingold wrote: > > (ext:without-package-lock ("COMMON-LISP") > > (defun short-site-name () > > #.(read-line (ext:run-program "hostname" :output :stream)))) > > > > Leads to the warning: > > > > WARNING: > > DEFUN/DEFMACRO: redefining function short-site-name in > > /home/adam/.clisprc.fas, was defined in > > /home/adam/files/clisp/package/clisp-build/debian/build/config.fas > why don't you modify config.lisp at build time? While this was a minor request I can empathise that one would like to avoid cluttering up an implementation with dynamic variables (I don't think speed of function redefinition is an issue because the *warn-on-redefinition* predicate is EQ and not even tested when WHAT is usually NIL). It has only taken me a few minutes to replace the use of SHORT-SITE-NAME in my code with a new function called HOSTNAME. It is great learning the beginnings of how to modify CLISP and beginning to understand what it means to implement Lisp in C instead of Lisp in Lisp. Regards, Adam |
From: Sam S. <sd...@gn...> - 2003-06-08 01:04:13
|
1. you can now suppress redefinition check with CUSTOM:*SUPPRESS-CHECK-REDEFINITION* 2. SHORT-SITE-NAME and LONG-SITE-NAME now call uname(1) when (getenv "ORGANIZATION") returns NIL. -- Sam Steingold (http://www.podval.org/~sds) running RedHat9 GNU/Linux <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.palestine-central.com/links.html> Good judgment comes from experience and experience comes from bad judgment. |
From: Adam W. <li...@co...> - 2003-06-08 03:38:45
|
On Sun, 2003-06-08 at 13:04, Sam Steingold wrote: > 1. you can now suppress redefinition check with > CUSTOM:*SUPPRESS-CHECK-REDEFINITION* BTW this suppresses package locks: $ clisp -q -norc [1]> (defun short-site-name ()) ** - Continuable Error DEFUN/DEFMACRO(SHORT-SITE-NAME): #<PACKAGE COMMON-LISP> is locked If you continue (by typing 'continue'): Ignore the lock and proceed 1. Break [2]> continue WARNING: DEFUN/DEFMACRO: redefining function SHORT-SITE-NAME in top-level, was defined in /home/adam/files/clisp/package/clisp-build/debian/build/config.fas SHORT-SITE-NAME Compare: $ clisp -q -norc [1]> (setf *suppress-check-redefinition* t) T [2]> (defun short-site-name ()) SHORT-SITE-NAME [3]> (defun car ()) CAR Was this your intention? Your initial response was that removing this warning has nothing to do with package locks (whether a warning is printed is a different issue to whether a symbol should be locked). Yet your fix eliminates package locks when the dynamic variable is true (I thought ext:without-package-lock already provides for this). This behaviour also doesn't appear to correspond with the description in the XML documentation: <!ENTITY suppress-check-redef "<link linkend='suppress-check-redef'><varname>CUSTOM:*SUPPRESS-CHECK-REDEFINITION*</varname></link> <formalpara id="suppress-check-redef"> <title>Variable &suppress-check-redef;</title> <para>When <firstterm>&suppress-check-redef;</firstterm> is &nil;, &clisp; issues a &warning-t; when a function (macro, variable, class, etc) is redefined in a different file than its original definition. </para></formalpara> Regards, Adam |
From: Adam W. <li...@co...> - 2003-06-08 02:11:08
|
On Sun, 2003-06-08 at 13:04, Sam Steingold wrote: > 1. you can now suppress redefinition check with > CUSTOM:*SUPPRESS-CHECK-REDEFINITION* > > 2. SHORT-SITE-NAME and LONG-SITE-NAME now call uname(1) when (getenv > "ORGANIZATION") returns NIL. Brilliant, thanks! To my shame I missed that both were already in CVS. Regards, Adam PS: When ORGANIZATION is not defined as an environment variable the code: (defun short-site-name () (or (getenv "ORGANIZATION") (with-open-stream (s (make-pipe-input-stream "uname -n")) (read-line s)))) Turns out to be over 2000 times slower than calculating it once at compile time in .clisprc.lisp (where .clisprc.fas is the per-host compiled initialisation file): (defun static-short-site-name () #.(or (getenv "ORGANIZATION") (with-open-stream (s (make-pipe-input-stream "uname -n")) (read-line s)))) [17]> (compile 'short-site-name) short-site-name ; nil ; nil [18]> (compile 'static-short-site-name) static-short-site-name ; nil ; nil [19]> (time (loop for x from 1 to 1000 do (short-site-name))) Real time: 28.46807 sec. Run time: 0.48 sec. Space: 215896 Bytes nil [20]> (time (loop for x from 1 to 1000 do (static-short-site-name))) Real time: 0.012514 sec. Run time: 0.01 sec. Space: 3896 Bytes nil So if people are going to make use of short-site-name in multiple places it could make sense for them to cache the return value within their code. Thanks again Sam. |
From: Sam S. <sd...@gn...> - 2003-06-08 14:11:17
|
> * In message <105...@wo...> > * On the subject of "CUSTOM:*SUPPRESS-CHECK-REDEFINITION* [was Re: PATCH: configurable *warn-on-redefinition*]" > * Sent on 08 Jun 2003 14:10:59 +1200 > * Honorable Adam Warner <li...@co...> writes: > > (defun static-short-site-name () > #.(or (getenv "ORGANIZATION") > (with-open-stream (s (make-pipe-input-stream "uname -n")) > (read-line s)))) we cannot do this because this will fix the return value for a given image, people who use pre-built images will get wrong values. but we can cache it. -- Sam Steingold (http://www.podval.org/~sds) running RedHat9 GNU/Linux <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.palestine-central.com/links.html> Binaries die but source code lives forever. |