From: Jonathan Cast <jonathanccast@fastmail.fm>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] nice quote
Date: Wed, 2 Sep 2009 12:10:51 -0700 [thread overview]
Message-ID: <1251918651.30178.12.camel@jcchost> (raw)
In-Reply-To: <3e1162e60909021127m7c22b518hf2255495dce5ee30@mail.gmail.com>
On Wed, 2009-09-02 at 11:27 -0700, David Leimbach wrote:
> On Wed, Sep 2, 2009 at 11:08 AM, Richard Miller <9fans@hamnavoe.com>
> wrote:
> >>
> http://graphics.cs.williams.edu/archive/SweeneyHPG2009/TimHPG2009.pdf
> >>
> > on p. 43/44 i believe it is claimed that one
> > cannot do CSP without pure functional
> > programming.
> (p ⇒ q) ⇏ (¬p ⇒ ¬q)
> That's interesting because pure functional programming doesn't exist
> at all in the strictest sense on a computer. One MUST be able to
> cause side effects during computation or your CPU will just get hot...
> if even that.
*delurk*
That's an excessively strict view. You need *output* for a program to
be useful, but producing that output doesn't need to be intermixed with
the program's algorithm to be useful; you can compute first, then output
the results.
Furthermore, I don't think it's sophistry to say that you don't need
side effects to do output. ALGOL-derived languages use side effects for
output, because (to take C as an example) the type of an expression like
print("Hello, world\n")
is taken to be `int', and thus the `value' of that expression must be
some integer --- say, 13. Then you need to add a concept of `side
effects' to express the fact that there's more going on here than just
calculating the number 13.
Purely functional programming doesn't eschew I/O (although it encourages
a style that separates I/O from algorithms --- as does good programming
style in any language); rather, it re-works the types of the I/O
operations so that, if you have a function
foo :: String -> Int
the value of
foo "Hello, world!\n"
really is just an integer (and there's nothing else going on to
introduce side-effects to talk about). Whereas if you have a function
bar :: String -> IO Int
then the value (as expressed in the language and understood by the
programmer) of
bar "Hello, world!\n"
is a combination of I/O behavior, concurrency, etc. So you don't need
to introduce a concept of `side effects' to talk about those things.
If you were building a denotational semantics for C, this how you would
deal with I/O. The value (denotation) of a C expression of type int
would be a combination of I/O behavior, assignment behavior, etc., as
well as (possibly, due to the possibility of non-termination) an
integer. Purely functional programming just reduces the degree of
difference between the denotational semantics of the language and the
programmer's mental model of it.
Which is very likely all I have to say on the subject.
jcc
next prev parent reply other threads:[~2009-09-02 19:10 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-02 14:29 ron minnich
2009-09-02 14:51 ` Rodolfo (kix)
2009-09-03 9:52 ` Greg Comeau
2009-09-03 11:15 ` Skip Tavakkolian
2009-09-03 13:59 ` Greg Comeau
2009-09-03 15:01 ` David Leimbach
2009-09-02 15:19 ` Enrique Soriano
2009-09-02 16:38 ` erik quanstrom
2009-09-02 16:56 ` David Leimbach
2009-09-02 16:58 ` Robert Raschke
2009-09-02 17:03 ` David Leimbach
2009-09-02 17:36 ` erik quanstrom
2009-09-02 18:08 ` Richard Miller
2009-09-02 18:27 ` David Leimbach
2009-09-02 18:35 ` erik quanstrom
2009-09-02 18:46 ` David Leimbach
2009-09-03 15:02 ` Uriel
2009-09-03 15:02 ` David Leimbach
2009-09-02 19:10 ` Jonathan Cast [this message]
2009-09-02 20:02 ` David Leimbach
2009-09-02 20:23 ` Jonathan Cast
2009-09-02 20:45 ` David Leimbach
2009-09-02 17:31 ` Eric Van Hensbergen
2009-09-02 18:25 ` David Leimbach
2009-09-02 18:47 ` ron minnich
2009-09-02 19:11 ` Brian L. Stuart
2009-09-02 19:32 ` David Leimbach
2009-09-02 22:59 ` Roman V Shaposhnik
2009-09-03 9:53 ` Greg Comeau
2009-09-03 11:24 ` Skip Tavakkolian
2009-09-03 12:01 ` tlaronde
2009-09-03 12:06 ` Brantley Coile
2009-09-03 14:03 ` Greg Comeau
2009-09-03 15:13 ` Jason Catena
2009-09-04 9:04 ` Greg Comeau
2009-09-03 14:02 ` Greg Comeau
2009-09-03 14:57 ` Robert Raschke
2009-09-04 9:04 ` Greg Comeau
2009-09-03 17:40 ` Brian L. Stuart
2009-09-04 9:03 ` Greg Comeau
2009-09-04 17:47 ` Brian L. Stuart
2009-09-04 18:01 ` Jack Norton
2009-09-04 20:18 ` Eris Discordia
2009-09-04 21:36 ` Daniel Lyons
2009-09-04 22:50 ` andrey mirtchovski
2009-09-05 14:14 ` Eris Discordia
[not found] ` <7AAFE4127E1DB57785BB273A@192.168.1.2>
2009-09-05 14:36 ` Eris Discordia
2009-09-06 1:58 ` Jason Catena
2009-09-06 3:38 ` David Leimbach
2009-09-06 18:29 ` Tim Newsham
2009-09-06 18:44 ` David Leimbach
2009-09-06 17:08 ` Eris Discordia
[not found] ` <9C0E59DDCCDD197FBD4EC404@192.168.1.2>
2009-09-06 18:05 ` David Leimbach
2009-09-06 18:34 ` James Chapman
2009-09-06 18:26 ` Tim Newsham
2009-09-06 18:40 ` David Leimbach
2009-09-07 8:54 ` Paul Donnelly
2009-09-07 9:07 ` Greg Comeau
[not found] ` <BB8E3A2E5419E566D0361D29@192.168.1.2>
2009-09-04 21:52 ` Jason Catena
2009-09-05 11:02 ` Richard Miller
2009-09-05 11:22 ` Akshat Kumar
2009-09-05 12:11 ` tlaronde
2009-09-06 20:04 ` Rudolf Sykora
2009-09-06 20:45 ` erik quanstrom
2009-09-07 7:51 ` Vinu Rajashekhar
2009-09-05 13:38 ` Anthony Sorace
2009-09-07 9:07 ` Greg Comeau
2009-09-07 9:39 ` Akshat Kumar
2009-09-07 15:49 ` Greg Comeau
2009-09-07 15:58 ` erik quanstrom
2009-09-07 20:56 ` Lyndon Nerenberg - VE6BBM/VE7TFX
2009-09-07 21:21 ` Federico G. Benavento
2009-09-07 21:33 ` Lyndon Nerenberg - VE6BBM/VE7TFX
2009-09-09 8:30 ` Greg Comeau
2009-09-09 11:22 ` erik quanstrom
2009-09-09 15:48 ` Charles Forsyth
2009-09-09 16:00 ` Russ Cox
2009-09-09 16:37 ` Abhishek Kulkarni
2009-09-09 16:51 ` Jack Norton
2009-09-09 16:07 ` erik quanstrom
2009-09-09 16:07 ` Akshat Kumar
2009-09-09 16:08 ` Richard Miller
2009-09-09 16:13 ` Richard Miller
2009-09-10 21:45 ` erik quanstrom
2009-09-11 7:54 ` Richard Miller
2009-09-11 10:21 ` erik quanstrom
2009-09-09 16:11 ` David Leimbach
2009-09-09 16:29 ` Jason Catena
2009-09-09 17:17 ` Skip Tavakkolian
2009-09-09 18:36 ` Jason Catena
2009-09-09 17:29 ` Iruata Souza
2009-09-09 17:57 ` Tim Newsham
2009-09-10 11:59 ` Eris Discordia
[not found] ` <99A870099C1B1D6560F4CF1A@192.168.1.2>
2009-09-10 15:58 ` hiro
2009-09-10 21:24 ` Eris Discordia
2009-09-09 8:30 ` Greg Comeau
2009-09-09 8:29 ` Greg Comeau
2009-09-05 14:27 ` Eris Discordia
2009-09-05 14:33 ` Eris Discordia
[not found] ` <B6F7A6BD1919CC67B621FDE3@192.168.1.2>
2009-09-05 14:36 ` John Floren
2009-09-05 14:51 ` Eris Discordia
2009-09-05 19:30 ` Daniel Lyons
2009-09-05 23:48 ` Eris Discordia
2009-09-05 18:26 ` erik quanstrom
2009-09-06 0:05 ` Eris Discordia
2009-09-06 0:17 ` erik quanstrom
2009-09-06 0:37 ` Eris Discordia
2009-09-06 0:56 ` erik quanstrom
2009-09-06 16:51 ` Eris Discordia
2009-09-06 17:32 ` tlaronde
2009-09-06 4:23 ` J.R. Mauro
2009-09-06 17:24 ` Eris Discordia
[not found] ` <393394D0A7F3F4A227F94CDA@192.168.1.2>
2009-09-06 18:03 ` Rob Pike
2009-09-06 19:26 ` Eris Discordia
2009-09-07 15:47 ` J.R. Mauro
2009-09-07 8:54 ` Paul Donnelly
2009-09-07 9:04 ` Daniel Lyons
2009-09-07 9:05 ` Vinu Rajashekhar
2009-09-07 9:05 ` Greg Comeau
2009-09-07 9:49 ` Daniel Lyons
2009-09-07 11:34 ` erik quanstrom
2009-09-07 16:00 ` Greg Comeau
2009-09-07 19:23 ` Eris Discordia
2009-09-09 8:29 ` Greg Comeau
2009-09-09 8:35 ` Paul Donnelly
2009-09-03 19:38 ` tlaronde
2009-09-03 21:55 ` Daniel Lyons
2009-09-03 22:01 ` Tharaneedharan Vilwanathan
2009-09-07 8:54 ` Greg Comeau
2009-09-04 9:15 ` Greg Comeau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1251918651.30178.12.camel@jcchost \
--to=jonathanccast@fastmail.fm \
--cc=9fans@9fans.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).