RE: [sv-ec] Mantis 1857 - extern method types for parameterized classes

From: Arturo Salz <Arturo.Salz_at_.....>
Date: Wed Jun 20 2007 - 10:12:47 PDT
I agree with Mike's comments (and sympathize with Neil's ordering). I
believe that we could accept both forms (3) and (4), and consider from
(4) as a shorthand for (3). The shorthand form avoids in a somewhat
elegant way the problem of specifying the wrong (i.e., different)
default parameter type.

In particular, as Gord mentioned, form (3) - and (4) - are very
symmetric to the look of parameterized tasks and functions. The change I
propose is to allow form (4) for parameterized tasks/functions, and
since this form provides no default specialization, such tasks/functions
would *always* require an explicit specialization - something that I
consider a good methodology.

One final question, is the "type" keyword needed? 

	function #(T) T C::get();

    Arturo

-----Original Message-----
From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of Neil
Korpusik
Sent: Wednesday, June 20, 2007 8:56 AM
To: Gordon Vreugdenhil
Cc: SV_EC List
Subject: Re: [sv-ec] Mantis 1857 - extern method types for parameterized
classes

Thanks to Gord and Mike for working on these alternatives.

Below are my preferences (the first one being the most desirable).
I actually prefer 4) or 3) a lot more than either 1) or 2). I
would even be willing to allow both 4) or 3) as being equivalent
alternatives. Users could choose the form (4 or 3)that most suites
their taste.


4) function #(type T) T C::get();
3) function #(type T = int) T C::get();
1) C::function T get();
2) function::C T get();

Neil



Gordon Vreugdenhil wrote On 06/20/07 07:17,:
> Mike Mintz and I exchanged a fair amount of email on the
> issue of dealing with return types for extern functions of
> parameterized classes.  We agree that, as in C++, one needs
> to be able to determine that names in the function return
> type can be recognized as such prior to parsing the return type.
> 
> We didn't agree on the style that should be used for such
declarations.
> 
> Here is the original simple example:
> 
>     class C #(type T = int);
>        T x;
>        extern function T get();
>     endclass
> 
> Here are some alternatives that we discussed for the external
definition:
>    1)  C::function T get();    // what I originally proposed
>    2)  function::C T get();
>    3)  function #(type T = int) T C::get();
> 
> 
> Some of the points in the discussion:
>    a) (3) is essentially what C++ does for template methods;
>       the template formals are duplicated and the combination
>       of that and the "C::get" gives you what you need.
>    b) (1) or (2) are just "short hands" for (3)
>    c) (2) could permit a full duplication of the template
>       parameters if we wanted:
>          function::C#(type T = int) T get();
>    d) (1) and (2) would allow but not require the class prefix
>       (C::) prior to "get".  (3) requires C::get.
>    e) If we adopt some variant of Mantis 696 (parameterized
>       tasks and functions) then (3) has a very symmetric
>       form with how parameterized functions would look, with
>       just the class prefix "C::" to indicate that is the
>       definition of an external (this is what C++ has as well).
> 
> The symmetry argument is very reasonable but I personally
> don't find it completely compelling.  I have a pretty
> strong bias against forced redundancies and the required
> cut-and-paste of the parameterization provides more
> opportunities for error with the symmetry being the only
> benefit.
> 
> I would be happier with a modified form (that Mike and I
> didn't discuss):
>     4) function #(type T) T C::get();
> since then at least you don't have to repeat defaults.
> 
> 
> Any of these solve the fundamental problem.  My preference
> is still (1) with (2), (4) and (3) being my choices in
> decreasing preference.
> 
> We should take this up in committee, but I would like to
> see if we can reach consensus on a preferred form via
> a straw poll of the group.  If there is a reasonable level
> of consensus on one form, I'd be happy to write that up
> prior to the next meeting.
> 
> Mike, I hope that I conveyed the core of the discussion
> in a fair manner.  If I mischaracterized anything, please
> jump in.  Thanks for the great discussion; your input
> is very valuable.
> 
> Gord.

-- 
---------------------------------------------------------------------
Neil Korpusik                                     Tel: 408-276-6385
Frontend Technologies (FTAP)                      Fax: 408-276-5092
Sun Microsystems                       email: neil.korpusik@sun.com
---------------------------------------------------------------------


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jun 20 10:13:08 2007

This archive was generated by hypermail 2.1.8 : Wed Jun 20 2007 - 10:13:31 PDT