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 #31
cc
changetime
2011-01-24 06:58:19
component
WG1 - I/O
description
Do we provide a mechanism for custom ports,
on which for instance string ports could be
created?
id
31
keywords
milestone
owner
alexshinn
priority
major
reporter
alexshinn
resolution
wontfix
severity
status
closed
summary
custom ports
time
2010-02-23 17:04:36
type
defect
Changes
Change at time 2011-01-24 06:58:19
author
cowan
field
comment
newvalue
WG1 voted not to have custom ports.
oldvalue
3
raw-time
1295823499000000
ticket
31
time
2011-01-24 06:58:19
Change at time 2011-01-24 06:58:19
author
cowan
field
resolution
newvalue
wontfix
oldvalue
raw-time
1295823499000000
ticket
31
time
2011-01-24 06:58:19
Change at time 2011-01-24 06:58:19
author
cowan
field
status
newvalue
closed
oldvalue
new
raw-time
1295823499000000
ticket
31
time
2011-01-24 06:58:19
Change at time 2010-03-16 05:50:20
author
kumoyuki
field
comment
newvalue
I am pretty conflicted over this issue as well, as Oleg Kiselyov & I (and a few others) tried to work up an I/O SRFI many moons ago. Things got very complex, very quickly.
Arguably, all I/O should be moved out of the core language specification. C managed to get along with only "library" compliance in I/O for many long years. Additionally, I/O is the canonical example of where side-effects are unavoidable. Nevertheless, Scheme without a free system for reading s-expressions wouldn't feel like much of a lisp either, and the utility of the language would be significantly degraded.
The I/O library needs significant work, and I am more than half inclined to say it should be a WG2 job, except for the Lisp-y-ness issue.
oldvalue
2
raw-time
1268693420000000
ticket
31
time
2010-03-16 05:50:20
Change at time 2010-03-16 05:50:20
author
kumoyuki
field
milestone
newvalue
oldvalue
raw-time
1268693420000000
ticket
31
time
2010-03-16 05:50:20
Change at time 2010-03-01 10:08:40
author
cowan
field
comment
newvalue
I wrestled with these a lot, but couldn't find anything satisfying. If you treat a custom port as an object on which you can get/set procedures to do the work, you wind up with a getter/setter for every I/O procedure you have. And you need to say what happens if the user provides only some of them. It's a big mess. You can make the procedures generic and use a symbol to indicate which property is being get/set, but all that does is clean up the page some, the implementation is still messy. Having multiple kinds of ports (binary/textual, string/file, input/output) just makes the mess worse.
I am opposed to standardization here, and I think the R6RS effort was premature.
oldvalue
1
raw-time
1267409320000000
ticket
31
time
2010-03-01 10:08:40