GNU bug report logs - #58109
simple-format vs (ice-9 format) bug in 3.0.7?

Previous Next

Package: guile;

Reported by: Christopher Lam <christopher.lck <at> gmail.com>

Date: Tue, 27 Sep 2022 10:24:01 UTC

Severity: normal

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #17 received at 58109 <at> debbugs.gnu.org (full text, mbox):

From: Jean Abou Samra <jean <at> abou-samra.fr>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: christopher.lck <at> gmail.com, 58109 <at> debbugs.gnu.org, guile-devel <at> gnu.org
Subject: Re: bug#58109: simple-format vs (ice-9 format) bug in 3.0.7?
Date: Sat, 1 Oct 2022 16:14:17 +0200

Le 01/10/2022 à 15:40, Ludovic Courtès a écrit :
> Hi,
>
> Jean Abou Samra <jean <at> abou-samra.fr> skribis:
>
>> Uh, at the end of module/ice-9/format.scm, there is
>>
>> ;; Thanks to Shuji Narazaki
>> (module-set! the-root-module 'format format)
>>
>> which dates back to
>>
>> commit 14469b7c69feb0f2c5b8a093f19fe2a548b31c5b
>> Author: Greg J. Badros <gjb <at> cs.washington.edu>
>> Date:   Thu Jan 20 20:58:30 2000 +0000
> [...]
>
>> This probably predates #:replace and could be removed now, right?
> Yes, it could be removed, but probably not before the 4.0 series.
>
> The ‘-Wformat’ warning introduced sometime in the 2.0 or 2.2 series
> prepared for that removal by warning about simple-format/format
> mismatches, but there’s probably still code out there that assumes
> ‘format’ is the full-blown ‘format’, even when (ice-9 format) is not
> explicitly imported.



OK, understood. How about adding comments and documentation?

diff --git a/doc/ref/misc-modules.texi b/doc/ref/misc-modules.texi
index 6c899a905..2c00ed859 100644
--- a/doc/ref/misc-modules.texi
+++ b/doc/ref/misc-modules.texi
@@ -1122,6 +1122,13 @@ you try to use one of them.  The reason for two 
versions is that the
 full @code{format} is fairly large and requires some time to load.
 @code{simple-format} is often adequate too.

+Beware that when @code{(ice-9 format)} is loaded, it replaces the
+binding for @code{format} on the toplevel.  If your module loads
+another module that loads @code{(ice-9 format)}, then your module
+will see the @code{format} function from @code{(ice-9 format)},
+even if it does not itself import @code{(ice-9 format)}.  This is
+legacy behavior and may be removed in a future Guile version.
+

 @node File Tree Walk
 @section File Tree Walk
diff --git a/module/ice-9/format.scm b/module/ice-9/format.scm
index ee7cba910..026fd9b54 100644
--- a/module/ice-9/format.scm
+++ b/module/ice-9/format.scm
@@ -32,6 +32,8 @@
 (define-module (ice-9 format)
   #:autoload (ice-9 pretty-print) (pretty-print truncated-print)
   #:autoload (ice-9 i18n)         (%global-locale number->locale-string)
+  ;; Actually replaces the global format as soon as loaded; see the end
+  ;; of this file.
   #:replace (format))

 (define format:version "3.0")
@@ -83,7 +85,7 @@
   ;; format's user error handler

   (define (format-error . args)       ; never returns!
-    (with-throw-handler #t
+    (with-throw-handler #t
       (lambda ()
         (let ((port (current-error-port)))
           (unless (zero? %arg-pos)
@@ -1560,5 +1562,10 @@
           (close-port port)
           str)))))

-;; Thanks to Shuji Narazaki
+;; Set the format variable in the root module.  This is legacy and
+;; no longer necessary.  It means that as soon as (ice-9 format) is
+;; loaded somewhere by some module, the predefined binding for format
+;; becomes the extended format function, even in modules where (ice-9 
format)
+;; isn't imported.  Because of this, removing this line should be done
+;; when a backwards compatibility break is allowed.
 (module-set! the-root-module 'format format)




Best,
Jean





This bug report was last modified 2 years and 224 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.