From: brogoff@speakeasy.net
To: Xavier Leroy <xavier.leroy@inria.fr>
Cc: Christophe Raffalli <Christophe.Raffalli@univ-savoie.fr>,
"caml-list@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] Type safe affectation ?
Date: Sun, 15 Jun 2003 11:53:19 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.44.0306151107490.29773-100000@grace.speakeasy.net> (raw)
In-Reply-To: <20030614153523.A21942@pauillac.inria.fr>
On Sat, 14 Jun 2003, Xavier Leroy wrote:
> > Why not allow a typesafe way to mute immutable data (sum, products,
> > immutable records and so on) ?
>
> Because that would make this data mutable :-)
Agreed. However, as has been discussed on the list before, the specific
example of list mutations where the mutation corresponds to filling
"holes" or "one hole contexts" and allow more tail recursion optimizations
is an important one that quite a few people would like to see addressed.
> Even if you're not interested in proofs of programs, I'm ready to bet
> that there aren't 1 programmer in 100 who can write *fully correct*
> code that manipulate mutable balanced trees, for instance. (I think I
> can't.)
It's interesting that the theory for two (or n) hole contexts isn't worked out
yet, or wasn't at the time Minamide wrote his paper.
> Also, keep in mind that the compiler can optimize based on
> immutability assumptions. For instance, the OCaml compiler performs
> propagation of structured constants and code motion for accesses
> inside data structures that are immutable. You might very well break
> something by using the set_cdr function above.
Is it the case that those functions which use it in a disciplined way,
basically rewriting those functions transformable from "ML + Minamide style
holes" to "ML + setcdr" are going to break something? I believe ExtLib is
doing this, and probably a few others wrote such libaries after the previous
round on this topic.
It might make sense to provide immutable views of records which have privately
mutable fields. This was discussed on the list too (by you and Pierre Weis I
believe), so I guess the right people are thinking about it.
> > By the way, another step would be to infer for each function if it mutes
> > its arguments instead of annoting record with "mutable" indication.
> >
> > This is better because the same data may be considered as mutable by
> > some functions (for instance when you construct the data) but then be
> > used only by immutable functions and this way the type inference can
> > help you insure that you do not mute the data anymore.
> >
> > But this is research topic ?
>
> This sounds reminiscent of effect systems.
On a related note, I'd like a way to make an immutable representation of the
built in array by not exporting the mutators, *and then* making the type
parameter covariant, say a signature like the following
module type FUNCTIONAL_ARRAY =
sig
type (+'a) t
val init : int -> (int -> 'a) -> 'a t
val get : 'a t -> int -> 'a
val length : 'a t -> int
val map : ('a -> 'b) -> 'a t -> 'b t
end
The only safe ways to do this using array are to hide array in a class
definition or a function closure. It seems that I should be able to
just write
type 'a t = 'a array
and have the type system figure out if it's OK. Arrays are efficient, and there
are quite a few cases in my coding where they are not mutable.
-- Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2003-06-15 18:53 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-13 6:44 [Caml-list] FP's and HyperThreading Processors David McClain
2003-06-13 8:06 ` John Max Skaller
2003-06-13 10:03 ` [Caml-list] Type safe affectation ? Christophe Raffalli
2003-06-14 13:35 ` Xavier Leroy
2003-06-15 18:53 ` brogoff [this message]
2003-06-15 19:49 ` Brian Hurt
2003-06-16 1:38 ` Jacques Garrigue
2003-06-13 18:38 ` [Caml-list] FP's and HyperThreading Processors Kip Macy
2003-06-13 21:23 ` David McClain
2003-06-13 21:39 ` Kip Macy
2003-06-13 21:56 ` David McClain
2003-06-14 22:08 ` John Max Skaller
2003-06-14 6:11 ` Ville-Pertti Keinonen
2003-06-13 19:07 ` Xavier Leroy
2003-06-13 21:33 ` Jim Farrand
2003-06-13 21:39 ` David McClain
2003-07-02 10:26 ` David Monniaux
2003-06-17 0:59 [Caml-list] Type safe affectation ? Gregory Morrisett
2003-06-17 11:10 ` Christophe Raffalli
2003-06-17 14:07 Gregory Morrisett
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=Pine.LNX.4.44.0306151107490.29773-100000@grace.speakeasy.net \
--to=brogoff@speakeasy.net \
--cc=Christophe.Raffalli@univ-savoie.fr \
--cc=caml-list@inria.fr \
--cc=xavier.leroy@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