unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#67255: define-library does not support 'rename' directives
@ 2023-11-18  5:46 Maxim Cournoyer
  2023-11-20 15:53 ` Timothy Sample
  2023-11-24 21:01 ` bug#67255: [PATCH v2] Use R7RS 'rename' syntax for exports Maxim Cournoyer
  0 siblings, 2 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2023-11-18  5:46 UTC (permalink / raw)
  To: 67255

Hi,

Our R7RS define-library syntax, from (ice-9 r7rs-library) does not
support renaming bindings to export, via 'rename' directives.  For
example, attempting to build srfi/125.sld, which reads:

--8<---------------cut here---------------start------------->8---
(define-library (srfi srfi-125)

  (export

   make-hash-table
   hash-table
   hash-table-unfold
   alist->hash-table

   hash-table?
   hash-table-contains?
   hash-table-empty?
   hash-table=?
   hash-table-mutable?

   hash-table-ref
   hash-table-ref/default

   hash-table-set!
   hash-table-delete!
   hash-table-intern!
   hash-table-update!
   hash-table-update!/default
   hash-table-pop!
   hash-table-clear!

   hash-table-size
   hash-table-keys
   hash-table-values
   hash-table-entries
   hash-table-find
   hash-table-count

   hash-table-map
   hash-table-for-each
   hash-table-map!
   hash-table-map->list
   hash-table-fold
   hash-table-prune!

   hash-table-copy
   hash-table-empty-copy
   hash-table->alist

   hash-table-union!
   hash-table-intersection!
   hash-table-difference!
   hash-table-xor!

   ;; The following procedures are deprecated by SRFI 125:

   (rename deprecated:hash                     hash)
   (rename deprecated:string-hash              string-hash)
   (rename deprecated:string-ci-hash           string-ci-hash)
   (rename deprecated:hash-by-identity         hash-by-identity)

   (rename deprecated:hash-table-equivalence-function
                                               hash-table-equivalence-function)
   (rename deprecated:hash-table-hash-function hash-table-hash-function)
   (rename deprecated:hash-table-exists?       hash-table-exists?)
   (rename deprecated:hash-table-walk          hash-table-walk)
   (rename deprecated:hash-table-merge!        hash-table-merge!)

   )

  (import (scheme base)
          (scheme write) ; for warnings about deprecated features
          (srfi 126)
          (except (srfi 128)
                  hash-salt      ; exported by (srfi 126)
                  string-hash    ; exported by (srfi 126)
                  string-ci-hash ; exported by (srfi 126)
                  symbol-hash    ; exported by (srfi 126)
                  ))

  (cond-expand
   ((library (scheme char))
    (import (scheme char)))
   (else
    (begin (define string-ci=? string=?))))

  (include "srfi-125/125.body.scm")

  )
--8<---------------cut here---------------end--------------->8---

Fails with:

--8<---------------cut here---------------start------------->8---
$ ./meta/guild compile -W3 ./module/srfi/srfi-125.scm
/module/srfi/srfi-128.scm.go
ice-9/boot-9.scm:1682:22: In procedure raise-exception:
Syntax error:
unknown location: source expression failed to match any pattern in form ((rename deprecated:hash hash) (rename deprecated:string-hash string-hash) (rename deprecated:string-ci-hash string-ci-hash) (rename deprecated:hash-by-identity hash-by-identity) (rename deprecated:hash-table-equivalence-function hash-table-equivalence-function) (rename deprecated:hash-table-hash-function hash-table-hash-function) (rename deprecated:hash-table-exists? hash-table-exists?) (rename deprecated:hash-table-walk hash-table-walk) (rename deprecated:hash-table-merge! hash-table-merge!))
--8<---------------cut here---------------end--------------->8---

Our define-module syntax does not have such a feature (of renaming
*exported* bindings), so this would seem to require new development on
that side first.

-- 
Thanks,
Maxim





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#67255: define-library does not support 'rename' directives
  2023-11-18  5:46 bug#67255: define-library does not support 'rename' directives Maxim Cournoyer
@ 2023-11-20 15:53 ` Timothy Sample
  2023-11-20 17:14   ` Timothy Sample
  2023-11-24 21:01 ` bug#67255: [PATCH v2] Use R7RS 'rename' syntax for exports Maxim Cournoyer
  1 sibling, 1 reply; 6+ messages in thread
From: Timothy Sample @ 2023-11-20 15:53 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 67255

Hi Maxim,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> Our R7RS define-library syntax, from (ice-9 r7rs-library) does not
> support renaming bindings to export, via 'rename' directives.

I appreciate your R7RS debugging effort.  Thanks!

> Our define-module syntax does not have such a feature (of renaming
> *exported* bindings), so this would seem to require new development on
> that side first.

I believe you’re mistaken.  At least, the manual says:

 -- syntax: export variable ...
     Add all VARIABLEs (which must be symbols or pairs of symbols) to
     the list of exported bindings of the current module.  If VARIABLE
     is a pair, its ‘car’ gives the name of the variable as seen by the
     current module and its ‘cdr’ specifies a name for the binding in
     the current module’s public interface.

Using pairs in Guile’s ‘export’ (or ‘#:export’ in ‘define-module’)
should be the same as ‘rename’ from R7RS.

HTH!


-- Tim





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#67255: define-library does not support 'rename' directives
  2023-11-20 15:53 ` Timothy Sample
