----- Original Message -----
From: "Jaroslaw Kowalski" <[EMAIL PROTECTED]>
To: "Troy Laurin" <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Wednesday, July 21, 2004 9:57 AM
Subject: [Nant-users] Re: [nant-dev] Typed properties


> On Wed, 21 Jul 2004, Troy Laurin wrote:
>
> > Jarek, others,
> >
> > I kind of like the idea of a property having a type, but I have a few
> > questions regarding implementation...
> >
> > In the following...
> >
> > <property name="a" type="int" value="1234" />
> > <property name="a" value="5678" />
> >
> > If the default type for properties if none is specified is 'string',
> > then what is the type of 'a' after the two property assignments above?
>
> The idea is that the type conversion occurs AFTER the value has been
> evaluated and BEFORE the value is stored.

What about dynamic properties ? These are not evaluated before they are
stored ...

> The destination type is "string"
> unless overriden by "type" attribute. This is what most people expect from
> assignment operation (in languages like C++, C#, Java ...)
>
> > <property name="a" value="${convert::to-int('1234')}" />
> >
> > Again, if the default property type is 'string', then what is the type
> > of 'a' after this assignment?
>
> "string"
>
> HOWEVER: We could be smart (or dumb - pick one) by introducing the
> following rule: If the value of the property already has a type and
> <property> doesn't specify a type - use the resulting type. In this case
> the answer would be "integer". This can be confusing, though:

Yeah, and we should avoid confusion (and complexity) whenever possible ...
we're already getting enough questions as is ;-)

>
> Some examples of inferenced types:
>
> <property name="a" value="1" /> -- type=string
> <property name="a" value="${1}" /> -- type=integer
> <property name="a" value="${true}" /> -- type=boolean
> <property name="a" value="true" /> -- type=string
> <property name="a" value="tru${'e'}" /> -- type=string
> <property name="a" value="${false}z" /> -- type=string
>
> > Regarding disallowing all implicit conversions in operators, I can see
> > why you might want this, but I have a feeling that it will be more of a
> > source for error than a means for preventing errors... mostly because it
> > isn't always (often?) going to be apparent by looking at the build file
> > exactly what a property's type is.  I imagine this will lead to people
> > not using types because of the dangers of inappropriate implicit
> > conversion, or guarding against implicit conversion by extensively
> > (excessively) using explicit conversion.
>
> Property's type is always "string" unless specifically overriden. Simple.
> All implicit conversion will be disabled and will cause an error requiring
> you to fix your build file.
>
> > Notwithstanding, "it's possible to do it without breaking
> > compatibility"... you can't claim this if you are making a change that
> > turns a previously valid operation into an error!
>
> Yes, but there's been no stable release of NAnt + expressions. We've had a
> discussion with Gert some time ago and agreed we need to get rid of
> implicit conversions by the time 0.85 ships.

I still agree with this, but I'm not the only one to decide upon this
ofcourse ...

>
> > Having said the above, there is an alternative to disallowing implicit
> > type conversion (that unfortunately also breaks backwards compatibility)
> > that means that all implicit type conversions should be safe:
> > I've never been a particular fan of overloading the '+' operator with
> > string concatenation... if '+' only means addition, then it would always
> > involve numeric-conversion.

what about, for example, datetime values ?  we currently support the
additional of datetime and timespan values ...

> Because there is no implicit conversion
> > from boolean to integer, a boolean operand will cause an error.
> > Conversely if (for example) '|' means concatenation then it would always
> > involve (unambiguous) string-conversion.
>
> I like the idea. We could replace '+' with a '.' as it is used in PERL or
> PHP for example. Alternatively we could have string::concat(...) for this
> purpose but this would be too verbose.
>
> > Would just this last be enough type safety?  It still includes implicit
> > conversion from string to int/float, but in a (IMHO) safe fashion.
>
> After some thought, I give this idea (using concatenation operator other
> than a plus) +1. Gert, what do you think? This would solve 99% of all
> ambiguity problems without the need for typed properties.

Think I still need to give it some more thought ... I'm in "holiday" mode
today ;-)

Gert



-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to