Browse thread
warning on value shadowing
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| 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. http://www.lisp.org/HyperSpec/Body/fun_shadow.html http://www.lisp.org/HyperSpec/Body/sec_11-1-1-2-5.html 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. Sam.