Compilation failure
    bearophile 
    bearophileHUGS at lycos.com
       
    Sun Jul  8 14:59:34 PDT 2012
    
    
  
> When I put tmp1 outside the main loop, it compiles fine and 
> gives the expected output.
> When tmp1 is put inside the main loop, the compiler seems to 
> get stuck in a loop?
> //immutable int[] tmp1 = [1, 2]; // compiles
>
> void main()
> {	
> 	immutable int[] tmp1 = [1, 2]; // does not compile
> 	
> 	int[tmp1.length] tmp2 = tmp1;
> 	
> 	tmp2[] += 1;
Generally the  int[tmp1.length]  syntax tries to define a 
fixed-sized array, but currently in D there are no 
VariableLengthArrays of C99, there are only dynamic arrays and 
fixed-sized arrays, so the size must be known at compile-time. 
But when tmp1 is defined inside the main, it is a dynamic array, 
so its length isn't a compile-time known value. This explains why 
it doesn't compile if tmp1 is defined inside the main().
The large number of the same error message is small a compiler 
diagnostic bug, that should be reported in bugzilla.
When tmp1 is defined globally, dmd is doing something different, 
in some way it sees global immutables almost  as enums... I don't 
know if this is present in D specs.
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list