me di cuenta de que el compilador de C# genera una instrucción ret
al final de void
métodos:¿Se requiere una instrucción ret en las aplicaciones .NET?
.method private hidebysig static void Main(string[] args) cil managed
{
// method body
L_0030: ret
}
He escrito un compilador para .NET y funciona sin importar si emiten una declaración ret
o no (I' he comprobado el IL generado y de hecho no está allí).
Me pregunto: ¿Es ret
en métodos que requieren void
requerido para algo? Parece que no hace nada con la pila, por lo que creo que es completamente innecesario para los métodos void
, pero me gustaría saber de alguien que sepa un poco más sobre el CLR.
(supongo que el C# chicos emiten RET en el método de vacío becuase que hace que su trabajo sea más fácil: sólo tiene la función de un generador de métodos en su compilador que se utiliza para los métodos y sin efecto y no vacíos solo siempre emite ret en lugar de verificar si es necesario. Aunque estoy adivinando) –
podrías usar el reflector .NET para ver si genera un bytecode diferente. Mi conjetura es absolutamente no, porque no hay ninguna razón para ello. La suposición que mencionas en tu comentario también se ve bien. –
@Merlyn No, no es así. Si no emito ret, no se emite ret en el IL. –