This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.
Source for ticket #521
cc
changetime
2013-07-07 03:20:44
component
WG1 - Core
description
Mikael More writes:
Problem: The Library syntax requires all library content to be put within the `define-library` form (there in a `begin` or `include*`). This means that to define a library, the programmer is reasonably required to either put all library code in a `define-library` and also indent accordingly, or maintain two files per library.
Rationale: An incremental development situation makes use of any convenience as to increase the speed of experimentation. In such a situation, creating two files per library would seem completely unjustified. Also, in general Scheme development, Scheme can be made to work reliably without need for separation of a library into anything like a separate header and code file. By this reason, I will not consider the two files per library use-case further here but focus on the other point:
I find a requirement that >99% of the Scheme code in existence needing to be made within a particular form and indented accordingly peculiar indeed. The way Scheme code traditionally is divided into files works so well that I believe a specific `define-library` form in addition to this to contain the library, to be superfluous. And, Scheme's traditional forms provide sufficient structure to perform indentation based on.
Suggestion: Please find a way so that the library body in the library definition file is at the top level.
One way would be to allow a variant of `define-library` of 5.6.1. to be used as `(define-library (library name))` and then provide the library declarations subsequent to this one, with the exception of the `begin` library declaration whose contents are inlined by themselves.
I'd guess many times the Scheme file's filename would provide the information otherwise provided by `(define-library (library name))` , so that that line could be made optional generally also.
In response to the last point only: Both Chibi and most R6RS Schemes use the approach of having a library-path to specify the directories which are the roots of the library system. Without an explicit name associated with the library, changing the root would implicitly change the name.
id
521
keywords
milestone
owner
alexshinn
priority
major
reporter
cowan
resolution
wontfix
severity
status
closed
summary
Make library contents be at top level
time
2013-05-13 16:26:43
type
defect
Changes
Change at time 2013-07-07 03:20:44
author
cowan
field
comment
newvalue
The WG decided by unanimous consent to take no action on this ticket.
oldvalue
3
raw-time
1373142044410382
ticket
521
time
2013-07-07 03:20:44
Change at time 2013-07-07 03:20:44
author
cowan
field
resolution
newvalue
wontfix
oldvalue
raw-time
1373142044410382
ticket
521
time
2013-07-07 03:20:44
Change at time 2013-07-07 03:20:44
author
cowan
field
status
newvalue
closed
oldvalue
new
raw-time
1373142044410382
ticket
521
time
2013-07-07 03:20:44
Change at time 2013-05-21 01:35:47
author
cowan
field
comment
newvalue
As was pointed out on the list, it's easy to change your identer not to ident the contents of `define-library` forms.
oldvalue
2
raw-time
1369074947126607
ticket
521
time
2013-05-21 01:35:47
Change at time 2013-05-13 16:36:15
author
cowan
field
comment
newvalue
My experience (which as I said is still very limited) is that the modest discipline imposed by the two-file solution has surprising advantages. For one thing, it provides superior delivery to the various kinds of Scheme implementations out there to have one or more files of code supplemented by a library-declaration file whose form depends on the system it is to be used for.
Thus, I can deliver a library `foo` for both Chibi and Chicken (my two platforms of choice) by providing a `foo-impl.scm` file containing pure R5RS-ish code and two files that include it: a `foo.scm` file that takes the form of a Chicken module declaration, and a `foo.sld` file that takes the form of an R7RS library declaration. I could easily add various `foo.*.sls` files for R6RS systems if I wanted to. Furthermore, an implementation of Scheme that lacks modules can just load `foo-impl.scm` and ignore all the library junk. Note that no additional indentation exists within the `foo-impl.scm` file.
In addition, while debugging I often want access to the private (non-exported) functions of the library: see my comment on #520 for why there often are such functions. By using `load` at the REPL to load the `foo-impl.scm` file rather than some version of `import` (in Chicken, `use`), I get access to the private functions from the REPL without having to touch the export declarations.
oldvalue
1
raw-time
1368437775578733
ticket
521
time
2013-05-13 16:36:15