clarity needed for the non-sealed keyword
forax at univ-mlv.fr
forax at univ-mlv.fr
Fri Oct 9 07:17:01 UTC 2020
----- Mail original -----
> De: "Pravin Jain" <pravin at zensoftech.co.in>
> À: "Brian Goetz" <brian.goetz at oracle.com>
> Cc: "Florian Weimer" <fw at deneb.enyo.de>, "Remi Forax" <forax at univ-mlv.fr>, "amber-dev" <amber-dev at openjdk.java.net>
> Envoyé: Vendredi 9 Octobre 2020 08:08:10
> Objet: Re: clarity needed for the non-sealed keyword
> Hi Brian,
>
> One of the points which has not been considered, is using an ASCII
> letter which has not been used by any other standard tokens(operator,
> separator) e.g. using one of # or ` (hash or backtick)
> Yes, it may not be natural, so was the _(underscore) when it was used
> in a numeric literal, but readibility was good _(underscore),
> similarly using a # instead of
> hyphen in new keywords may also be considered. It would not have the
> problem of ambiguity, and readibility will not be as bad.
using one or several hyphens in names, usually referred as kebab-case because if the word is using two hyphens it looks like a spit, is pretty commons in several programming languages [1] (ok, most of them are dialects of LISP).
>
> The hyphenated keywords require a look ahead, which consumes white
> spaces including new-line characters. This would be possible for
> compilers and IDEs to manage to some extend but, a very big ask for
> the REPL tools like jshell.
Nope, no lookahead,
a lookahead is when the parser needs to read one (or more) tokens in advance, here, the work is done by the lexer before the token reaches the parser.
What you need is a lexer with some rules enabled or disabled given the context, it's a fairly old technique, lex, the lexer from the 70ies [2], has lexing modes.
And it solves both the need for contextual keywords like "module" or "record" that have different meaning depending where they are declared and hyphen keywords.
>
> I tried using non-sealed on a separate line with jshell to define a
> non-sealed class, but it is getting tokenized as three tokens.
> I could easily define an abstract class by starting with abstract on a
> separate line, but this doesn't work for non-sealed keyword.
If it doesn't work with jshell, please submit a bug !
>
> I understand that # may not look good, but if could be used, then there are less problems.
Nope, most people will never think that the keyword "non-sealed" requires some bookkeepings. And that's exactly what we want.
>
> Thanks and regards,
> Pravin
regards,
Rémi
[1] https://en.wikipedia.org/wiki/Naming_convention_(programming)#Multiple-word_identifiers
[2] https://en.wikipedia.org/wiki/Lex_(software)
>
> On Fri, Oct 9, 2020 at 1:10 AM Brian Goetz <brian.goetz at oracle.com> wrote:
>>
>>
>> > But why does the keyword contain a “-”? Why wasn't “nonsealed” good
>> > enough?
>>
>> The rationale for the creation of hyphenated keywords is well
>> documented. See, for example:
>>
>> http://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000945.html
>>
>> and
>>
>> https://openjdk.java.net/jeps/8223002
>>
>>
>
>
> --
> Pravin Jain
> (M)+91-9426054269
More information about the amber-dev
mailing list