caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Nils Becker <nils.becker@bioquant.uni-heidelberg.de>
To: caml-list@inria.fr
Subject: Re: [Caml-list] destructive local opens
Date: Mon, 17 Aug 2015 12:17:00 +0200	[thread overview]
Message-ID: <55D1B49C.2040309@bioquant.uni-heidelberg.de> (raw)

Sorry for the late comment.

The mentioned bug:

> let ox = V2.((dot v ox) * ox) in
> V2.(3 * ox + oy)

because V2 also has V2.ox sure is nasty. But the same would happen with
a local 'let open V2'.

let ox =
    let open V2 in
    (dot v ox) * ox in
V2.(3 * ox + oy)

For ease of reasoning I think it may be a good idea to make M.(...) and
M.!(...) behave in exactly the same way as let open and let open!
respectively, including error messages. This would probably forbid
distinguishing between infix operators and the rest.

(Admittedly, in the latter example one would be tempted to combine the
local opens here which would make things clearer)

> The reality is that M.() is inherently dangerous,

When one uses a (destructive) local open one trades the possibility of
ambiguity for conciseness. In a few cases the conciseness is really,
really important, so that this trade-off is worth it. (I'm thinking
about math.) The existence of let open! in the language says that there
is some consensus that ambiguity is sometimes acceptable.


>    The benefit is that I can understand what is happening by only
> looking at the
>    expression I'm reading. With your proposal I also need to go read
> the library
>    source to understand what is happening.

It's not that bad. Destructive opens mean one has to know the shadowing
module's signature. Only the values exported in the signature actually
shadow anything (I just tried it out) so one does _not_ need to know the
module source!

Right now, one cannot really use M.(...) to shadow without deactivating
warning 44. This is not ideal. With the syntax M.!(...) one would be
forced to declare shadowing intent and 44 could be switched on. Then

let ox = V2.!((dot v ox) * ox) in
V2.!(3 * ox + oy)

would still let the same bug happen but at least one was forced to write
an exclamation mark which should give a feeling of "be careful about
shadowing here!". Would this not be enough?


n.

             reply	other threads:[~2015-08-17 10:12 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-17 10:17 Nils Becker [this message]
2015-08-17 14:26 ` Gabriel Scherer
2015-08-17 15:11   ` Nils Becker
2015-08-17 15:17     ` Drup
2015-08-17 15:18     ` Gabriel Scherer
2015-08-17 18:31       ` Hendrik Boom
  -- strict thread matches above, loose matches on Subject: below --
2015-08-03 13:39 Nils Becker
2015-08-03 13:43 ` Thomas Refis
2015-08-03 13:45 ` Daniel Bünzli
2015-08-03 13:47   ` Daniel Bünzli
     [not found]     ` <55BF75F6.1040006@bioquant.uni-heidelberg.de>
2015-08-03 14:24       ` Daniel Bünzli
2015-08-03 14:37         ` Gabriel Scherer
2015-08-03 14:43           ` Daniel Bünzli
2015-08-03 15:10           ` octachron
2015-08-03 15:22             ` Daniel Bünzli
2015-08-03 16:13               ` octachron
2015-08-03 16:51                 ` Daniel Bünzli
2015-08-03 17:18                   ` Hendrik Boom
2015-08-03 17:59                   ` octachron
2015-08-04  6:51         ` Petter Urkedal
2015-08-04  9:33           ` Goswin von Brederlow
2015-08-05  6:40             ` Petter A. Urkedal
2015-08-05 10:16               ` David Allsopp
2015-08-06  9:35               ` Goswin von Brederlow
2015-08-04 13:50           ` Hendrik Boom
2015-08-04  9:26         ` Goswin von Brederlow
2015-08-04  9:38           ` Daniel Bünzli
2015-08-04 12:26             ` vrotaru.md
2015-08-04 13:12               ` David Allsopp
2015-08-04 13:17                 ` Jeremy Yallop
2015-08-04 13:54                   ` vrotaru.md
2015-08-04 15:25                   ` Drup
2015-08-04 22:22                     ` vrotaru.md
2015-08-04 22:55                       ` Hendrik Boom
2015-08-05  4:52                         ` Gabriel Scherer
2015-08-04 13:14               ` Ivan Gotovchits
2015-08-14 10:55                 ` Goswin von Brederlow
2015-08-14 11:28                   ` Drup
2015-08-18 11:11                     ` Goswin von Brederlow
2015-08-18 12:52                       ` David Allsopp
2015-08-18 13:00                         ` Gabriel Scherer
2015-08-18 22:26                           ` Anthony Tavener
2015-08-19 13:55                             ` Oleg
2015-08-19 14:13                               ` John Whitington
2015-08-19 15:47                                 ` Hendrik Boom
2015-08-19 15:52                             ` Hendrik Boom
2015-08-19 18:09                               ` Anthony Tavener
2015-08-19 15:55                             ` Simon Cruanes
2015-08-19 16:42                               ` Arthur Wendling
2015-08-19 21:15                               ` octachron
2015-08-20  8:06                                 ` Romain Bardou
2015-08-20 17:03                                   ` Yotam Barnoy
2015-08-20 19:19                                     ` Erkki Seppala
2015-08-06  9:23               ` Goswin von Brederlow
2015-08-06  9:21             ` Goswin von Brederlow
2015-08-06 10:19               ` Daniel Bünzli
2015-08-06 13:36                 ` Hendrik Boom
2015-08-14 10:57                   ` 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=55D1B49C.2040309@bioquant.uni-heidelberg.de \
    --to=nils.becker@bioquant.uni-heidelberg.de \
    --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;
as well as URLs for NNTP newsgroup(s).