caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Purity in ocaml
@ 2014-01-20 20:45 Yotam Barnoy
  2014-01-20 21:08 ` Siraaj Khandkar
  2014-01-21  9:49 ` Goswin von Brederlow
  0 siblings, 2 replies; 19+ messages in thread
From: Yotam Barnoy @ 2014-01-20 20:45 UTC (permalink / raw)
  To: Ocaml Mailing List

[-- Attachment #1: Type: text/plain, Size: 2090 bytes --]

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?

-Yotam

[-- Attachment #2: Type: text/html, Size: 2330 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-02-03  9:20 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-20 20:45 [Caml-list] Purity in ocaml Yotam Barnoy
2014-01-20 21:08 ` Siraaj Khandkar
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

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