Match && CIL switch
От: Воронков Василий Россия  
Дата: 21.05.10 20:42
Оценка: 6 (1) +1
Такой вот код на C#:

var x = 0;

switch (x)
{
    case 0: break;
    case 1: break;
    case 2: break;
}


компилируется в:

L_0001: ldc.i4.0 
L_0002: stloc.0 
L_0003: ldloc.0 
L_0004: stloc.1 
L_0005: ldloc.1 
L_0006: switch (L_0019, L_001b, L_001d)
L_0017: br.s L_001f
L_0019: br.s L_001f
L_001b: br.s L_001f
L_001d: br.s L_001f


Match на Немерле:

def x = 0;

match (x) {
    | 0 => {}
    | 1 => {}
    | 2 => {}
}


компилируется в :

L_0002: ldc.i4.0 
L_0003: stloc.0 
L_0004: nop 
L_0005: ldloc.0 
L_0006: ldc.i4.0 
L_0007: bne.un L_0015
L_000c: nop 
L_000d: nop 
L_000e: nop 
L_000f: nop 
L_0010: br L_003e
L_0015: nop 
L_0016: ldloc.0 
L_0017: ldc.i4.1 
L_0018: bne.un L_0026
L_001d: nop 
L_001e: nop 
L_001f: nop 
L_0020: nop 
L_0021: br L_003e
L_0026: nop 
L_0027: ldloc.0 
L_0028: ldc.i4.2 
L_0029: bne.un L_0037
L_002e: nop 
L_002f: nop 
L_0030: nop 
L_0031: nop 
L_0032: br L_003e
L_0037: nop 
L_0038: newobj instance void [Nemerle]Nemerle.Core.MatchFailureException::.ctor()
L_003d: throw 
L_003e: nop 
L_003f: nop


Как говорится, почувствуйте разницу.

Можно ли ожидать, что генерация match-а, когда образцами выступают целые/энумы, будет производиться как в C#?
Очень бы этого хотелось
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.