Π ΠΎΠ»Ρ CIL
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΡ Π±Π»ΠΎΠΊΠ°Ρ .NET, Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠΎΠ»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° (CIL). CIL- ΡΡΠΎ ΡΠ·ΡΠΊ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²ΡΡΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ·ΡΠΊ .NET Π²Ρ Π²ΡΠ±Π΅ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ CIL. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ C# ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ. ΠΠ΅ ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ° ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΠΌΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Add() Π² ΠΊΠ»Π°ΡΡΠ΅ Calc.
// Calc.cs
using System;
namespace CalculatorExample {
// ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
public class CalcApp {
static void Main() {
Calc Ρ = new Calc();
int ans = c.Add(10, 84);
Console.WriteLine("10 + 84 is {0}.", ans);
// ΠΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ ΠΊΠ»Π°Π²ΠΈΡΡ Π²Π²ΠΎΠ΄Π°.
Console.ReadLine();
}
}
// C#-ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ.
public class Calc {
public int Add(int x, int y) {return x + y;}
}
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ C# (csc.exe) ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ *.exe, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ, CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π°ΡΠΏΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠΎΠ² Calc ΠΈ CalcApp. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΡΠΊΡΠΎΠ΅ΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ildasm.exe (ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ildasm.exe Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΡΠΎΠΉ ΠΆΠ΅ Π³Π»Π°Π²Π΅), Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Add () Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ CIL ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ.
.method public hidebysig instance int32 Add(int32 x, int32 y) cil managed
{
// Code size 8 (0x8)
.maxstack 2
.locals init ([0] int32 CS$l$0000)
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add
IL_0003: stloc.0
IL_0004: br.s IL_0006
IL_0006: ldloc.0
IL_0007: ret
} // end of method Calc::Add
ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΊΠ° Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΠ½ΡΡΡ CIL-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° β Π² Π³Π»Π°Π²Π΅ 15 Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ CIL. ΠΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ C# Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ CIL-ΠΊΠΎΠ΄, Π° Π½Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ, ΡΡΠΎ ΡΡΠΎ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ .NET-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Basic .NET (VB .NET), Π° Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ C#.
' Calc.vb
Imports System
Namespace CalculatorExample
' VB .NET 'ΠΠΎΠ΄ΡΠ»Ρ' β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ' ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»Π΅Π½Ρ.
Module CalcApp
Sub Main()
Dim ans As Integer
Dim Ρ As New Calc
ans = c.Add(10, 84)
Console.WriteLine("10 + 84 is {0}.", ans)
Console.ReadLine()
End Sub
End Module
Class Calc
Public Function Add(ByVal x As Integer, ByVal Ρ As Integer) As Integer
Return x + Ρ
End Function
End Class
End Namespace
ΠΡΠ»ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ CIL-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Add(), Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (ΡΠ»Π΅Π³ΠΊΠ° "ΠΏΠΎΠ΄ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅" ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ VB .NET).
.method public instance int32 Add(int32 x, int32 y) cil managed
{
// Code size 9 (0x9)
.maxstack 2
.locals init ([0] int32 Add)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldarg.2
IL_0003: add.ovf
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
} // end of method Calc::Add
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° CIL
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠΎΡΠΈΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² CIL, Π° Π½Π΅ ΠΏΡΡΠΌΠΎ Π² Π½Π°Π±ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΡΠΆΠ΅ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ .NET Π²ΡΠ΄Π°ΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π½Π°Π±ΠΎΡΡ CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΡΠΊΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΉ "Π°ΡΠ΅Π½Ρ".
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ CIL Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΊΠ°ΡΠΊΠ°Ρ .NET Framework ΡΠΎΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠΎ, ΠΊ ΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Java (Π΅Π΄ΠΈΠ½ΡΡ Π±Π°Π·Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ). Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° C#, Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ .NET ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ Windows (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ Π³Π»Π°Π²Ρ). ΠΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Java, .NET ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ·ΡΠΊ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ CIL-ΠΊΠΎΠ΄Π° Π² Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅
ΠΠ²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° Π½Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ CIL ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ CIL Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ (just-in-time β ΡΠΎΡΠ½ΠΎ ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° "ΠΏΠΎ-Π΄ΡΡΠΆΠ΅ΡΠΊΠΈ" ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ Jitter. Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ .NET ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ΅ .NET-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° "ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΌ" ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ (ΡΠ°ΠΊΠΎΠΌ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠΠ), ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΡΠ΅ΡΠ° ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (Π³Π΄Π΅ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΅Π΄ΠΊΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ), ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΠ°Π·Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ.
Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΠΊΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°. Π’Π°ΠΊ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ PrintDocument() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ PrintDocument () Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ CIL Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ.
Π ΠΎΠ»Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² .NET
ΠΡΠΎΠΌΠ΅ CIL-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ .NET ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠ΅ ΠΈ ΡΠΎΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΠΈΠΏΡ (ΠΊΠ»Π°ΡΡΡ, ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΈ Ρ.Π΄.), ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΈ Π²ΡΠ΅ ΡΠ»Π΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΎΠ±ΡΡΠΈΡ ΠΈ Ρ.Π΄.). Π ΡΡΠ°ΡΡΡΡ, Π·Π°Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ (Π° Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°). ΠΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ .NET ΡΠ°ΠΊ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Ρ ΠΈ ΡΠΎΡΠ½Ρ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌΠΈ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌΠΈ ΡΠ΅Π±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΠΈΡΠ°ΡΡ, β Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π½ΠΎ, ΡΡΠΎ Π΄Π»Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ .NET-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ΅Π΅ΡΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΡΠΌΠ°ΡΠ° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² .NET Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Add() C#-ΠΊΠ»Π°ΡΡΠ° Calc, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ (ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ VB .NET-Π²Π΅ΡΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Add(), ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ).
TypeDef #2 (02000003)
-----------------------------------------------------------
TypDefName: CalculatorExample.Calc (02000003)
Flags: [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldlnit] (00100001)
Extends: 01000001 [TypeRef] System.Object
Method #1 (06000003)
-----------------------------------------------------------
MethodName: Add (06000003)
Flags: [Public] [HideBySig] [ReuseSlot] (00000086)
RVA: 0x00002090
ImplFlags: [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: I4
2 Arguments
Argument #1: I4
Argument #2: I4
2 Parameters
(1) ParamToken: (08000001) Name: x flags: [none] (00000000)
(2) ParamToken: (08000002) Name: Ρ flags: [none] (00000000)
ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ .NET, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ IntelliSense, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠ°Ρ Π² Visual Studio 2005 Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΡΠ°ΠΌΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ C#. ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ Π·Π°ΠΌΠ΅ΡΠΈΠΌ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ Π»Π΅ΠΆΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° .NET-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ², Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, Web-ΡΠ΅ΡΠ²ΠΈΡΡ XML ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΠΎΠ»Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°
ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ .NET ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠ°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ (ΡΡΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ). Π‘ΡΠ΅Π΄ΠΈ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΡΡ Π²ΡΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠΌΡ Π±Π»ΠΎΠΊΡ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½ Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π²ΡΠΎΡΡΠΊΠΈΡ ΠΏΡΠ°Π²Π°Ρ ΠΈ Ρ.Π΄. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠ², Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π΄Π»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° CSharpCalculator.exe.