@ 2023-11-20 17:14   ` Timothy Sample
  2023-11-23  3:57     ` Maxim Cournoyer
  0 siblings, 1 reply; 6+ messages in thread
From: Timothy Sample @ 2023-11-20 17:14 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 67255

[-- Attachment #1: Type: text/plain, Size: 704 bytes --]

Timothy Sample <samplet@ngyro.com> writes:

> Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
>
>> Our R7RS define-library syntax, from (ice-9 r7rs-library) does not
>> support renaming bindings to export, via 'rename' directives.
>
> I appreciate your R7RS debugging effort.  Thanks!

Actions speak louder than words, so here’s a patch!

The ‘define-library’ syntax uses the R6RS ‘library’ syntax under the
hood.  TIL that R6RS and R7RS have different syntax for 'rename'.  In
R6RS, you write:

    (export (rename (internal external)))

while in R7RS, it’s:

    (export (rename internal external))

My patch adds a conversion step to deal with this difference.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Use-R7RS-rename-syntax-for-exports.patch --]
[-- Type: text/x-patch, Size: 1741 bytes --]

From b87bf8910ac8e75dc0ec63cb7385ddf199fd400c Mon Sep 17 00:00:00 2001
From: Timothy Sample <samplet@ngyro.com>
Date: Mon, 20 Nov 2023 11:01:08 -0600
Subject: [PATCH] Use R7RS 'rename' syntax for exports.

Fixes <https://bugs.gnu.org/67255>.
Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>.

* module/ice-9/r7rs-libraries.scm (define-library): Convert R7RS
exports to R6RS exports before passing them on to 'library'.
---
 module/ice-9/r7rs-libraries.scm | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/module/ice-9/r7rs-libraries.scm b/module/ice-9/r7rs-libraries.scm
index 63a300a26..f8b6b4c59 100644
--- a/module/ice-9/r7rs-libraries.scm
+++ b/module/ice-9/r7rs-libraries.scm
@@ -1,5 +1,5 @@
 ;; R7RS library support
-;;      Copyright (C) 2020, 2021 Free Software Foundation, Inc.
+;;      Copyright (C) 2020, 2021, 2023 Free Software Foundation, Inc.
 ;;
 ;; This library is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU Lesser General Public
