Automatic typing

JS js.mdnq at gmail.com
Fri Jun 28 17:00:52 PDT 2013


On Friday, 28 June 2013 at 22:29:21 UTC, Walter Bright wrote:
> On 6/27/2013 5:34 PM, JS wrote:
>> Would it be possible for a language(specifically d) to have 
>> the ability to
>> automatically type a variable by looking at its use cases 
>> without adding too
>> much complexity? It seems to me that most compilers already 
>> can infer type
>> mismatchs which would allow them to handle stuff like:
>>
>> main()
>> {
>>    auto x;
>>    auto y;
>>    x = 3;   // x is an int, same as auto x = 3;
>>    y = f(); // y is the same type as what f() returns
>>    x = 3.9; // x is really a float, no mismatch with previous 
>> type(int)
>> }
>>
>> in this case x and y's type is inferred from future use. The 
>> compiler
>> essentially just lazily infers the variable type. Obviously 
>> ambiguity will
>> generate an error.
>>
>
> I don't see a compelling use case for this proposal, or even 
> any use case. There'd have to be some serious advantage to it 
> to justify its complexity.

Is variant useful? If not then you have a point. I'm not 
proposing anything that variant can't already do except add 
compile time performance. I do not think the complexity is much 
more than what is already done.

D already checks for time mismatch. With such a variant or auto 
the check simply is more intelligent.

e.g.,

auto x;  // x's type is undefined or possibly variant.
x = 3;   // x's type is set temporarily to an int
...
x = 3.0; // ****


at **** we have several possibilities.

    1. Throw an error, this makes auto more useful and avoids many 
pitfalls.
    2. Set x's type to a variant. [possibly goto 3 if castable to 
new type]
    3. Set x's type to a double.

Both 2 and 3 require an extra pass to convert the code because it 
uses forward inference.

auto looks only at the immediate assignment expression to 
determine the type. I am talking about generalizing it to look in 
the scope with possible fallback to a variant type with optional 
warning, an error, or type enlargement.




More information about the Digitalmars-d mailing list