9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
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





  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).