SlideShare une entreprise Scribd logo
1  sur  51
> _
console.WriteLine(variable);
console.WriteLine(variable);
SyntaxTree tree =
CSharpSyntaxTree.ParseText(
@"using System;
class Foo{
static void Bar(int x){
Console.WriteLine(x);
}
}"
)
var msLib = new MetadataFileReference(
typeof(object).Assembly.Location) ;
SyntaxTree tree = CSharpSyntaxTree.ParseText(code);
var comp = CSharpSyntaxTree.Create("DotNetConf")
.AddReferences(msLib)
.AddSyntaxTrees(tree);
var result = comp.Emit("DotNetConf.exe");
int Calculate(int x)
{
var result = x;
do
{
result += 5;
} while (result < 15);
return result;
}
int Calculate(int n)
{
if (n <= 1)
return 1;
return n * Calculate(n - 1);
}
int Calculate(int n)
{
if (n <= 1)
return 1;
return n * Calculate(n - 1);
}
double Divider(int a, int b)
{
return a / b;
}
var myMethod = new DynamicMethod("DivideMethod",
typeof(double), new[] { typeof(int), typeof(int) },
typeof(Program).Module);
var il = myMethod.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Div);
il.Emit(OpCodes.Ret);
var result = myMethod.Invoke(null, new object[] { 10, 2 });
var method =
(Func<int,int,int>)myMethod.CreateDelegate(typeof(DivideDelegate));
var result2 = method(6, 2);
double Divider(int a, int b)
{
return a / b;
}
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET

Contenu connexe

Similaire à De Código a Ejecución: El Papel Fundamental del MSIL en .NET

Similaire à De Código a Ejecución: El Papel Fundamental del MSIL en .NET (20)

Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
 
PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1
 
Simulación - Algoritmo de productos medios
Simulación - Algoritmo de productos mediosSimulación - Algoritmo de productos medios
Simulación - Algoritmo de productos medios
 
1... conversor de bases
1... conversor de bases1... conversor de bases
1... conversor de bases
 
Trabajando con Procedimientos Almacenados y VB.Net
Trabajando con Procedimientos Almacenados y VB.NetTrabajando con Procedimientos Almacenados y VB.Net
Trabajando con Procedimientos Almacenados y VB.Net
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a Objetos
 
Newton And Neville Interpolation
Newton And Neville InterpolationNewton And Neville Interpolation
Newton And Neville Interpolation
 
Interpolación método de Lagrange
Interpolación método de LagrangeInterpolación método de Lagrange
Interpolación método de Lagrange
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Asp vNext Is Comming
Asp vNext Is CommingAsp vNext Is Comming
Asp vNext Is Comming
 
Vector
Vector Vector
Vector
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
Pf con scala
Pf con scalaPf con scala
Pf con scala
 
Swrewer nuevo hoy
Swrewer nuevo hoySwrewer nuevo hoy
Swrewer nuevo hoy
 
IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#
 
Conceptosfundamentales
ConceptosfundamentalesConceptosfundamentales
Conceptosfundamentales
 
Presentacion
PresentacionPresentacion
Presentacion
 
Red neuronal recurrente
Red neuronal recurrenteRed neuronal recurrente
Red neuronal recurrente
 
Unidad 2 informe tecnico
Unidad 2 informe tecnicoUnidad 2 informe tecnico
Unidad 2 informe tecnico
 

Plus de Germán Küber

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustGermán Küber
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptxGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidityGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentationGermán Küber
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#Germán Küber
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Germán Küber
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescateGermán Küber
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 

Plus de Germán Küber (20)

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
Mev Rapido.pptx
Mev Rapido.pptxMev Rapido.pptx
Mev Rapido.pptx
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptx
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidity
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentation
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Defensive code
Defensive codeDefensive code
Defensive code
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Defensive code C#
Defensive code C#Defensive code C#
Defensive code C#
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
C sharp 8
C sharp 8C sharp 8
C sharp 8
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 

Dernier

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 

Dernier (19)

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 

