Proposal: Improved declaration using final keyword of internal method variables and for-loop statement
Joe Darcy
Joe.Darcy at Sun.COM
Tue May 19 17:57:15 PDT 2009
Hello.
I don't find this proposal very compelling. Slight performance
differences in the client, or server, compiler can change in update
releases.
Regards,
-Joe
On 03/31/09 02:04 AM, Andrej Navodnik wrote:
> Hi Project Coin members,
>
> here is my little proposal for improved declaration using final keyword
> of internal method variables and for-loop statement.
>
> Is it too late? Maybe not. At the time I'm sending this e-mail, in Honolulu, Hawaii, it is still Monday, 30 March 2009.
>
> Kind regards,
> Andrei
>
> -----------------------------------------------------------------------
>
> PROJECT COIN SMALL LANGUAGE CHANGE PROPOSAL FORM v1.0
>
> TITLE:
> Improved declaration using final keyword of
> internal method variables and for-loop statement
>
> AUTHOR(S):
> Andrei Navodnik (andrejnavodnik at yahoo.com)
>
>
> OVERVIEW
> ========
>
> FEATURE SUMMARY:
> Allow declaration of mixed final and non-final internal method
> variables in one statement and enable final keyword in for-loop
> declaration for variables other than index variable.
>
> MAJOR ADVANTAGE:
> Suppose that the developer wants to have as much variables defined
> as final then if this feature were accepted in the language one major
> advantage would be to allow shorter syntax of internal method variables.
> Mixing of final and non-final variables in one declaration statement
> would be allowed which is prohibited with the current state of the
> compiler. The compiler either allows all variables to be final or
> all variables to be non-final.
>
> As far as for-loop declaration is concerned, this feature would allow
> syntax that is more compact (no pollution of scope outside of the
> for-loop) and "safer" (the size of the list would be assigned to final
> variable and this value can not be changed inside of the loop).
>
> MAJOR BENEFIT:
> Suppose that the majority of code is written as
>
> for (int i = 0; i < values.size(); i++ ) {
> // ...
> }
>
> then this feature would allow easier refactoring to the optimized
> style of for-loops
>
> for (int i = 0, final n = values.size(); i < n; i++) {
> // ...
> }
>
> because variable n can not be already defined in the scope either
> outside or inside of the for-loop. Any such violation would make
> program uncompilable. According to my benchmarks the later style of
> for-loops is also slightly faster in client VM.
>
> MAJOR DISADVANTAGE:
> If the feature were accepted then the major disadvantage in my opinion
> would be slightly more complex grammar which would have to take care
> of the compatibility with the existing programs.
>
> ALTERNATIVES:
> One of the alternatives to the proposed syntax (see simple example
> bellow) would be to declare internal method variables in separate
> statements, for example one statement for all non-final variables and
> one statement for all final variables. Someone might even argue that
> syntax where each variable is defined on separate statements is better
> comparing to the syntax where all variables are defined in one
> statement.
>
> int a, c = 1;
> final b, d = 4;
>
> But, if developer's strategy is to define all read-only variables as
> final then the alternatives to the proposed syntax for the for-loop
> are not very nice. One is to declare variable of the size of the list
> outside of the for-loop declaration, for example
>
> final n = values.size();
> for (int i = 0; i < n; i++) {
> // ...
> }
>
> or to declare index variable outside of the for-loop.
>
> int i = 0;
> for (final int n = values.size(); i < n; i++ ) {
> // ...
> }
>
>
> EXAMPLES
> ========
>
> SIMPLE EXAMPLE:
> If the proposal were accepted then the code below should be valid.
> Please, compare the proposed syntax with the alternatives presented
> above.
>
> int a, final b, c = 1, final d = 4;
> for (int i = 0, final n = values.size(); i < n; i++) {
> // ...
> }
>
> ADVANCED EXAMPLE:
> No advanced example.
>
>
> DETAILS
> =======
>
> SPECIFICATION:
> To support mixed final and non-final internal method variables the
> grammar should be changed as follows:
>
> LocalVariableDeclarationStatement:
> AllVariablesFinalDeclarationStatement
> SomeVariablesFinalDeclarationStatement
>
> AllVariablesFinalDeclarationStatement:
> final Type VariableDeclarators ;
>
> SomeVariablesFinalDeclarationStatement:
> Type SomeVariablesFinalDeclarators ;
>
> SomeVariablesFinalDeclarators:
> VariableDeclarator { , VariableMaybeFinalDeclarator }
>
> VariableMaybeFinalDeclarator:
> [final] Identifier SomeVariablesFinalDeclaratorsRest
>
> SomeVariablesFinalDeclaratorsRest:
> SomeVariablesFinalDeclaratorsRest { , VariableMaybeFinalDeclarator }
>
> To better support final keyword in the for-loop declaration the grammar
> should be changed as follows:
>
> ForVarControl:
> AllVariablesFinalForVarControl
> SomeVariablesFinalForVarControl
>
> AllVariablesFinalForVarControl:
> final [Annotations] Type Identifier ForVarControlRest
>
> SomeVariablesFinalForVarControl:
> [Annotations] Type Identifier SomeVariablesFinalForVarControlRest
>
> SomeVariablesFinalForVarControlRest:
> SomeVariablesFinalDeclaratorsRest; [Expression] ; [ForUpdate]
> : Expression
>
> TESTING:
> No specific testing is needed to test this feature.
>
> LIBRARY SUPPORT:
> The proposed language feature needs no additional library support.
>
> REFLECTIVE APIS:
> The feature does not affect reflective API's.
>
> OTHER CHANGES:
> The feature does not need other changes.
>
> MIGRATION:
> Existing programs should work without any change.
>
> COMPATIBILITY:
> All existing programs are compatible.
>
> BREAKING CHANGES:
> None.
>
> EXISTING PROGRAMS:
> There should be no impact on existing programs.
>
>
> REFERENCES
> ==========
>
> EXISTING BUGS:
> RFE has been already filed for this feature, please check internal
> review ID 1200191.
>
> URL FOR PROTOTYPE:
> There is no prototype for this feature.
>
>
>
>
>
>
>
More information about the coin-dev
mailing list