[Haskell-cafe] Time for a new logo?
Richard O'Keefe
ok at cs.otago.ac.nz
Wed Dec 17 21:54:09 EST 2008
On 18 Dec 2008, at 11:26 am, Andrew Coppin wrote:
>> (Also, "coroutines"? Seriously? That's hardly an obscure term in
>> programming circles.)
>>
>
> Well now, I'm curios. I've been writing computer programs since I
> was 9 years old. I hold a diploma *and* an honours degree in
> computer science. And I have never even *heard* of a coroutine. To
> this day I still don't know what it means. I rather suspect I'm not
> the only "programmer" on earth who finds themselves in this
> position. ;-)
Shame on you for not reading Knuth's
"The Art of Computer Programming", Volume 1, "Fundamental Algorithms".
The then available three volumes of TAOCP
"were named among the best twelve physical-science monographs
of the century by American Scientist" "at the end of 1999".
(Fasicles 0, 2, 3, and 4 of volume 4 are now available, and
parts of fasicle 1 are on-line. Hooray hooray!)
Quoting the first two paragraphs of the Wikipedia entry:
"In computer science, coroutines are program components that
generalize subroutines to allow multiple entry points for suspending
and resuming of execution at certain locations. Coroutines are well-
suited for implementing more familiar program components such as
cooperative tasks, iterators, infinite lists and pipes.
The term "coroutine" was originated by Melvin Conway in his seminal
1963 paper.[1]"
So "coroutine" has been standard hacker-type programming terminology
since 1963. I was able to use coroutines in Burroughs Extended Algol
(designed in the mid to late 60s), Simula 67, and Interlisp-D (80s).
Current languages supporting them include (thanks, Wikipedia) Lua,
Limbo, JavaScript, Python, and Ruby. Since anything with continuations
can do coroutines, we add Scheme and SML/NJ. Sather's iterators may be
a more familiar form of coroutine. You will commonly find something
like a "yield e" statement that reports the value of e to the caller
without actually returning, and "resume c" that resumes a coroutine
to get the next value.
More information about the Haskell-Cafe
mailing list