[PRL] disallowing shadowing

Matthias Felleisen matthias at ccs.neu.edu
Sun May 29 17:36:44 EDT 2005


There is a paper (tech rpt) by Dave Hanson on why scope doesn't matter. 
1980. UofA. It repeats your argument. -- Matthias


On May 29, 2005, at 5:25 PM, David Herman wrote:

>> Every fragment of my program is going to affect what changes I can 
>> make to its outer context.  This means that every time I want to 
>> introduce a new global name, rather than merely inspecting the 
>> current list of global names, I'll have to inspect the entire program 
>> text to ensure that there are no collisions.
>
> Sure. That's not much different than the way I described it, although 
> you have a point that it's more of a problem for adding things at the 
> top than at the bottom. But if you subscribe to the idea of 
> modularity, your program modules should never grow very big anyway, so 
> scalability shouldn't be that problematic.
>
>> Look, how about this way of looking at things: you know that systems 
>> programming language, what's it called . . . C?  It has a pretty 
>> restrictive set of rules for what you name procedures.  You should 
>> try programming in that for a while and let us know how it turns out.
>
> Feeling snarky today, are we? I have written plenty of C programs, 
> thank you very much.
>
> As for the particular issue of C procedure names, if you mean that 
> they all go in a global namespace, that's not quite the same thing. 
> Mzscheme doesn't let you reuse top-level bindings, either, but the 
> module system allows you to rename them or not to import them at all. 
> That's different from shadowing. (I'm currently of the opinion that 
> although you can *model* the binding semantics of module systems using 
> just the lambda calculus, it's not the same thing as local binding, 
> and the two should be conceptually distinguished.)
>
> Java is closer to the semantics I was describing:
>
>     ...
>     int x = 1;
>     {
>         int x = 2;
>         System.out.println(x);
>     }
>
> Test.java:5: x is already defined in main(java.lang.String[])
>             int x = 2;
>                 ^
> 1 error
>
> Essentially the same program compiles and runs fine in C.
>
> I'm especially interested in subtle ways this prohibition of local 
> rebinding might interfere with other PL features, or if there are 
> other deep reasons for the idea of shadowing.
>
> Dave
>
>
> _______________________________________________
> PRL mailing list
> PRL at lists.ccs.neu.edu
> https://lists.ccs.neu.edu/bin/listinfo/prl




More information about the PRL mailing list