Re: Problem with SBCL pprint
Robert Goldman <[email protected]> Fri, 27 Mar 2026 17:59:27 -0500
| Newsgroups | gmane.lisp.steel-bank.general |
|---|---|
| Message-ID | <[email protected]> |
--===============8350754232106741611== Content-Type: multipart/alternative; boundary="=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_=" Content-Transfer-Encoding: 8bit --=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_= Content-Type: text/plain; charset=UTF-8; format=flowed; markup=markdown Content-Transfer-Encoding: 8bit I see -- right. I forgot that there was a cost expression in there. And ... my machine crashed and I lost the fixed version of the file. So yes, that *did* fix it. Thank you and sorry for the confusion! ``` commit 1fe64581ab1f330279edb223193b381b89e3f8d4 (HEAD -> binding-stack-issue) Author: Robert P. Goldman <[email protected]> Date: Fri Mar 27 17:57:30 2026 -0500 Stas Bokuraev fixed stack overflow problem on SBCL. Setting the pprint-dispatch-table entry for `integer` caused SBCL to go into infinite recursion printing an integer. Removing this entry on SBCL fixed it. ``` On 27 Mar 2026, at 17:44, Stas Boukarev wrote: > 1 is an integer, last time I checked. > > On Sat, Mar 28, 2026 at 1:43 AM Robert Goldman <[email protected]> > wrote: >> >> I'm not sure I understand. Why is it that you think printing integers >> is the problem here? >> >> It may be the case that setting the pprint dispatch table for >> integers could cause a problem, but the file of test data causing >> this error has no integers in it. So I'm not sure why you think that >> the pprint dispatch entry for integers would fix the problem. The >> file read is a file in PDDL (the input language of the international >> planning competition). Here, with no nice formatting is that file. >> Using the special pretty-print table to display it nicely is what >> causes the error. >> >> (SIFT-PDDL:DEFINE (SIFT-PDDL:DOMAIN >> SIFT-PDDL::OPENSTACKS-SEQUENCEDSTRIPS-ADL) (:REQUIREMENTS :TYPING >> :ADL :ACTION-COSTS) (:TYPES SIFT-PDDL::ORDER SIFT-PDDL::PRODUCT >> SIFT-PDDL::COUNT) (:CONSTANTS SIFT-PDDL::O4 - SIFT-PDDL::ORDER >> SIFT-PDDL::P4 - SIFT-PDDL::PRODUCT) (:PREDICATES (SIFT-PDDL::INCLUDES >> SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) >> (SIFT-PDDL::WAITING SIFT-PDDL::?O - SIFT-PDDL::ORDER) >> (SIFT-PDDL::STARTED SIFT-PDDL::?O - SIFT-PDDL::ORDER) >> (SIFT-PDDL::SHIPPED SIFT-PDDL::?O - SIFT-PDDL::ORDER) >> (SIFT-PDDL::MADE SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?S - SIFT-PDDL::COUNT) >> (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?S SIFT-PDDL::?NS - >> SIFT-PDDL::COUNT)) (:FUNCTIONS (SIFT-PDDL::TOTAL-COST) - NUMBER) >> (:ACTION SIFT-PDDL::MAKE-PRODUCT :PARAMETERS (SIFT-PDDL::?P - >> SIFT-PDDL::PRODUCT) :PRECONDITION (AND (NOT (SIFT-PDDL::MADE >> SIFT-PDDL::?P)) (SIFT-PDDL:FORALL (SIFT-PDDL::?O - SIFT-PDDL::ORDER) >> (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL::?O SIFT-PDDL::?P) >> (SIFT-PDDL::STARTED SIFT-PDDL::?O)))) :EFFECT (SIFT-PDDL::MADE >> SIFT-PDDL::?P)) (:ACTION SIFT-PDDL::START-ORDER :PARAMETERS >> (SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL >> SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDITION (AND >> (SIFT-PDDL::WAITING SIFT-PDDL::?O) (SIFT-PDDL::STACKS-AVAIL >> SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?NEW-AVAIL >> SIFT-PDDL::?AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::WAITING >> SIFT-PDDL::?O)) (SIFT-PDDL::STARTED SIFT-PDDL::?O) (NOT >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL)) (SIFT-PDDL::STACKS-AVAIL >> SIFT-PDDL::?NEW-AVAIL))) (:ACTION SIFT-PDDL::SHIP-ORDER :PARAMETERS >> (SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL >> SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDITION (AND >> (SIFT-PDDL::STARTED SIFT-PDDL::?O) (SIFT-PDDL:FORALL (SIFT-PDDL::?P - >> SIFT-PDDL::PRODUCT) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES >> SIFT-PDDL::?O SIFT-PDDL::?P) (SIFT-PDDL::MADE SIFT-PDDL::?P))) >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT >> SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL)) :EFFECT (AND (NOT >> (SIFT-PDDL::STARTED SIFT-PDDL::?O)) (SIFT-PDDL::SHIPPED >> SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?AVAIL)) >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (:ACTION >> SIFT-PDDL::OPEN-NEW-STACK :PARAMETERS (SIFT-PDDL::?OPEN >> SIFT-PDDL::?NEW-OPEN - SIFT-PDDL::COUNT) :PRECONDITION (AND >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN) (SIFT-PDDL::NEXT-COUNT >> SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN)) :EFFECT (AND (NOT >> (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN)) (SIFT-PDDL::STACKS-AVAIL >> SIFT-PDDL::?NEW-OPEN) (SIFT-PDDL:INCREASE (SIFT-PDDL::TOTAL-COST) >> 1))) (:ACTION SIFT-PDDL::DIVERGENCE :PARAMETERS NIL :PRECONDITION NIL >> :EFFECT (AND (SIFT-PDDL::WAITING SIFT-PDDL::O4) (NOT (SIFT-PDDL::MADE >> SIFT-PDDL::P4)) (NOT (SIFT-PDDL::STARTED SIFT-PDDL::O4))))) >> >> In this dialect of PDDL there are, in fact, no integers (the integers >> in the above are all parts of symbols, such as O4). >> >> On 27 Mar 2026, at 17:20, Stas Boukarev wrote: >> >> I had no errors when using: >> (lambda (str obj) >> (let ((print-pprint-dispatch (copy-pprint-dispatch nil))) >> (format str "~d" obj))) >> >> And I can't speak to allegro or clozure. >> >> On Sat, Mar 28, 2026 at 1:17 AM Robert Goldman [email protected] >> wrote: >> >> On 27 Mar 2026, at 15:55, Stas Boukarev wrote: >> >> You have >> (set-pprint-dispatch 'integer >> #'(lambda (str obj) >> (format str "~d" obj)) >> 0 pddl-pprint-dispatch) >> >> Which results in endless recursion. >> >> I just retried the test with the set-pprint-dispatch calls for >> integer and float preceded by #-sbcl, but I am getting the same >> failure as before (possibly from a different cause). >> >> Thank you very much, Stas! Do you have any clue why this infinite >> recursion would be happening only in SBCL? >> >> On Fri, Mar 27, 2026 at 11:32 PM Robert Goldman [email protected] >> wrote: >> >> Still working on my error. I have found a minimum case, and it's >> available here: >> >> https://github.com/rpgoldman/pddl-tools/pull/24 >> >> This merge request gives instructions for replication. In summary, >> it's just sbcl --load "do-test.lisp" >> >> There's a relatively small file that is read and then pprinted. This >> causes a stack overflow on SBCL. On Allegro, it prints fine. There >> appears to be some sort of spurious proliferation of stack frames, >> which may indicate an actual bug in SBCL (or there's something >> standards-variant that Allegro and CCL do differently). >> >> I would never bet on my having found a bug in SBCL versus making some >> obscure mistake, though! >> >> ________________________________ >> >> Sbcl-help mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/sbcl-help --=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_= Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE html> <html> <head> <meta http-equiv=3D"Content-Type" content=3D"text/xhtml; charset=3Dutf-8"= > </head> <body><div style=3D"font-family: sans-serif;"><div class=3D"markdown" sty= le=3D"white-space: normal;"> <p dir=3D"auto">I see -- right. I forgot that there was a cost expressio= n in there.</p> <p dir=3D"auto">And ... my machine crashed and I lost the fixed version o= f the file. So yes, that <em>did</em> fix it. Thank you and sorry for t= he confusion!</p> <pre style=3D"margin-left: 15px; margin-right: 15px; padding: 5px; backgr= ound-color: #F7F7F7; border-radius: 5px 5px 5px 5px; overflow-x: auto; ma= x-width: 90vw;"><code style=3D"margin: 0 0; border-radius: 3px; backgroun= d-color: #F7F7F7; padding: 0px;">commit 1fe64581ab1f330279edb223193b381b8= 9e3f8d4 (HEAD -> binding-stack-issue) Author: Robert P. Goldman <[email protected]> Date: Fri Mar 27 17:57:30 2026 -0500 Stas Bokuraev fixed stack overflow problem on SBCL. Setting the pprint-dispatch-table entry for `integer` caused SBCL to go into infinite recursion printing an integer. Removing this entry on SBCL fixed it. </code></pre> <p dir=3D"auto">On 27 Mar 2026, at 17:44, Stas Boukarev wrote:</p> <blockquote style=3D"margin: 0 0 5px; padding-left: 5px; border-left: 2px= solid #777777; color: #777777;"> <p dir=3D"auto">1 is an integer, last time I checked.</p> <p dir=3D"auto">On Sat, Mar 28, 2026 at 1:43=E2=80=AFAM Robert Goldman <a= href=3D"mailto:[email protected]" style=3D"color: #777777;">rpgoldman@= sift.info</a> wrote:</p> <blockquote style=3D"margin: 0 0 5px; padding-left: 5px; border-left: 2px= solid #777777; border-left-color: #999999; color: #999999;"> <p dir=3D"auto">I'm not sure I understand. Why is it that you think print= ing integers is the problem here?</p> <p dir=3D"auto">It may be the case that setting the pprint dispatch table= for integers could cause a problem, but the file of test data causing th= is error has no integers in it. So I'm not sure why you think that the pp= rint dispatch entry for integers would fix the problem. The file read is = a file in PDDL (the input language of the international planning competit= ion). Here, with no nice formatting is that file. Using the special prett= y-print table to display it nicely is what causes the error.</p> <p dir=3D"auto">(SIFT-PDDL:DEFINE (SIFT-PDDL:DOMAIN SIFT-PDDL::OPENSTACKS= -SEQUENCEDSTRIPS-ADL) (:REQUIREMENTS :TYPING :ADL :ACTION-COSTS) (:TYPES = SIFT-PDDL::ORDER SIFT-PDDL::PRODUCT SIFT-PDDL::COUNT) (:CONSTANTS SIFT-PD= DL::O4 - SIFT-PDDL::ORDER SIFT-PDDL::P4 - SIFT-PDDL::PRODUCT) (:PREDICATE= S (SIFT-PDDL::INCLUDES SIFT-PDDL::?O - SIFT-PDDL::ORDER SIFT-PDDL::?P - S= IFT-PDDL::PRODUCT) (SIFT-PDDL::WAITING SIFT-PDDL::?O - SIFT-PDDL::ORDER) = (SIFT-PDDL::STARTED SIFT-PDDL::?O - SIFT-PDDL::ORDER) (SIFT-PDDL::SHIPPED= SIFT-PDDL::?O - SIFT-PDDL::ORDER) (SIFT-PDDL::MADE SIFT-PDDL::?P - SIFT-= PDDL::PRODUCT) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?S - SIFT-PDDL::COUNT)= (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?S SIFT-PDDL::?NS - SIFT-PDDL::COUNT))= (:FUNCTIONS (SIFT-PDDL::TOTAL-COST) - NUMBER) (:ACTION SIFT-PDDL::MAKE-P= RODUCT :PARAMETERS (SIFT-PDDL::?P - SIFT-PDDL::PRODUCT) :PRECONDITION (AN= D (NOT (SIFT-PDDL::MADE SIFT-PDDL::?P)) (SIFT-PDDL:FORALL (SIFT-PDDL::?O = - SIFT-PDDL::ORDER) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL::?O S= IFT-PDDL::?P) (SIFT-PDDL::STARTED SIFT-PDDL::?O)))) :EFFECT (SIFT-PDDL::M= ADE SIFT-PDDL::?P)) (:ACTION SIFT-PDDL::START-ORDER :PARAMETERS (SIFT-PDD= L::?O - SIFT-PDDL::ORDER SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL - SIFT-P= DDL::COUNT) :PRECONDITION (AND (SIFT-PDDL::WAITING SIFT-PDDL::?O) (SIFT-P= DDL::STACKS-AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?N= EW-AVAIL SIFT-PDDL::?AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::WAITING SIFT-P= DDL::?O)) (SIFT-PDDL::STARTED SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAI= L SIFT-PDDL::?AVAIL)) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (= :ACTION SIFT-PDDL::SHIP-ORDER :PARAMETERS (SIFT-PDDL::?O - SIFT-PDDL::ORD= ER SIFT-PDDL::?AVAIL SIFT-PDDL::?NEW-AVAIL - SIFT-PDDL::COUNT) :PRECONDIT= ION (AND (SIFT-PDDL::STARTED SIFT-PDDL::?O) (SIFT-PDDL:FORALL (SIFT-PDDL:= :?P - SIFT-PDDL::PRODUCT) (SIFT-PDDL:IMPLY (SIFT-PDDL::INCLUDES SIFT-PDDL= ::?O SIFT-PDDL::?P) (SIFT-PDDL::MADE SIFT-PDDL::?P))) (SIFT-PDDL::STACKS-= AVAIL SIFT-PDDL::?AVAIL) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?AVAIL SIFT-PD= DL::?NEW-AVAIL)) :EFFECT (AND (NOT (SIFT-PDDL::STARTED SIFT-PDDL::?O)) (S= IFT-PDDL::SHIPPED SIFT-PDDL::?O) (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL:= :?AVAIL)) (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?NEW-AVAIL))) (:ACTION SIFT= -PDDL::OPEN-NEW-STACK :PARAMETERS (SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN = - SIFT-PDDL::COUNT) :PRECONDITION (AND (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL= ::?OPEN) (SIFT-PDDL::NEXT-COUNT SIFT-PDDL::?OPEN SIFT-PDDL::?NEW-OPEN)) := EFFECT (AND (NOT (SIFT-PDDL::STACKS-AVAIL SIFT-PDDL::?OPEN)) (SIFT-PDDL::= STACKS-AVAIL SIFT-PDDL::?NEW-OPEN) (SIFT-PDDL:INCREASE (SIFT-PDDL::TOTAL-= COST) 1))) (:ACTION SIFT-PDDL::DIVERGENCE :PARAMETERS NIL :PRECONDITION N= IL :EFFECT (AND (SIFT-PDDL::WAITING SIFT-PDDL::O4) (NOT (SIFT-PDDL::MADE = SIFT-PDDL::P4)) (NOT (SIFT-PDDL::STARTED SIFT-PDDL::O4)))))</p> <p dir=3D"auto">In this dialect of PDDL there are, in fact, no integers (= the integers in the above are all parts of symbols, such as O4).</p> <p dir=3D"auto">On 27 Mar 2026, at 17:20, Stas Boukarev wrote:</p> <p dir=3D"auto">I had no errors when using:<br> (lambda (str obj)<br> (let ((print-pprint-dispatch (copy-pprint-dispatch nil)))<br> (format str "~d" obj)))</p> <p dir=3D"auto">And I can't speak to allegro or clozure.</p> <p dir=3D"auto">On Sat, Mar 28, 2026 at 1:17=E2=80=AFAM Robert Goldman <a= href=3D"mailto:[email protected]" style=3D"color: #999999;">rpgoldman@= sift.info</a> wrote:</p> <p dir=3D"auto">On 27 Mar 2026, at 15:55, Stas Boukarev wrote:</p> <p dir=3D"auto">You have<br> (set-pprint-dispatch 'integer<br> #'(lambda (str obj)<br> (format str "~d" obj))<br> 0 pddl-pprint-dispatch)</p> <p dir=3D"auto">Which results in endless recursion.</p> <p dir=3D"auto">I just retried the test with the set-pprint-dispatch call= s for integer and float preceded by #-sbcl, but I am getting the same fai= lure as before (possibly from a different cause).</p> <p dir=3D"auto">Thank you very much, Stas! Do you have any clue why this = infinite recursion would be happening only in SBCL?</p> <p dir=3D"auto">On Fri, Mar 27, 2026 at 11:32=E2=80=AFPM Robert Goldman <= a href=3D"mailto:[email protected]" style=3D"color: #999999;">rpgoldman= @sift.info</a> wrote:</p> <p dir=3D"auto">Still working on my error. I have found a minimum case, a= nd it's available here:</p> <p dir=3D"auto"><a href=3D"https://github.com/rpgoldman/pddl-tools/pull/2= 4" style=3D"color: #999999;">https://github.com/rpgoldman/pddl-tools/pull= /24</a></p> <p dir=3D"auto">This merge request gives instructions for replication. In= summary, it's just sbcl --load "do-test.lisp"</p> <p dir=3D"auto">There's a relatively small file that is read and then ppr= inted. This causes a stack overflow on SBCL. On Allegro, it prints fine. = There appears to be some sort of spurious proliferation of stack frames, = which may indicate an actual bug in SBCL (or there's something standards-= variant that Allegro and CCL do differently).</p> <p dir=3D"auto">I would never bet on my having found a bug in SBCL versus= making some obscure mistake, though!</p> <hr style=3D"border: 0; height: 1px; background: #333; background-image: = linear-gradient(to right, #ccc, #333, #ccc);"> <p dir=3D"auto">Sbcl-help mailing list<br> <a href=3D"mailto:[email protected]" style=3D"color: #99999= 9;">[email protected]</a><br> <a href=3D"https://lists.sourceforge.net/lists/listinfo/sbcl-help" style=3D= "color: #999999;">https://lists.sourceforge.net/lists/listinfo/sbcl-help<= /a></p> </blockquote> </blockquote> </div> </div> </body> </html> --=_MailMate_185A2642-D07B-4454-A6E9-E58D2C4D42F2_=-- --===============8350754232106741611== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============8350754232106741611== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Sbcl-help mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sbcl-help --===============8350754232106741611==--