Greetings, thanks so much for your report, and please excuse the delayed reply!
It sure would be great to support asdf/quicklisp in the next release, so your efforts are particularly appreciated. 1) I can export chdir, but in truth there are probably quite a few anomalies in the export list of 'si, and I don't have time for a full audit now. In my view, the only people who should care write (use-package "SI")(chdir ...). If you are writing (si:chdir ...) anyway, just add the other colon to be safe. 2) I do think (declaim (ftype function foo)) is wrong, as ftype explicitly targets the call *signature* and not the type (function) of the object. Otherwise ftype and function are completely redundant. But I do think the generic 'forward reference' is (declaim (ftype (function (&rest t) (values &rest t)))). (Or in older GCL parlance, '((*) *)). 3) I do not think this issue lies in pcl, but from your trace rather in one of ASDF/SYSTEM:SYSTEM or ASDF/OPERATE:LOAD-SYSTEM, most likely because one is calling #'list (or its backquoted equivalent) with too many arguments. The generic fix is simple, replace with append or nconc on sublists. A more comprehensive, serviceable but potentially more dangerous approach is to shadow 'list and define it as a macro, as we currently do in FRICAS. I can supply details if interested. In general, your useful and interesting redefinition of *debugger-hook* is unnecessary -- typically one does (si::use-fast-links nil)(buggy-command) and then you are in the native GCL debugger with keyword arguments. Please let me know if problems persist. While it is possible, it is unlikely I will have time to delve into this deeply myself before the next release. Take care, Frederico Muñoz <[email protected]> writes: > Hello, > > I'm trying to determine the status of Quicklisp with GCL, especially > considering the advances in ANSI compliance. I've found some apparently > fixable issues, but stumbled into one that seems substantially more > involved - but maybe I'm wrong on both counts! > > 1. ASDF and chdir > ================= > > The current asdf.lisp file has: > > : (defun chdir (x) > : "Change current directory, as per POSIX chdir(2), to a given pathname > object" > : (if-let (x (pathname x)) > : [...] > : #+gcl (system:chdir x) > > > It doesn't seem that chdir is exported though: > > : $ gcl > : GCL (GNU Common Lisp) 2.7.1 Thu Apr 10 09:38:27 PM EDT 2025 ANSI git: > Version_2_7_0 > : [...] > : >(fboundp 'system:chdir) > : > : Error: > : Fast links are on: do (si::use-fast-links nil) for debugging > : Signalled by "AN ANONYMOUS FUNCTION". > : > : INTERNAL-SIMPLE-ERROR: Cannot find the external symbol CHDIR in #<"SYSTEM" > package>. > : > : Broken at NIL. Type :H for Help. > : 1 Return to top level. > : >>1 > : > : Top level. > : >(fboundp 'system::chdir) > : > : T > > > *Fix*: (system::chdir) works, but if it's supposed to be exported, then > something is wrong. Otherwise, ASDF should be updated. > > 2. ASDF (declaim (ftype ...)) > ============================= > > Loading asdf.lisp will them give this: > > : Error: The FTYPE proclamation (FTYPE FUNCTION ENSURE-PATHNAME) is illegal. > > This is because of: > > : (with-upgradability () > : (declaim (ftype function ensure-pathname)) ; forward reference > > I've read the HyperSpec > (http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/dec_ftype.html) > on FTYPE, and... well, I can see it both ways, this is likely something > debated to death in terms of spirit vs letter of the spec. I would think > that "function" by itself would work, but GCL expects (function ...). > > This seems to do the trick: > > : ;; GCL > : (declaim (ftype (function (&rest t) t) ensure-pathname)) > > *Fix*: if the above is correct, adding a +gcl option that uses it would > solve this (or, if there's a consensus that it's the best approach, AND > if every other compiler also uses it, change it for all). Either way, > easily fixable (unless I'm drastically simplifying things). > > 3. LET* and LAMBDA-PARAMETERS-LIMIT < 64 > ======================================== > > I'm not sure if I got the root cause of this correct, but this is the > more complex issue. It surfaces when loading Quicklisp setup.lisp, but > is still in ASDF. This is what happens: > > : ;; Loading "init.lsp" > : ;; Loading #P"/home/fsmunoz/src/lisp/quicklisp-gcl/asdf.lisp" > : ;; Compiling /tmp/gazonk_543141_0.lsp. > : [...] > : ;; Finished loading #P"/tmp/gazonk_543141_0.o" > : ;; Finished loading #P"/home/fsmunoz/src/lisp/quicklisp-gcl/asdf.lisp" > : ;; Loading #P"/home/fsmunoz/src/lisp/quicklisp-gcl/quicklisp.lisp" > : > : ==== quicklisp quickstart 2015-01-28 loaded ==== > : > : To continue with installation, evaluate: (quicklisp-quickstart:install) > : > : For installation options, evaluate: (quicklisp-quickstart:help) > : > : ;; Finished loading #P"/home/fsmunoz/src/lisp/quicklisp-gcl/quicklisp.lisp" > : ;; Loading "~/quicklisp/setup.lisp" > : ;; Finished loading "~/quicklisp/setup.lisp" > : ;; Compiling /tmp/gazonk_543141_0.lsp. > : ;; End of Pass 1. > : ;; End of Pass 2. > : OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3 > : ;; Finished compiling /tmp/gazonk_543141_0.o. > : ;; Loading #P"/tmp/gazonk_543141_0.o" > : ;; start address for /tmp/gazonk_543141_0.o 0x3681010 > : ;; Finished loading #P"/tmp/gazonk_543141_0.o" > : (ql:quickload "alexandria") > : Error: > : Signalled by LET*. > : Condition in LET* [or a callee]: INTERNAL-SIMPLE-PROGRAM-ERROR: LET* [or a > callee] requires less than sixty-four arguments. > : > : Broken at SYSTEM::BREAK-LEVEL. Type :H for Help. > : [...] > : 148 Return to debug level 1. > : 149 Segmentation violation: c stack ok:signalling errorSegmentation > violation: c stack ok:signalling error > : Unrecoverable error: Segmentation violation.. > > This happens in (ql:quickload "alexandria"), but seemingly due to > (asdf:load-system :alexandria) being called: > > : ; Loading "init.lsp" > : ;; Loading #P"/home/fsmunoz/src/lisp/quicklisp-gcl/asdf.lisp" > : Finished loading "init.lsp" > : GCL (GNU Common Lisp) 2.7.1 Thu Apr 10 09:38:27 PM EDT 2025 ANSI git: > Version_2_7_0 > : [...] > : > : (asdf:load-system :alexandria) > : > : ;; Compiling /tmp/gazonk_545577_0.lsp. > : ;; End of Pass 1. > : ;; End of Pass 2. > : OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3 > : ;; Finished compiling /tmp/gazonk_545577_0.o. > : ;; Loading #P"/tmp/gazonk_545577_0.o" > : ;; start address for /tmp/gazonk_545577_0.o 0x367d420 > : ;; Finished loading #P"/tmp/gazonk_545577_0.o" > : ;; Compiling /tmp/gazonk_545577_0.lsp. > : ;; End of Pass 1. > : ;; End of Pass 2. > : OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3 > : ;; Finished compiling /tmp/gazonk_545577_0.o. > : ;; Loading #P"/tmp/gazonk_545577_0.o" > : ;; start address for /tmp/gazonk_545577_0.o 0x367e1c0 > : ;; Finished loading #P"/tmp/gazonk_545577_0.o" > : > : Error: > : Signalled by LET*. > : Condition in LET* [or a callee]: INTERNAL-SIMPLE-PROGRAM-ERROR: LET* [or a > callee] requires less than sixty-four arguments. > : > : Broken at SYSTEM::BREAK-LEVEL. Type :H for Help. > : Error: > : Signalled by SYSTEM:LAMBDA-CLOSURE. > : > : 1 Segmentation violation: c stack ok:signalling error > : Condition in SYSTEM:LAMBDA-CLOSURE [or a callee]: INTERNAL-SIMPLE-ERROR: > Caught fatal error [memory may be damaged]: Segmentation violation. > > The reason I'm mentioning LAMBDA-PARAMETERS-LIMIT and PCL is because, and > after > trial and error and following different breadcrumbs, I added this to > test the PCL hypothesis: > > : ;; init.lsp (same dir) > : [...] > : (defvar *current-gf* nil) > : (defvar *gf-log* nil) > : > : ;; Capture the funcall > : (let ((original (symbol-function 'pcl::set-dfun))) > : (setf (symbol-function 'pcl::set-dfun) > : (lambda (gf dfun cache info) > : (setf *current-gf* gf) > : (push (pcl::generic-function-name gf) *gf-log*) > : (funcall original gf dfun cache info)))) > : > : ;; Add to the debugger hook to print the last iteratction > : (setf *debugger-hook* > : (lambda (condition hook) > : (declare (ignore hook)) > : (format t "Condition: ~A~%" condition) > : (dotimes (i (min 30 (si::ihs-top))) > : (format t "~2D: ~A~%" i > : (subseq (prin1-to-string (si::ihs-fun i)) 0 80))) > : (si::bye 1))) > : ;; Load alexandria > : (asdf:load-system :alexandria) > > ... which gives this: > > : ;; Finished loading #P"/tmp/gazonk_553291_0.o" > : Condition: Condition in LET* [or a callee]: INTERNAL-SIMPLE-PROGRAM-ERROR: > LET* [or a callee] requires less than sixty-four arguments. > : 0: NIL > : 1: #<function 000000002db3cb40> > : 2: (SYSTEM:LAMBDA-CLOSURE > : NIL NIL NIL > : (ASDF/SYSTEM:SYSTEM > : &REST ASDF/OPERATE::K > : 3: (BLOCK > : ASDF/OPERATE:LOAD-SYSTEM > : (APPLY > : 'ASDF/OPERATE:OPERATE 'ASDF/LISP-ACTI > : 4: #<function 0000000001c006a0> > : 5: #<function 0000000001c57190> > : 6: #<function 0000000001c52c00> > : 7: #<function 000000002db324c0> > : 8: (SYSTEM:LAMBDA-CLOSURE > : NIL NIL NIL > : (PCL::.PV-CELL. > : PCL::.NEXT-METHOD-CALL. A > : 9: (BLOCK > : ASDF/OPERATE::|(PCL::FAST-METHOD OPERATE :AROUND (T T))| > : (MACROLET > : (( > : 10: (MACROLET > : ((PCL::PV-ENV > : ((PCL::PV PCL::CALLS PCL::PV-TABLE-SYMBOL PCL::PV-PA > : 11: (MACROLET > : ((PCL::CALL-NEXT-METHOD-BIND > : (&BODY PCL::BODY) (LIST* 'LET NIL PCL > : 12: (LET > : NIL > : (FLET > : ((CALL-NEXT-METHOD > : (&REST PCL::CNM-ARGS) (DECLARE (DYNAMI > : 13: (FLET > : ((CALL-NEXT-METHOD > : (&REST PCL::CNM-ARGS) (DECLARE (DYNAMIC-EXTENT PCL: > : 14: (LET* > : ((#:G157 > : (LIST* > : ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT > : 15: (BLOCK > : ASDF/OPERATE:OPERATE > : (UIOP/UTILITY:NEST > : (ASDF/SESSION:WITH-ASDF-SESSI > : [...] > > I'm not sure what to make of this (or even the validity), but the idea > that there's a conflict between how the PCL dispatch works, possibly > accumulating arguments that exceed the (relatively low) > MAX_ARGS/LAMBDA-PARAMETERS-LIMIT of GCL (SBCL has 1073741824, for > example). > > I'm using a init.lsp in the CWD... maybe I've missed it, but if not, > it would actually be a good thing to have a ~/.gclrc or something. > > Anyway, I'm sure that this is probably the wrong take, but if nothing > else I wanted to share it with others, perhaps there's something that > can be done to improve ASDF/Quicklisp support - which would be a > significant feature IMO. > > All the best, -- Camm Maguire [email protected] ========================================================================== "The earth is but one country, and mankind its citizens." -- Baha'u'llah