De Código a Ejecución: El Papel Fundamental del MSIL en .NET

  • 1.
  • 2. > _
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16. SyntaxTree tree = CSharpSyntaxTree.ParseText( @"using System; class Foo{ static void Bar(int x){ Console.WriteLine(x); } }" )
  • 17.
  • 18. var msLib = new MetadataFileReference( typeof(object).Assembly.Location) ; SyntaxTree tree = CSharpSyntaxTree.ParseText(code); var comp = CSharpSyntaxTree.Create("DotNetConf") .AddReferences(msLib) .AddSyntaxTrees(tree); var result = comp.Emit("DotNetConf.exe");
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40. int Calculate(int x) { var result = x; do { result += 5; } while (result < 15); return result; }
  • 41.
  • 42. int Calculate(int n) { if (n <= 1) return 1; return n * Calculate(n - 1); }
  • 43. int Calculate(int n) { if (n <= 1) return 1; return n * Calculate(n - 1); }
  • 44.
  • 45. double Divider(int a, int b) { return a / b; }
  • 46. var myMethod = new DynamicMethod("DivideMethod", typeof(double), new[] { typeof(int), typeof(int) }, typeof(Program).Module); var il = myMethod.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Div); il.Emit(OpCodes.Ret); var result = myMethod.Invoke(null, new object[] { 10, 2 }); var method = (Func<int,int,int>)myMethod.CreateDelegate(typeof(DivideDelegate)); var result2 = method(6, 2);
  • 47. double Divider(int a, int b) { return a / b; }

