Common Intermediate Language (скорочено CIL) — проміжна мова, розроблена корпорацією Microsoft для платформи .NET Framework. JIT-компілятор, який перетворює CIL код в машинний код, є частиною віртуальної машини CLR (англ. Common Language Runtime) — спільного середовища виконання мов для платформи .NET. Раніше ця мова мала назву Microsoft Intermediate Language, але згодом була перейменована для створення стандарту .
Усі компілятори, які забезпечують підтримку платформи .NET, повинні транслювати код, який написаний на мовах високого рівня, в проміжний код на мові CIL.
Код на CIL генерують усі компілятори для платформи .NET самої фірми Microsoft, які входять в середовище розробки Visual Studio (C#, Managed C++, Visual Basic .NET, Visual J# .NET).
Мова CIL своїм синтаксисом і мнемонікою нагадує мову асемблера. Її можна розглядати як асемблер віртуальної машини .NET. В той самий час мова CIL містить деякі достатньо високорівневі конструкції, які підвищують її рівень в порівнянні з асемблером для будь-якої реально існуючої машини, тому писати код безпосередньо на CIL порівняно простіше, ніж на асемблері для реальних машин. CIL можна розглядати як своєрідний «високорівневий асемблер».
Мову CIL доволі часто називають просто IL (англ. Intermediate Language), тобто «проміжна мова».
Синтаксис і мнемоніка мови CIL описані стандартом ECMA-335. Спецификація CIL є складовою частиною специфікації .
Загальна інформація
Під час компіляції мов програмування CLI код перекладається в код CIL, а не в об’єктний код, специфічний для платформи чи процесора. CIL — це незалежний від процесора та платформи набір інструкцій, який можна виконувати в будь-якому середовищі, що підтримує загальну мовну інфраструктуру, наприклад у середовищі виконання .NET у Windows або крос-платформному середовищі виконання Mono. Теоретично це позбавляє від необхідності розповсюджувати різні виконувані файли для різних платформ і типів ЦП. Код CIL перевірено на безпеку під час виконання, забезпечуючи кращу безпеку та надійність, ніж скомпільовані виконувані файли.
Приклад коду
Приклад програми 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) { for (int i = 2; i < 1000; i++) { for (int j = 2; j < i; j++) { if (i % j == 0) goto outer; } Console.WriteLine(i); } outer: Console.ReadKey(); } /* Output: 2 3 */
яка на 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 }
Примітки
- (англійською) . Архів оригіналу за 31 січня 2019. Процитовано 31 січня 2019.
- Mamone, Mark (2006). (Англ.) . Apress. с. 3—5. ISBN . Архів оригіналу за 31 січня 2019. Процитовано 31 січня 2019.
Посилання
- ECMA-335 Standard [ 31 січня 2019 у Wayback Machine.]
- ISO/IEC 23271:2006 Standard [ 19 січня 2022 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Common Intermediate Language skorocheno CIL promizhna mova rozroblena korporaciyeyu Microsoft dlya platformi NET Framework JIT kompilyator yakij peretvoryuye CIL kod v mashinnij kod ye chastinoyu virtualnoyi mashini CLR angl Common Language Runtime spilnogo seredovisha vikonannya mov dlya platformi NET Ranishe cya mova mala nazvu Microsoft Intermediate Language ale zgodom bula perejmenovana dlya stvorennya standartu Usi kompilyatori yaki zabezpechuyut pidtrimku platformi NET povinni translyuvati kod yakij napisanij na movah visokogo rivnya v promizhnij kod na movi CIL Kod na CIL generuyut usi kompilyatori dlya platformi NET samoyi firmi Microsoft yaki vhodyat v seredovishe rozrobki Visual Studio C Managed C Visual Basic NET Visual J NET Mova CIL svoyim sintaksisom i mnemonikoyu nagaduye movu asemblera Yiyi mozhna rozglyadati yak asembler virtualnoyi mashini NET V toj samij chas mova CIL mistit deyaki dostatno visokorivnevi konstrukciyi yaki pidvishuyut yiyi riven v porivnyanni z asemblerom dlya bud yakoyi realno isnuyuchoyi mashini tomu pisati kod bezposeredno na CIL porivnyano prostishe nizh na asembleri dlya realnih mashin CIL mozhna rozglyadati yak svoyeridnij visokorivnevij asembler Movu CIL dovoli chasto nazivayut prosto IL angl Intermediate Language tobto promizhna mova Sintaksis i mnemonika movi CIL opisani standartom ECMA 335 Specifikaciya CIL ye skladovoyu chastinoyu specifikaciyi Zagalna informaciyaPid chas kompilyaciyi mov programuvannya CLI kod perekladayetsya v kod CIL a ne v ob yektnij kod specifichnij dlya platformi chi procesora CIL ce nezalezhnij vid procesora ta platformi nabir instrukcij yakij mozhna vikonuvati v bud yakomu seredovishi sho pidtrimuye zagalnu movnu infrastrukturu napriklad u seredovishi vikonannya NET u Windows abo kros platformnomu seredovishi vikonannya Mono Teoretichno ce pozbavlyaye vid neobhidnosti rozpovsyudzhuvati rizni vikonuvani fajli dlya riznih platform i tipiv CP Kod CIL perevireno na bezpeku pid chas vikonannya zabezpechuyuchi krashu bezpeku ta nadijnist nizh skompilovani vikonuvani fajli Priklad koduPriklad programi Hello World napisanoyi na CIL Programa vivodit strichku 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 She odna programa na C static void Main string args for int i 2 i lt 1000 i for int j 2 j lt i j if i j 0 goto outer Console WriteLine i outer Console ReadKey Output 2 3 yaka na CIL viglyadaye tak 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 Primitki anglijskoyu Arhiv originalu za 31 sichnya 2019 Procitovano 31 sichnya 2019 Mamone Mark 2006 Angl Apress s 3 5 ISBN 9781430200970 Arhiv originalu za 31 sichnya 2019 Procitovano 31 sichnya 2019 PosilannyaECMA 335 Standard 31 sichnya 2019 u Wayback Machine ISO IEC 23271 2006 Standard 19 sichnya 2022 u Wayback Machine