EIO Redesign

From Erights

(Difference between revisions)
Jump to: navigation, search
(Redesign goals: msg usage)
Line 10: Line 10:
* It should be possible to write interesting and lightweight wrappers around stream objects.
* It should be possible to write interesting and lightweight wrappers around stream objects.
* It should be possible to interconvert between sequences and streams readily.
* It should be possible to interconvert between sequences and streams readily.
-
** Furthermore, given that we can convert a sequence to an input stream, streams solve another design issue: [[parallel iteration]]. Currently, there is no way to iterate over multiple collections in parallel without explicit indexing (because {{msg|iterate|1}} is internal iteration); whereas a group of stream objects can easily be read in parallel.
+
** Furthermore, given that we can convert a sequence to an input stream, streams solve another design issue: [[parallel iteration]]. Currently, there is no way to iterate over multiple collections in parallel without explicit indexing (because {{msg|iterate/1}} is internal iteration); whereas a group of stream objects can easily be read in parallel.
*** Doing this introduces another requirement: It should be possible to iterate over a map, and obtain the key-value pairs.
*** Doing this introduces another requirement: It should be possible to iterate over a map, and obtain the key-value pairs.

Revision as of 20:03, 28 January 2011

As the only implementor of EIO, Kevin Reid feels that the original EIO design is too heavyweight; it effectively requires input streams to have buffers and an elaborate queueing mechanism, and does not map well to POSIX IO operations, thus creating inefficiency and discouraging compositional programming.

XXX Explain whch API variant the last kEIO implements.

XXX Explain whch API variant current E-on-CL implements.

Redesign goals

  • A stream should be able to wrap a POSIX file descriptor without hiding too much of the functionality. In particular, it should be possible to implement, for example, a console-IO process, which must not read from stdin until it actually wants user input (or be suspended if it is a background process).
  • It should be possible to write interesting and lightweight wrappers around stream objects.
  • It should be possible to interconvert between sequences and streams readily.
    • Furthermore, given that we can convert a sequence to an input stream, streams solve another design issue: parallel iteration. Currently, there is no way to iterate over multiple collections in parallel without explicit indexing (because iterate/1 is internal iteration); whereas a group of stream objects can easily be read in parallel.
      • Doing this introduces another requirement: It should be possible to iterate over a map, and obtain the key-value pairs.

Version 1

XXX

Personal tools
more tools