GNU bug report logs -
#52218
Unable to define more than one R7RS library per file
Previous Next
To reply to this bug, email your comments to 52218 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-guile <at> gnu.org
:
bug#52218
; Package
guile
.
(Wed, 01 Dec 2021 08:56:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Sam Lee <samlee746 <at> yahoo.com>
:
New bug report received and forwarded. Copy sent to
bug-guile <at> gnu.org
.
(Wed, 01 Dec 2021 08:56:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Guile is unable to handle more than one define-library per file. For
example, this is "mylibs.sld", which contains two define-library:
(define-library (example mylib)
(import (scheme base))
(export f)
(begin
(define (f x)
(+ x 1))))
(define-library (example main)
(import (scheme base)
(scheme write)
(example mylib))
(export main)
(begin
(define (main)
(display "The answer is: ")
(display (f 1))
(newline))))
When loading this file into Guile using "guile -l mylibs.sld", or by
using (load "mylibs.sld"), Guile will show this error:
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /home/user/mylibs.sld
;;; WARNING: compilation of /home/user/mylibs.sld failed:
;;; Syntax error:
;;; unknown location: definition in expression context, where definitions are not allowed, in form (define (main) (display "The answer is: ") (display (f 1)) (newline))
ice-9/psyntax.scm:2794:12: In procedure syntax-violation:
Syntax error:
/home/user/mylibs.sld:14:4: definition in expression context, where definitions are not allowed, in form (define (main) (display "The answer is: ") (display (f 1)) (newline))
The error is always caused by the second define-library. Apparently,
Guile no longer understands that define-library is a special form by the
time the second define-library is evaluated. Is it not possible to
define two R7RS libraries in the same file?
Guile version: 3.0.7
Information forwarded
to
bug-guile <at> gnu.org
:
bug#52218
; Package
guile
.
(Wed, 01 Dec 2021 10:02:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 52218 <at> debbugs.gnu.org (full text, mbox):
Hi Sam!
I am not a maintainer , nor a very proficient guile hacker, but I do have some input.
This is in line with the limitations of guile's R6RS implementation. I think this is a long standing, low priority bug. It has to do with the expansion of library (or define-library in this case) not properly resetting the current module.
In the manual there is a section called "R6RS incompatibilities" that mentions this. Maybe an "R7RS incompatibilities" should be added.
Best regards
Linus Björnstam
On Wed, 1 Dec 2021, at 08:45, Sam Lee via Bug reports for GUILE, GNU's Ubiquitous Extension Language wrote:
> Guile is unable to handle more than one define-library per file. For
> example, this is "mylibs.sld", which contains two define-library:
>
> (define-library (example mylib)
> (import (scheme base))
> (export f)
> (begin
> (define (f x)
> (+ x 1))))
>
> (define-library (example main)
> (import (scheme base)
> (scheme write)
> (example mylib))
> (export main)
> (begin
> (define (main)
> (display "The answer is: ")
> (display (f 1))
> (newline))))
>
>
> When loading this file into Guile using "guile -l mylibs.sld", or by
> using (load "mylibs.sld"), Guile will show this error:
>
> ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
> ;;; or pass the --no-auto-compile argument to disable.
> ;;; compiling /home/user/mylibs.sld
> ;;; WARNING: compilation of /home/user/mylibs.sld failed:
> ;;; Syntax error:
> ;;; unknown location: definition in expression context, where
> definitions are not allowed, in form (define (main) (display "The
> answer is: ") (display (f 1)) (newline))
> ice-9/psyntax.scm:2794:12: In procedure syntax-violation:
> Syntax error:
> /home/user/mylibs.sld:14:4: definition in expression context, where
> definitions are not allowed, in form (define (main) (display "The
> answer is: ") (display (f 1)) (newline))
>
>
> The error is always caused by the second define-library. Apparently,
> Guile no longer understands that define-library is a special form by the
> time the second define-library is evaluated. Is it not possible to
> define two R7RS libraries in the same file?
>
> Guile version: 3.0.7
Information forwarded
to
bug-guile <at> gnu.org
:
bug#52218
; Package
guile
.
(Thu, 02 Dec 2021 03:34:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 52218 <at> debbugs.gnu.org (full text, mbox):
On 2021-12-01 11:00 +0100, Linus Björnstam wrote:
> This is in line with the limitations of guile's R6RS implementation. I
> think this is a long standing, low priority bug. It has to do with the
> expansion of library (or define-library in this case) not properly
> resetting the current module.
>
> In the manual there is a section called "R6RS incompatibilities" that
> mentions this. Maybe an "R7RS incompatibilities" should be added.
Hi Linus,
There already exist a page in the manual about "Incompatibilities with
the R7RS" [1]. Perhaps a paragraph similar to that found in the R6RS
incompatibilities page should be added to the R7RS incompatibilities
page. Something like this:
"Multiple @code{define-library} forms in one file are not yet supported.
This is because the expansion of @code{define-library} sets the current
module, but does not restore it. This is a bug."
[1]: https://www.gnu.org/software/guile/manual/html_node/R7RS-Incompatibilities.html
Information forwarded
to
bug-guile <at> gnu.org
:
bug#52218
; Package
guile
.
(Fri, 03 Dec 2021 14:22:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 52218 <at> debbugs.gnu.org (full text, mbox):
It is the same bug. The r7rs define-library expands to a r6rs library, which expands to a guile module form that lacks support for multiple libraries. The solution would probably include a non-trivial (but probably not very big) change to guile's module system.
First you would have to save and restore the current module before and after a module definition (maybe in save-module-excursion?). Then I would separate the library form the guile library form (since that doesn't encapsulate the body), by expanding it directly to the lower level module forms.
I might give it a shot.
--
Linus Björnstam
On Thu, 2 Dec 2021, at 03:55, Sam Lee wrote:
> On 2021-12-01 11:00 +0100, Linus Björnstam wrote:
>> This is in line with the limitations of guile's R6RS implementation. I
>> think this is a long standing, low priority bug. It has to do with the
>> expansion of library (or define-library in this case) not properly
>> resetting the current module.
>>
>> In the manual there is a section called "R6RS incompatibilities" that
>> mentions this. Maybe an "R7RS incompatibilities" should be added.
>
> Hi Linus,
>
> There already exist a page in the manual about "Incompatibilities with
> the R7RS" [1]. Perhaps a paragraph similar to that found in the R6RS
> incompatibilities page should be added to the R7RS incompatibilities
> page. Something like this:
>
> "Multiple @code{define-library} forms in one file are not yet supported.
> This is because the expansion of @code{define-library} sets the current
> module, but does not restore it. This is a bug."
>
> [1]:
> https://www.gnu.org/software/guile/manual/html_node/R7RS-Incompatibilities.html
This bug report was last modified 2 years and 359 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.