@@ -97,12 +97,17 @@
            ((decl ...)
             (partition-decls #'(decl ... . decls) exports imports code))))))
 
+    (define (r7rs-export->r6rs-export export)
+      (syntax-case export (rename)
+        ((rename internal external) #'(rename (internal external)))
+        (_ export)))
+
     (syntax-case stx ()
       ((_ name decl ...)
        (call-with-values (lambda ()
                            (partition-decls #'(decl ...) '() '() '()))
          (lambda (exports imports code)
            #`(library name
-               (export . #,exports)
+               (export . #,(map r7rs-export->r6rs-export exports))
                (import . #,imports)
                . #,code)))))))
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#67255: define-library does not support 'rename' directives
  2023-11-20 17:14   ` Timothy Sample
@ 2023-11-23  3:57     ` Maxim Cournoyer
  2023-11-23 16:12       ` Timothy Sample
  0 siblings, 1 reply; 6+ messages in thread
From: Maxim Cournoyer @ 2023-11-23  3:57 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 67255

Hello!

Timothy Sample <samplet@ngyro.com> writes:

> Timothy Sample <samplet@ngyro.com> writes:
>
>> Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
>>
>>> Our R7RS define-library syntax, from (ice-9 r7rs-library) does not
>>> support renaming bindings to export, via 'rename' directives.
>>
>> I appreciate your R7RS debugging effort.  Thanks!
>
> Actions speak louder than words, so here’s a patch!
>
> The ‘define-library’ syntax uses the R6RS ‘library’ syntax under the
> hood.  TIL that R6RS and R7RS have different syntax for 'rename'.  In
> R6RS, you write:
>
>     (export (rename (internal external)))
>
> while in R7RS, it’s:
>
>     (export (rename internal external))
>
> My patch adds a conversion step to deal with this difference.

Oh, excellent, thank you!

>>From b87bf8910ac8e75dc0ec63cb7385ddf199fd400c Mon Sep 17 00:00:00 2001
> From: Timothy Sample <samplet@ngyro.com>
> Date: Mon, 20 Nov 2023 11:01:08 -0600
> Subject: [PATCH] Use R7RS 'rename' syntax for exports.
>
> Fixes <https://bugs.gnu.org/67255>.
> Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>.

Nitpick: at least 'Reported-by' is a common git trailer, and these
must appear at the bottom of the git commit.

> * module/ice-9/r7rs-libraries.scm (define-library): Convert R7RS
> exports to R6RS exports before passing them on to 'library'.
> ---
>  module/ice-9/r7rs-libraries.scm | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/module/ice-9/r7rs-libraries.scm b/module/ice-9/r7rs-libraries.scm
> index 63a300a26..f8b6b4c59 100644
> --- a/module/ice-9/r7rs-libraries.scm
> +++ b/module/ice-9/r7rs-libraries.scm
> @@ -1,5 +1,5 @@
>  ;; R7RS library support
> -;;      Copyright (C) 2020, 2021 Free Software Foundation, Inc.
> +;;      Copyright (C) 2020, 2021, 2023 Free Software Foundation, Inc.
>  ;;
>  ;; This library is free software; you can redistribute it and/or
>  ;; modify it under the terms of the GNU Lesser General Public
> @@ -97,12 +97,17 @@
>             ((decl ...)
>              (partition-decls #'(decl ... . decls) exports imports code))))))
>  
> +    (define (r7rs-export->r6rs-export export)
> +      (syntax-case export (rename)
> +        ((rename internal external) #'(rename (internal external)))
> +        (_ export)))
> +
>      (syntax-case stx ()
>        ((_ name decl ...)
>         (call-with-values (lambda ()
>                             (partition-decls #'(decl ...) '() '() '()))
>           (lambda (exports imports code)
>             #`(library name
> -               (export . #,exports)
> +               (export . #,(map r7rs-export->r6rs-export exports))
>                 (import . #,imports)
>                 . #,code)))))))

It at least works for my use case (SRFI 128), so it's for sure an
improvement :-).  You can see it in action in the series I've sent today.

-- 
Thanks,
Maxim





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#67255: define-library does not support 'rename' directives
  2023-11-23  3:57     ` Maxim Cournoyer
@ 2023-11-23 16:12       ` Timothy Sample
  0 siblings, 0 replies; 6+ messages in thread
From: Timothy Sample @ 2023-11-23 16:12 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 67255

Hey,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> Timothy Sample <samplet@ngyro.com> writes:
>
>> Fixes <https://bugs.gnu.org/67255>.
>> Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>.
>
> Nitpick: at least 'Reported-by' is a common git trailer, and these
> must appear at the bottom of the git commit.

That’s a fair point.  I’m following what seems to be (from the commit
log) Guile’s convention here.  See

    $ git log --grep='^Report'

Whether it’s a good convention is probably out of scope here!  :)

> It at least works for my use case (SRFI 128), so it's for sure an
> improvement :-).  You can see it in action in the series I've sent today.

Hooray!


-- Tim





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#67255: [PATCH v2] Use R7RS 'rename' syntax for exports.
  2023-11-18  5:46 bug#67255: define-library does not support 'rename' directives Maxim Cournoyer
  2023-11-20 15:53 ` Timothy Sample
@ 2023-11-24 21:01 ` Maxim Cournoyer
  1 sibling, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2023-11-24 21:01 UTC (permalink / raw)
  To: 67255; +Cc: Timothy Sample, Maxim Cournoyer

From: Timothy Sample <samplet@ngyro.com>

* module/ice-9/r7rs-libraries.scm (define-library): Convert R7RS
exports to R6RS exports before passing them on to 'library'.

Fixes: https://bugs.gnu.org/67255
Reported-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>.
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
---

Changes in v2:
 - Improve pattern variable names

 module/ice-9/r7rs-libraries.scm | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/module/ice-9/r7rs-libraries.scm b/module/ice-9/r7rs-libraries.scm
index 63a300a26..429d82ad9 100644
--- a/module/ice-9/r7rs-libraries.scm
+++ b/module/ice-9/r7rs-libraries.scm
@@ -1,5 +1,5 @@
 ;; R7RS library support
-;;      Copyright (C) 2020, 2021 Free Software Foundation, Inc.
+;;      Copyright (C) 2020, 2021, 2023 Free Software Foundation, Inc.
 ;;
 ;; This library is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU Lesser General Public
@@ -97,12 +97,18 @@
            ((decl ...)
             (partition-decls #'(decl ... . decls) exports imports code))))))
 
+    (define (r7rs-export->r6rs-export export-spec)
+      (syntax-case export-spec (rename)
+        ((rename from-identifier to-identifier)
+         #'(rename (from-identifier to-identifier)))
+        (identifier #'identifier)))
+
     (syntax-case stx ()
       ((_ name decl ...)
        (call-with-values (lambda ()
                            (partition-decls #'(decl ...) '() '() '()))
          (lambda (exports imports code)
            #`(library name
-               (export . #,exports)
+               (export . #,(map r7rs-export->r6rs-export exports))
                (import . #,imports)
                . #,code)))))))

base-commit: d579848cb5d65440af5afd9c8968628665554c22
-- 
2.41.0






^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-11-24 21:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-18  5:46 bug#67255: define-library does not support 'rename' directives Maxim Cournoyer
2023-11-20 15:53 ` Timothy Sample
2023-11-20 17:14   ` Timothy Sample
2023-11-23  3:57     ` Maxim Cournoyer
2023-11-23 16:12       ` Timothy Sample
2023-11-24 21:01 ` bug#67255: [PATCH v2] Use R7RS 'rename' syntax for exports Maxim Cournoyer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).