( LCoder | 2020. 07. 14., k – 08:22 )

A bytekód is statikusan típusos, legalábbis C# alatt biztosan.

Vegyünk egy ilyen kódot:

 int i = 0;
 while(i<10)            
     i++;

Ebből ez az IL kód lesz:

IL_0000: ldc.i4.0           // Push 0 of type int32 onto the stack as int32.
IL_0001: stloc.0            // Pop a value from stack into local variable 0
IL_0002: br.s IL_0008   // Brach to target

IL_0004: ldloc.0            // Load local variable 0 onto stack.
IL_0005: ldc.i4.1           // Push 1 onto the stack as int32.
IL_0006: add                // Add two values, returning a new value
IL_0007: stloc.0           // Pop a value from stack into local variable 0

IL_0008: ldloc.0            // Load local variable 0 onto stack.
IL_0009: ldc.i4.s 10      // Push 10 onto the stack as int32, short form.
IL_000b: blt.s IL_0004  // Branch to target if less than, short form.

IL_000d: ret           // Return from method, possibly with a value.

Na, ez így nem túl szép, viszont elég típusos.

Viszot a belőle fordított assembly:

              xor         eax,eax                  
loop0:    inc          eax                  
              cmp       eax,0Ah  
              jl            loop0
              ret 

 

Más kérdés hogy a C#-ban lehet olyasmit csinálni ami nem ilyen szép, de bizony a dolog elég statikusan típusos.