English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
warning on value shadowing
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-02-21 (22:04)
From: Sam Steingold <sds@g...>
Subject: Re: warning on value shadowing
David Brown wrote:
> Sam Steingold wrote:
>> Christian Lindig wrote:
>>> On Feb 21, 2007, at 9:41 PM, Sam Steingold wrote:
>>>> Proposal: When both foo.ml and bar.ml define zot and quux.ml opens
>>>> both Foo and Bar, there should be a warning [..]
>>> While I see your concern I think open is best avoided.
>> Yes, of course.  Alas, I am not at liberty to arbitrarily and
>> pervasively change a huge code-reviewed project to satisfy my
>> stylistic preferences.  I just see no reason for the compiler not to
>> issue such a warning.
> One could also argue that this condition is an error.  The closest
> equivalent in Haskell is erroneous (only when the symbol is
> referenced).  Of course Haskell gives a lot more control over the
> importing or names, and is declarative, so it isn't equivalent at all.

It is also an error in Lisp - although there is a well defined way to 
avoid the error by explicitly specifying who shadows what.

I think there is a way to treat warnings as errors, so this is covered.

> The problem with this as a warning, is that outside of multiple
> modules, this scenario is fairly common:
>   let x = ...
>   let x = ... x ...
> Since ocaml uses the most recent declration, this is well defined, as
> it is with multiple 'open's.

it should be possible to separate 4 situations:
1 cross-module shadowing (warning)
2 redefining a global value in the same file (warning)
3 shadow a global value with a local one (warning)
4 redefine a local value as in your example (no warning)
the warnings can be made optional; one may be able to enable them 
separately (one by one) etc.