Formal comment #89 (simplification) Leave readers and writers out of the report Reported by: William D Clinger Component: i/o Version: 5.91 Section 15.2 of the draft R6RS specifies reader and writer objects, which represent arbitrary sources and sinks for binary data. These objects are not used anywhere else in the report, do not appear to have been used in the field, and well-known principles of software reuse would argue for making them ports instead of a separate data type. So long as they are a separate data type, however, they could be specified by a SRFI and implemented by a portable reference implementation. It appears that no significant efficiency would be lost by providing them via a portable reference implementation, since the operations on file readers and writers could just delegate to an encapsulated binary port. If they were ports, they might be useful. Including them in the R6RS as a separate data type might interfere with making them ports in the R7RS. RESPONSE: The comment's statement that the ports "are not used anywhere else in the report" is false: They appear in Section 15.3.8, "Ports from Readers and Writers." Readers and writers are the only means specified in the 5.91 draft for obtaining ports from custom input sources and output sinks. The next draft of the report will eliminate readers and writers, but provide means for obtaining ports from custom input sources and output sinks via the procedures outlined below, obtained by composing the `open-...-port' procecures from Section 15.3.8 with the `make-simple-reader' and `make-simple-writer' from the Primive I/O library, and replacing the procedures of Section 15.3.8 with them. The exact specification of these procedures may change slightly because of other changes planned for the I/O libraries. (open-custom-input-port id descriptor chunk-size read! available get-position set-position! end-position close) (open-custom-output-port id descriptor chunk-size write! get-position set-position! end-position close) (open-custom-input/output-port id descriptor chunk-size read! write! get-position set-position! end-position close) The various arguments to these procedures are as specified for `make-simple-reader' and `make-simple-writer' in Section 15.2. In addition to these changes, file options and the I/O condition types described in Section 15.1 will be moved to the (r6rs i/o ports) library.