From: Siraaj Khandkar <siraaj@khandkar.net>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Purity in ocaml
Date: Mon, 20 Jan 2014 16:08:27 -0500 [thread overview]
Message-ID: <52DD904B.1000008@khandkar.net> (raw)
In-Reply-To: <CAN6ygO=D8x=6MM+=+xG30p1LNn5vj3KnYNfSE5oU+6rMCEXhMw@mail.gmail.com>
On 1/20/14 3:45 PM, Yotam Barnoy wrote:
> I wanted to gauge the interest of people on the list in adding purity
> annotations to ocaml. Purity is one of those things that could really help
> with reducing memory allocations through deforestation and decreasing the
> running time of programs written in the functional paradigm, and it could
> be very useful for parallelism as well. The basic scheme I have in mind is
> this:
>
> - Functions that do not access mutable structures would be marked pure.
> - Functions that access only local mutable structures would be marked as st
> (a la state monad)
> - Functions that access global mutable data would be unmarked (as they are
> now).
> - Pure functions can call st functions/code so long as all of the state
> referred to by the st code is contained within said pure functions.
> - Functions that call higher order functions, but do not modify mutable
> state would be marked hpure (half-pure). These functions would be pure so
> long as the functions they call remain pure. This allows List.map,
> List.fold etc to work for both pure and impure code.
> - The same thing exists for st code: hst represents functions that take
> higher order functions but only performs local state mutation.
> - In order to take advantage of this mechanism, there's no need to annotate
> functions. The type inference algorithm will figure out the strictest type
> that can be applied to a function and will save the annotation to an
> external, saved annotation file. This means that non-annotated code can
> take advantage of purity without doing any extra work, and the programmer
> never has to think about purity.
> - Having the purity annotations as an option is useful to force certain
> parts of the code, such as monads, to be pure.
> - An edge case: local state can be made to refer to global state by some
> external function call. Therefore, local state is considered 'polluted'
> (and global) if it is passed to an impure function.
> - Exceptions: not sure how to handle them yet. The easiest solution is to
> forbid them in st/pure code. Another easy alternative is to only allow
> catching them in impure code, as haskell does.
>
> Thoughts?
Exceptions was the first thought that came to mind when I began reading
this - I think the ability to track unhandled exceptions, which I think
OcamlPro is working on, is a pre-req for any purity analysis to be
meaningful, since so many, otherwise pure, structures raise exceptions :/
next prev parent reply other threads:[~2014-01-20 21:08 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-20 20:45 Yotam Barnoy
2014-01-20 21:08 ` Siraaj Khandkar [this message]
2014-01-20 21:16 ` Yotam Barnoy
2014-01-20 21:31 ` Siraaj Khandkar
2014-01-20 21:43 ` Yotam Barnoy
2014-01-20 22:55 ` Siraaj Khandkar
2014-01-21 1:37 ` Yotam Barnoy
2014-01-21 9:49 ` Goswin von Brederlow
2014-01-21 15:27 ` Yotam Barnoy
2014-01-23 9:20 ` Goswin von Brederlow
2014-01-23 9:35 ` Arnaud Spiwack
2014-01-27 9:32 ` Goswin von Brederlow
2014-01-28 9:21 ` Arnaud Spiwack
2014-02-01 14:52 ` Goswin von Brederlow
2014-02-03 9:20 ` Arnaud Spiwack
2014-01-23 18:18 ` Yotam Barnoy
2014-01-27 9:46 ` Goswin von Brederlow
2014-01-29 17:16 ` Yotam Barnoy
2014-02-01 15:03 ` Goswin von Brederlow
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=52DD904B.1000008@khandkar.net \
--to=siraaj@khandkar.net \
--cc=caml-list@inria.fr \
/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