Name is checked as a valid JavaIdentifier.
> On Oct 20, 2022, at 1:48 PM, John Rose <[email protected]> wrote: > > 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.)
