Common Intermediate Language | это... Что такое Common Intermediate Language? (original) (raw)

Common Intermediate Language (сокращённо CIL) — промежуточный язык, разработанный фирмой Microsoft для платформы .NET Framework. JIT-компилятор CIL является частью так называемой CLR (англ. Common Language Runtime) — общей среды выполнения языков .NET. Ранее язык назывался Microsoft Intermediate Language, однако был переименован для создания стандарта ECMA-335.

В код на языке CIL должны переводить код на языках высокого уровня все компиляторы, обеспечивающие поддержку платформы .NET. Код на CIL генерируют, в частности, все компиляторы для платформы .NET самой фирмы Майкрософт, входящие в среду разработки Visual Studio (C#, Managed C++, Visual Basic .NET, Visual J# .NET).

Язык CIL по синтаксису и мнемонике напоминает язык ассемблера. Его можно рассматривать как ассемблер виртуальной машины .NET. В то же время язык CIL содержит некоторые достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с ассемблером для любой реально существующей машины, и писать код непосредственно на CIL легче, чем на ассемблере для реальных машин. Поэтому его можно рассматривать как своеобразный «высокоуровневый ассемблер».

Язык CIL также нередко называют просто IL (англ. Intermediate Language), то есть просто «промежуточный язык».

Синтаксис и мнемоника языка CIL описываются стандартом ECMA-335. Спецификация CIL является составной частью более общей спецификации Common Language Infrastructure (CLI).

Пример кода

Пример программы Hello, World, написанной на CIL. Она выводит строку «Hello, world!».

.assembly Hello {} .method public static void Main() cil managed { .entrypoint .maxstack 1 ldstr "Hello, world!" call void [mscorlib]System.Console::WriteLine(string) ret }

Это ещё одна программа (на C#),

static void Main(string[] args) { outer: for (int i = 2; i < 1000; i++) { for (int j = 2; j < i; j++) { if (i % j == 0) goto outer; } Console.WriteLine(i); } }

которая на CIL выглядит так:

.method private hidebysig static void Main(string[] args) cil managed { .entrypoint .maxstack 2 .locals init ([0] int32 i, [1] int32 j) IL_0000: ldc.i4.2 stloc.0 br.s IL_001f IL_0004: ldc.i4.2 stloc.1 br.s IL_0011 IL_0008: ldloc.0 ldloc.1 rem brfalse.s IL_0000 ldloc.1 ldc.i4.1 add stloc.1 IL_0011: ldloc.1 ldloc.0 blt.s IL_0008 ldloc.0 call void [mscorlib]System.Console::WriteLine(int32) ldloc.0 ldc.i4.1 add stloc.0 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 ret }

Просмотр этого шаблона .NET Framework
Архитектура Base Class LibraryCommon Language Infrastructure.NET assemblyметаданныеCOM Interop
Инфраструктура Common Language RuntimeCommon Type SystemCommon Intermediate Language • Virtual Execution System • Dynamic Language Runtime
Языки Microsoft C#Visual Basic .NETC++/CLI (Managed) • Visual J#JScript .NETWindows PowerShellIronPythonIronRubyF#Spec#Sing#
Другие языки A#Boo • IronLisp • L# • NemerleP#PascalABC.NETPHPScalaCobra • Delphi Prism
Windows Foundations PresentationCommunicationWorkflow
Компоненты ADO.NET (Entity Framework · Data Services) · ASP.NET (AJAX · MVC · Dynamic Data) · .NET Remoting · Language Integrated Query · Windows CardSpace · Windows Forms · XAML · ClickOnce · Dynamic Language Runtime · Parallel FX Library (PLINQ · TPL)
Реализации DotGNUMono.NET Compact Framework (Xbox 360) • .NET Micro FrameworkPortable.NETXNA FrameworkSilverlight • Shared Source Common Language Infrastructure
Сравнения C# и Java • C# и Visual Basic .NET
Будущие технологии Acropolis • Jasper