On 20 Oct 2022, at 9:12, Brian Goetz wrote:

>>     If we embrace “it is anonymous” I think we get the cleanest
>>     experience. People won’t be tempted to predict the name and refer
>>     to it somehow (with reflection or even source code).
>>
>>     If we embrace “it has a name you didn’t pick” I think we get a
>>     simpler onramp story, but at the cost of dark corners in the UE.
>>     Users will immediately try to exploit the fact that the name is
>>     semi-predictable, and write code that works with the names of
>>     these classes.
>>
>> After reading this (and the other thread), I'm more firmly convinced that 
>> using the file name is the right answer due to that "simpler onramp story".  
>> It allows the unnamed class to have a stable name which enables growing it 
>> to have proper constructors, referencing it from other classes, etc.  Users 
>> trying to predict are learning more advanced features and will be ready to 
>> upgrade their classes to have explicit names.  It becomes a much smaller 
>> step to then add the opening "class Foo {"  & closing "}".
>
> This is a pretty compelling argument.  You start out with what appears to be 
> a "naked" method, you add some more methods, maybe variables (sorry Remi) and 
> helper classes, and then at some point, the teacher explains "class".  And 
> then says, "hey, you didn't realize it, but you already wrote some classes!"  
> (Cue "you're soaking in it" commercial clip from the 70s.)
>
> There's a seed of this argument already in the initial writeup, where the 
> `this` receiver has been lurking in the background, and we mostly didn't 
> notice or ignored it.  Its there in all the methods, we had no reason to hide 
> it, we are just not shining the spotlight on it.  Dan, you're saying "exact 
> same thing for the class name".
>
> But, I hear John say, this implicit class sucks, it has a name derived from 
> some arbitrary artifact, maybe its name is FOO because the file system isn't 
> case sensitive, etc.  OK, well, if you need to use the name, and you don't 
> like the implicit one, then .... give it a name.  You've just learned why we 
> give classes names.
>
> So having explored the alternatives a bit farther, I'm getting more 
> comfortable with "accidental name".

Yeah, I’m getting there too after pulling on a string I liked more at first 
than I do now.  Thanks Dan.

Next question:  If we are embracing accidental names, what are the rules for 
the name-precursors?  Can we extract an accidental name from any possible file 
name in any possible file system?  Or are there restrictions on the file names? 
 Since this is a pedagogical feature, I suppose we require the “.java” suffix 
always, despite the inevitable requests for shebang script support.

And in particular, do we require that the basename of the file be a valid Java 
identifier (and not a Java keyword)?  So no “my-stuff.java” or “42.java” or 
“goto.java”?  Do you have to learn Java identifier syntax in the very first 
place?  (Seems reasonable to me at this moment.)

Reply via email to