Automatic typing
JS
js.mdnq at gmail.com
Sun Jun 30 20:44:39 PDT 2013
On Monday, 1 July 2013 at 01:56:22 UTC, Timon Gehr wrote:
> On 07/01/2013 03:08 AM, Kenji Hara wrote:
>> 2013/7/1 JS <js.mdnq at gmail.com <mailto:js.mdnq at gmail.com>>
>>
>> I am simply talking about having the compiler enlarge the
>> type if
>> needed. (this is mainly for built in types since the type
>> hierarchy
>> is explicitly known)
>>
>>
>> Just a simple matter, it would *drastically* increase
>> compilation time.
>>
>> void foo()
>> {
>> auto elem;
>> auto arr = [elem];
>>
>> elem = 1;
>> ....
>> elem = 2.0;
>> // typeof(elem) change should modify the result of
>> typeof(arr)
>> }
>>
>> Such type dependencies between multiple variables are common
>> in the
>> realistic program.
>>
>> When `elem = 2.0;` is found, compiler should run semantic
>> analysis of
>> the whole function body of foo _once again_, because the
>> setting type of
>> elem ignites the change of typeof(arr), and it would affect
>> the code
>> meaning.
>>
>> If another variable type would be modified, it also ignites
>> the whole
>> function body semantic again.
>>
>> After all, semantic analysis repetition would drastically
>> increase.
>>
>> I can easily imagine that the compilation cost would not be
>> worth the
>> small benefits.
>>
>> Kenji Hara
>
> The described strategy can easily result in non-termination,
> and which template instantiations it performs can be
> non-obvious.
>
> auto foo(T)(T arg){
> static if(is(T==int)) return 1.0;
> else return 1;
> }
>
> void main(){
> auto x;
> x = 1;
> x = foo(x);
> }
Sorry, it only results in non-termination if you don't check all
return types out of a function. It is a rather easy case to
handle by just following all the return types and choosing the
largest one. No big deal... any other tries?
More information about the Digitalmars-d
mailing list