Більш уважний погляд на проміжний мова (IL) (документація)

Проміжний мова Microsoft (IL) Очевидно грає фундаментальну роль в середовищі .NET. Як розробники C #, ми тепер розуміємо, що перед тим, як запуститися на виконання, наш код C # компілюється в IL. Найважливіші властивості IL можуть бути сформульовані наступним чином:


Підтримка об'єктно орієнтації та інтерфейсів


Незалежність .NET від мови має деякі практичні обмеження. IL неминуче повинен втілювати деяку певну методологію програмування, а це означає, що вихідний мова також має бути сумісним з цією методологією. Принципи, яким керувалася Microsoft при створенні IL: Класичне об'єктно-орієнтоване програмування з реалізацією одиночного спадкування класів. На додаток до класичної об'єктно орієнтації IL також вводить поняття інтерфейсів, які вперше були реалізовані під Windows з COM.


Одна з проблем межьязикового взамодействія була в тому, що налагоджувати компоненти, написані на різних мовах, доводилося незалежно один від одного. Неможливо було в відладчик переходити від однієї мови до іншого. Тому насправді під здатністю мовної взаємодії ми маємо на увазі можливість для класів, написаних на одній мові, безпосередньо звертатися до класів написаним на іншій мові. Зокрема:



Все це досить амбіційні цілі, але як не дивно, завдяки .NET і IL, Вони були досягнуті. У разі переміщень між методами в відладчик ця можливість забезпечується інтеграційної середовищем розробки Visual Studio .NET, А не власне CLR.

Сувора типізація даних


Один з найбільш важливих аспектів IL полягає в тому, що він заснований на виключно суворої типізації даних. Це означає, що всі змінні мають чітко визначений конкретний тім даних. Зокрема, IL зазвичай не допускає ніяких дій, які дають в результаті невизначені типи даних.


Хоча забезпечення безпеки типів може спочатку принести шкоду продуктивності, все ж у багатьох випадках переваги, отримані від служб, проедоставляемих .NET, Що покладаються на безпеку типів, набагато перевищують втрати від деякого зниження продуктивності. Ці служби включають наступні аспекти:



Загальна система типів (CTS)


Питання з типами даних вирішується в .NET за рахунок застосування загальної системи типів (Common Type System – CTS). CTS описує зумовлені типи даних, які доступні в IL, Тому всі мови, орієнтовані на середу .NET, Генерують скомпільований код, який в кінцевому підсумку базується на таких типах.

CTS опісивет не просто примітивні типи данних, а цілу багату ієрархію типів, що включає добре певні точки, в яких код може визначати свої власні типи. Ієрархічна структура загальної системи типів (CTS) відображає об'єктно-орієнтовану методологію одиночного спадкування IL і показана в таблиці.

Таблиця1. Опис типів

















































Тип 

Значення 

Тип Базовий клас, що представляє тип.
Типи значень Базовий клас, проедставляющій будь-який тип значень.
Посилальні типи Будь-які типи, які доступні по посиланню і зберігаються в купі.
Вбудовані типи значень Включають більшість стандартних примітивних типів, представляють числа, Булевського значення або символи.
Перерахування Набори перераховуються значень.
Користувальницькі типи значень Типи, які визначені у вихідному коді і зберігаються як типи значень. У термінології C # це означає будь-які структури.
Інтерфейсні типи Інтерфейси.
Типи покажчиків Покажчики.
Самодокументірованние типи Типи даних, які надають інформацію про себе, пролезную для збирача сміття.
Масиви Будь-який тип, що містить масив об'єктів.
Типи класів Самодокументірованние типи, але не масиви.
Делегати Типи, призначені для зберігання посилань на методи.
Користувальницькі посилальні типи Типи, визначені у вихідному коді і зберігаються як посилальні. У термінології C # це будь-які класи.
Запаковані типи значень Типи значень, тимчасово поміщені в посилання, завдяки чому можуть зберігатися в купі.

Загальна специфікація мови (CLS)


Загальна специфікація мови (CLS) Працює разом з CTS для забезпечення мовної взаємодії. CLS – Це набір мінімальних стандартів, яких повинні дотримуватися всі компілятори, орієнтовані на .NET. Оскільки IL – Дуже багата мова, розробники більшості компіляторів воліють обмежувати можливості конкретного компілятора підтримкою тільки підмножини коштів IL і CTS. Це нормально до тих пір, поки компілятор підтримує все, що визначено в CTS.

Цілком припустимо писати код, не сумісний з CLS. Однак у цьому випадку не гарантується, що скомпільований IL-код буде повністю здатним до взаємодії.

Наприклад, візьмемо чутливість до регістру. IL – Залежимо від регістра. Розробники, які пишуть на мовах, чутливих до регістру, широко використовують гнучкість, яку забезпечує залежність від регістра при виборі імен змінних. Однак Visual Basic 2005 не залежить від регістра. CLS обходить цю проблему, вказуючи, що будь-який CLS-Сумісний код не повинен включати ніяких пар імен, які відрізняються лише регістром. Таким чином, код Visual Basic 2005 може працювати з CLS-Сумісним кодом. Цей приклад іллюстртует, що CLS працює двома способами. По-перше, це означає, що індивідуальні компілятори недостатньо потужні, щоб підтримувати всі можливості .NET – Це представляє складність для розробників компіляторів інших мов програмування, націлених на .NET. По-друге, це дає гарантії того, що якщо ви обмежите класи лише CLS-Сумісними засобами, то код написаний на будь-якому іншому мовою програмування, зможе використовувати ці ваші класи.


Витонченість цієї ідеї в тому, що обмеження в застосуванні CLS-Сумісних засобів накладаються тільки на загальнодоступні і захищені члени класів і на загальнодоступні класи. У межах приватної реалізації ваших класів ви вільні писати будь-який несумісний з CLS код, оскільки код з інших збірок в будь-якому випадку не має доступу до цієї частини вашого коду.


Ми не будемо тут занурюватися в подробиці специфікації CLS. У загальному випадку CLS не особливо зачіпає ваш код C #, оскільки в C # є не так вже багато коштів, не сумісних з CLS.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*