Automatic typing

Walter Bright newshound2 at digitalmars.com
Mon Jul 1 17:52:13 PDT 2013


On 7/1/2013 4:30 PM, Andrei Alexandrescu wrote:
> Yes, and in fact it's already done. Consider:
>
> if (expr)
> {
>      int a;
>      ...
> }
> else
> {
>      int b;
>      ...
> }
>
> In some C implementations, a and b have the same physical address. In some
> others, they have distinct addresses. This appears to not be related, but it is
> insofar as a and b have non-overlapping lifetimes.

What is happening with (modern) compilers is the "live range" of each variable 
is computed. A live range is nothing more than a bitmap across the instructions 
for a function, with a bit set meaning "the variable is in play at this point".

The compiler then uses a "tetris" style algorithm to try to fit as many 
variables as possible into the limited register set, and to use as little stack 
space as possible.

The usual algorithms do not use scoping to determine the live range, but look at 
actual usage. A variable that, for example, that has no usage is considered 
'dead' and is removed.

The proposal here neither adds nor subtracts from this.


More information about the Digitalmars-d mailing list