Notes de l'éditeur

  1. Parser (Análisis Sintáctico): En esta fase, el compilador lee el código fuente y lo descompone en tokens que siguen la gramática del lenguaje. Se construye un árbol sintáctico que representa la estructura lógica del código. Esta fase se ocupa de la estructura sintáctica del código, asegurándose de que esté bien formado según las reglas del lenguaje de programación. Symbol/Metadata (Símbolos y Metadatos): Durante esta etapa, el compilador analiza los símbolos definidos en el código, como variables, tipos y métodos, y los organiza en una tabla de símbolos. Esta fase también implica cargar y analizar los metadatos de las bibliotecas y ensamblados referenciados por el código fuente, formando una representación de todos los nombres y tipos utilizados. Binder (Vinculación): En la fase de vinculación, el compilador asocia cada identificador en el código con su declaración correspondiente en la tabla de símbolos, resolviendo las referencias y comprobando la semántica del código, como el alcance de las variables, la corrección de los tipos y la resolución de sobrecargas de métodos. IL Emitter (Emisión de IL): Esta es la fase final del proceso de compilación, donde el compilador convierte el código fuente analizado y procesado en MSIL (Microsoft Intermediate Language), el conjunto de instrucciones de bajo nivel que el CLR (Common Language Runtime) puede ejecutar. La salida de esta fase es un ensamblado que contiene el código MSIL junto con los metadatos necesarios para su ejecución.
  2. Parser (Análisis Sintáctico): En esta fase, el compilador lee el código fuente y lo descompone en tokens que siguen la gramática del lenguaje. Se construye un árbol sintáctico que representa la estructura lógica del código. Esta fase se ocupa de la estructura sintáctica del código, asegurándose de que esté bien formado según las reglas del lenguaje de programación. Symbol/Metadata (Símbolos y Metadatos): Durante esta etapa, el compilador analiza los símbolos definidos en el código, como variables, tipos y métodos, y los organiza en una tabla de símbolos. Esta fase también implica cargar y analizar los metadatos de las bibliotecas y ensamblados referenciados por el código fuente, formando una representación de todos los nombres y tipos utilizados. Binder (Vinculación): En la fase de vinculación, el compilador asocia cada identificador en el código con su declaración correspondiente en la tabla de símbolos, resolviendo las referencias y comprobando la semántica del código, como el alcance de las variables, la corrección de los tipos y la resolución de sobrecargas de métodos. IL Emitter (Emisión de IL): Esta es la fase final del proceso de compilación, donde el compilador convierte el código fuente analizado y procesado en MSIL (Microsoft Intermediate Language), el conjunto de instrucciones de bajo nivel que el CLR (Common Language Runtime) puede ejecutar. La salida de esta fase es un ensamblado que contiene el código MSIL junto con los metadatos necesarios para su ejecución.
  3. IL_0000: nop - No operation (no hace nada, a menudo se incluye por motivos de depuración). IL_0001: ldarg.0 - Carga el argumento en el índice 0 (el parámetro n) en el stack. IL_0002: ldc.i4.1 - Carga la constante entera 1 en el stack. IL_0003: cgt - Compara si el valor que está en el tope del stack es mayor que el siguiente valor debajo de él (en este caso, si n > 1). El resultado (true/false) se coloca en el stack. IL_0005: ldc.i4.0 - Carga la constante entera 0 en el stack. IL_0006: ceq - Compara si los dos valores en el tope del stack son iguales (si n > 1 es igual a 0, o si n <= 1). El resultado (true/false) se coloca en el stack. IL_0008: stloc.0 - Almacena el resultado de la comparación en la variable local en el índice 0. IL_0009: ldloc.0 - Carga el valor de la variable local en el índice 0 en el stack (el resultado de n <= 1). IL_000a: brfalse.s IL_0010 - Si el valor es false (es decir, si n > 1), salta a la instrucción en IL_0010. IL_000c: ldc.i4.1 - Si el valor fue true (es decir, si n <= 1), carga la constante 1 en el stack (caso base del factorial). IL_000d: stloc.1 - Almacena el valor 1 en la variable local en el índice 1. IL_000e: br.s IL_001d - Salta incondicionalmente a la instrucción en IL_001d. IL_0010: ldarg.0 - Carga el argumento n en el stack. IL_0011: ldarg.0 - Carga el argumento n en el stack nuevamente. IL_0012: ldc.i4.1 - Carga la constante entera 1 en el stack. IL_0013: sub - Resta 1 de n (lo que resulta en n - 1) y pone el resultado en el stack. IL_0014: call int32 Program::'<<Main>$>g__Calculate|0_0'(int32) - Llama a la función Calculate recursivamente con el argumento n - 1. IL_0019: mul - Multiplica n por el resultado de la llamada recursiva y coloca el resultado en el stack. IL_001a: stloc.1 - Almacena el resultado de la multiplicación en la variable local en el índice 1. IL_001b: br.s IL_001d - Salta incondicionalmente a la instrucción en IL_001d (esto se hace para unificar el flujo del programa después del if-else). IL_001d: ldloc.1 - Carga el valor de la variable local en el índice 1 en el stack (el resultado final del factorial). IL_001e: ret - Retorna el valor en el tope del stack (el resultado de la función).
  4. IL_0000: nop - No operation (no hace nada, a menudo se incluye por motivos de depuración). IL_0001: ldarg.0 - Carga el argumento en el índice 0 (el parámetro n) en el stack. IL_0002: ldc.i4.1 - Carga la constante entera 1 en el stack. IL_0003: cgt - Compara si el valor que está en el tope del stack es mayor que el siguiente valor debajo de él (en este caso, si n > 1). El resultado (true/false) se coloca en el stack. IL_0005: ldc.i4.0 - Carga la constante entera 0 en el stack. IL_0006: ceq - Compara si los dos valores en el tope del stack son iguales (si n > 1 es igual a 0, o si n <= 1). El resultado (true/false) se coloca en el stack. IL_0008: stloc.0 - Almacena el resultado de la comparación en la variable local en el índice 0. IL_0009: ldloc.0 - Carga el valor de la variable local en el índice 0 en el stack (el resultado de n <= 1). IL_000a: brfalse.s IL_0010 - Si el valor es false (es decir, si n > 1), salta a la instrucción en IL_0010. IL_000c: ldc.i4.1 - Si el valor fue true (es decir, si n <= 1), carga la constante 1 en el stack (caso base del factorial). IL_000d: stloc.1 - Almacena el valor 1 en la variable local en el índice 1. IL_000e: br.s IL_001d - Salta incondicionalmente a la instrucción en IL_001d. IL_0010: ldarg.0 - Carga el argumento n en el stack. IL_0011: ldarg.0 - Carga el argumento n en el stack nuevamente. IL_0012: ldc.i4.1 - Carga la constante entera 1 en el stack. IL_0013: sub - Resta 1 de n (lo que resulta en n - 1) y pone el resultado en el stack. IL_0014: call int32 Program::'<<Main>$>g__Calculate|0_0'(int32) - Llama a la función Calculate recursivamente con el argumento n - 1. IL_0019: mul - Multiplica n por el resultado de la llamada recursiva y coloca el resultado en el stack. IL_001a: stloc.1 - Almacena el resultado de la multiplicación en la variable local en el índice 1. IL_001b: br.s IL_001d - Salta incondicionalmente a la instrucción en IL_001d (esto se hace para unificar el flujo del programa después del if-else). IL_001d: ldloc.1 - Carga el valor de la variable local en el índice 1 en el stack (el resultado final del factorial). IL_001e: ret - Retorna el valor en el tope del stack (el resultado de la función).