CLISP CLOS style warnings
Pascal Bourguignon
pjb at informatimago.com
Tue Aug 1 15:21:12 UTC 2017
> On 1 Aug 2017, at 17:08, Sam Steingold <sds at gnu.org> wrote:
>
>> * Faré <snuerr at tznvy.pbz> [2017-08-01 10:07:33 -0400]:
>>
>>> To mark a generic function as user-extendable, one can now use a
>>> declaration:
>>>
>>> --8<---------------cut here---------------start------------->8---
>>> (defgeneric perform (...)
>>> (declare #+clisp (dynamically-modifiable))
>>> ...)
>>> (defgeneric operation-done-p (...)
>>> (declare #+clisp (dynamically-modifiable))
>>> ...)
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>> The declaration is now in `hg tip` (but has not been released yet).
>>>
>> Will that declaration cause a warning or error on older versions of
>> clisp? If yes, what read-time conditional more precise than #+clisp
>> can I use to only enable on recent enough versions of clisp?
>
> My first reaction was
>
> --8<---------------cut here---------------start------------->8---
> (declaim (declaration dynamically-modifiable))
> --8<---------------cut here---------------end--------------->8---
>
> but for some reason it does not work with defgeneric.
> Sorry.
1- when naming an implementation-specific declaration, we need to know what package it comes from!
(Now, an implementation could use only the symbol-name of the declaration so it would accept with the same semantics any package, but this would be a problem if the program uses the same symbol name in a different package to mean something else, so I would advise implementations to avoid using symbol-names for declarations, and instead to specify a specific package).
2- indeed the correct way to use implementation specific declarations is to declaim them.
#-clisp (defpackage “EXT” #| be careful with those 💣🔪🔫 smart quotes! |#
(:use)
(:export “DYNAMICALLY-MODIFIABLE”))
(declaim (declaration ext:dynamically-modifiable))
(defgeneric foo (bar)
(declare ext:dynamically-modifiable)))
It works perfectly, but on clisp, since DYNAMICALLY-MODIFIABLE doesn’t come from EXT.
Where does it come from???
[pjb at despina :0.0 ~]$ clall '(compile-file "/tmp/d.lisp")'
Armed Bear Common Lisp:
========================================================================
Implementation: Armed Bear Common Lisp 1.4.0
on Mac OS X 10.12.6
on X86_64 NIL (despina.home)
Reading of: "(compile-file \"/tmp/d.lisp\")"
signaled no error
Evaluation of: (COMPILE-FILE "/tmp/d.lisp")
signaled the following error:
#<READER-ERROR {2D87B142}>
The symbol "DYNAMICALLY-MODIFIABLE" was not found in package EXT.
wrote nothing on *ERROR-OUTPUT*
wrote nothing on *TRACE-OUTPUT*
wrote the following *STANDARD-OUTPUT* (lines excluded):
------------------------------------------------------------------------
; Compiling /private/tmp/d.lisp ...
; (DEFPACKAGE "EXT" ...)
------------------------------------------------------------------------
returned no value
Clozure Common Lisp:
--> #P"/private/tmp/d.dx64fsl", NIL, NIL
CLISP:
========================================================================
Implementation: CLISP 2.49 (2010-07-07) (built 3704439585) (memory 3704439775)
on
/usr/bin/clang -arch x86_64 -pipe -Wl,-no_pie -arch x86_64 -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -O -DUNIX_BINARY_DISTRIB -DENABLE_UNICODE -DDYNAMIC_MODULES -I. -L/opt/local/lib -Wl,-headerpad_max_install_names -arch x86_64 -lintl -Wl,-framework -Wl,CoreFoundation -lreadline -lncurses -liconv -L/opt/local/lib -lsigsegv libgnu_cl.a -L/opt/local/lib
SAFETY=0 HEAPCODES STANDARD_HEAPCODES WIDE_HARD GENERATIONAL_GC SPVW_BLOCKS SPVW_MIXED TRIVIALMAP_MEMORY
libsigsegv 2.11
libiconv 1.15
libreadline 7.0 GNU C 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)
on X86_64 X86_64 (despina.home [192.168.7.10])
Reading of: "(compile-file \"/tmp/d.lisp\")"
signaled no error
Evaluation of: (COMPILE-FILE "/tmp/d.lisp")
signaled the following error:
#<SYSTEM::SIMPLE-PACKAGE-ERROR #x000000020023FE91>
READ from #<CLOSED INPUT BUFFERED FILE-STREAM CHARACTER #P"/tmp/d.lisp" @5>: #<PACKAGE
EXT> has no external symbol with name "DYNAMICALLY-MODIFIABLE"
wrote the following *ERROR-OUTPUT* (lines excluded):
------------------------------------------------------------------------
0 errors, 0 warnings
------------------------------------------------------------------------
wrote nothing on *TRACE-OUTPUT*
wrote the following *STANDARD-OUTPUT* (lines excluded):
------------------------------------------------------------------------
;; Compiling file /tmp/d.lisp ...
------------------------------------------------------------------------
returned no value
ECL:
========================================================================
Implementation: ECL 16.1.2
on Darwin 16.7.0
on x86_64 NIL (despina.home)
Reading of: "(compile-file \"/tmp/d.lisp\")"
signaled no error
Evaluation of: (COMPILE-FILE "/tmp/d.lisp")
signaled the following error:
#<a C:COMPILER-NOTE>
Note:
Invoking external command:
gcc -I. -I/usr/local/include/ -g -O2 -fPIC -fno-common -D_THREAD_SAFE -Ddarwin -O2 -c /private/tmp/d.c -o /private/tmp/d.o
wrote nothing on *ERROR-OUTPUT*
wrote nothing on *TRACE-OUTPUT*
wrote the following *STANDARD-OUTPUT* (lines excluded):
------------------------------------------------------------------------
;;; Loading #P"/usr/local/lib/ecl-16.1.2/cmp.fas"
;;;
;;; Compiling /tmp/d.lisp.
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
;;;
;;; Compiling (DEFGENERIC FOO ...).
;;; End of Pass 1.
------------------------------------------------------------------------
returned no value
SBCL:; compiling file "/private/tmp/d.lisp" (written 01 AUG 2017 05:19:58 PM):
; compiling (DEFPACKAGE "EXT" ...)
; compiling (DECLAIM (DECLARATION EXT:DYNAMICALLY-MODIFIABLE))
; compiling (DEFGENERIC FOO ...)
; /tmp/d.fasl written
; compilation finished in 0:00:00.003
--> #P"/private/tmp/d.fasl", T, T
========================================================================
[pjb at despina :0.0 ~]$
--
__Pascal J. Bourguignon__
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20170801/fe82770c/attachment-0001.html>
More information about the asdf-devel
mailing list