Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C/C++, которая Ρ‚Π°ΠΊΠΆΠ΅ называСтся «Π½Π΅ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ». Π’ ΠΌΠΈΡ€Π΅ нСуправляСмого ΠΊΠΎΠ΄Π° практичСски Π·Π° всС ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ программист. Π‘Π°ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опСрационная систСма (ОБ) Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ запускаСт. Π—Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” ΠΎΡ‚ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… аспСктов бСзопасности β€” ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ программист.

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

ПослС создания IL ΠΈΠ· ΠΊΠΎΠ΄Π° высокого уровня Π²Ρ‹, скорСС всСго, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ срСда CLR Π±Π΅Ρ€Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСбя ΠΈ запускаСт процСсс JIT-компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JIT для прСобразования ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ЦП. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, срСдС CLR Ρ‚ΠΎΡ‡Π½ΠΎ извСстно, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄, поэтому ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌ.

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ языком CIL ΠΈΠ»ΠΈ MSIL.

ВзаимодСйствиС нСуправляСмого ΠΊΠΎΠ΄Π°

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, срСда CLR позволяСт ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ управляСмым ΠΈ нСуправляСмым ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ Π΄Π°ΠΆΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов объСм ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° довольно Π²Π΅Π»ΠΈΠΊ. Π­Ρ‚ΠΎ называСтся взаимодСйствиСм ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ взаимодСйствиСм. ВсС это позволяСт Π²Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅. Но слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ пСрСсСкаСт Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ срСды выполнСния, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ снова осущСствляСтся Π² Π²ΠΈΠ΄Π΅ нСуправляСмого ΠΊΠΎΠ΄Π° с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ограничСниями.

Аналогично, C# β€” это язык, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСуправляСмыС конструкции, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, прямо Π² ΠΊΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ нСбСзопасного контСкста, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ управляСтся срСдой CLR.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполнСния управляСмого ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΎΡ†Π΅ΡΡ управляСмого исполнСния Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅:

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами срСды CLR, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько языковых компиляторов, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊ срСдС выполнСния.

ΠŸΡ€ΠΈ компиляции исходный ΠΊΠΎΠ΄ прСобразуСтся Π² MSIL ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

Π’ΠΎ врСмя выполнСния JIT-компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ инструкции MSIL Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’ΠΎ врСмя этой компиляции выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… MSIL с Ρ†Π΅Π»ΡŒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ для Π½ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΊΠΎΠ΄ типобСзопасным.

Π‘Ρ€Π΅Π΄Π° CLR прСдоставляСт инфраструктуру, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈ ряд слуТб, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.

Π’Ρ‹Π±ΠΎΡ€ компилятора

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами, прСдоставляСмыми срСдой CLR, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько языковых компиляторов, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° срСду выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ компилятор Visual Basic, C#, Visual C++, F# ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· многочислСнных компиляторов ΠΎΡ‚ нСзависимых Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ компилятор Eiffel, Perl ΠΈΠ»ΠΈ COBOL.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срСда выполнСния являСтся многоязычной, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ языковых срСдств. ДоступныС срСдства срСды выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ языковым компилятором, ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΊΠΎΠ΄ с использованиСм этих срСдств. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΊΠΎΠ΄Π΅ синтаксис опрСдСляСтся компилятором, Π° Π½Π΅ срСдой выполнСния. Если ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ доступСн для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², написанных Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ‚ΠΎ экспортируСмыС этим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ языковыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² состав спСцификации CLS. Атрибут CLSCompliantAttribute позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ являСтся CLS-совмСстимым. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ языка ΠΈ нСзависимыС ΠΎΡ‚ языка ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π² MSIL

ΠŸΡ€ΠΈ компиляции Π² управляСмый ΠΊΠΎΠ΄ компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык Microsoft (MSIL), ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой нСзависимый ΠΎΡ‚ процСссора Π½Π°Π±ΠΎΡ€ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ эффСктивно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π―Π·Ρ‹ΠΊ MSIL Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ инструкции для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, сохранСния, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ инструкции для арифмСтичСских ΠΈ логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² управлСния, прямого доступа ΠΊ памяти, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ MSIL Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JIT-компилятора. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срСда CLR прСдоставляСт для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько JIT-компиляторов, ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ инструкций MSIL ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² любой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅.

Когда компилятор создаСт ΠΊΠΎΠ΄ MSIL, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ содСрТат описаниС Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ΄Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, сигнатуры ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° Ρ‚ΠΈΠΏΠ°, Ρ‡Π»Π΅Π½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ ссылки Π² ΠΊΠΎΠ΄Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свСдСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ срСдой выполнСния Π²ΠΎ врСмя выполнСния. MSIL ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ содСрТатся Π² пСрСносимом исполняСмом (PE) Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ основываСтся Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… Microsoft PE ΠΈ COFF, Ρ€Π°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π²ΡˆΠΈΡ…ΡΡ для исполняСмого ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΈΡ… возмоТности. Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ MSIL ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, позволяСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ срСды CLR. НаличиС Π² Ρ„Π°ΠΉΠ»Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… наряду с MSIL позволяСт ΠΊΠΎΠ΄Ρƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сСбя. Π­Ρ‚ΠΎ устраняСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ языкС IDL. Π‘Ρ€Π΅Π΄Π° выполнСния Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ инструкций MSIL Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JIT-компилятора

ΠŸΡ€ΠΈ JIT-компиляции язык MSIL прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ врСмя выполнСния прилоТСния ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° загруТаСтся ΠΈ выполняСтся содСрТимоС сборки. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срСда CLR прСдоставляСт JIT-компилятор для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ сборок MSIL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JIT-компилятора ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с Ρ€Π°Π·Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ. Если управляСмый ΠΊΠΎΠ΄ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ спСцифичСский для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ API ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС.

ΠŸΡ€ΠΈ JIT-компиляции учитываСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π²ΠΎ врСмя выполнСния. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ всСго содСрТащСгося Π² PE-Ρ„Π°ΠΉΠ»Π΅ MSIL Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈ компиляции MSIL прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости Π²ΠΎ врСмя выполнСния. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сохраняСтся Π² памяти, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Π² контСкстС этого процСсса. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ создаСт ΠΈ присоСдиняСт Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² Ρ‚ΠΈΠΏΠ΅, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ загруТаСтся ΠΈ инициализируСтся. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°Π³Π»ΡƒΡˆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ JIT-компилятору, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ MSIL для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ замСняСт Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ Π½Π° созданный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, скомпилированного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JIT-компилятора, Π²Π΅Π΄ΡƒΡ‚ нСпосрСдствСнно ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя установки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NGen.exe

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ JIT-компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ MSIL-ΠΊΠΎΠ΄ сборки Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² этой сборкС, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²ΠΎ врСмя выполнСния. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв сниТСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Π§Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ΄, созданный JIT-компилятором, Π±ΡƒΠ΄Π΅Ρ‚ привязан ΠΊ процСссу, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. Π•Π³ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΌ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов. Π§Ρ‚ΠΎΠ±Ρ‹ созданный ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… прилоТСния ΠΈΠ»ΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π°Π±ΠΎΡ€ сборок, срСда CLR прСдоставляСт Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции. Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ компиляции для прСобразования сборок MSIL Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² стилС JIT-компилятора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² машинном ΠΊΠΎΠ΄Π΅ (Ngen.exe). Однако, Ρ€Π°Π±ΠΎΡ‚Π° Ngen.exe отличаСтся ΠΎΡ‚ JIT-компилятора Π² Ρ‚Ρ€Π΅Ρ… аспСктах.

Ngen.exe выполняСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· MSIL-ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ прилоТСния, Π° Π½Π΅ Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния.

ΠŸΡ€ΠΈ этом сборка компилируСтся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π° Π½Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π·Π° Ρ€Π°Π·.

Она сохраняСт созданный ΠΊΠΎΠ΄ Π² кэшС ΠΎΠ±Ρ€Π°Π·Π° машинного ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π° Π½Π° дискС.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π°

Π’ процСссС компиляции Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ MSIL-ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ администратор Π½Π΅ установил ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ бСзопасности, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΊΠΎΠ΄Π°. MSIL-ΠΊΠΎΠ΄ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π΅ΠΌ адрСсам памяти, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ доступ. Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ способствуСт ΠΈΡ… Π·Π°Ρ‰ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅ΠΏΡ€Π΅Π΄ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ поврСТдСния. Она Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий бСзопасности для ΠΊΠΎΠ΄Π°.

Π‘Ρ€Π΅Π΄Π° выполнСния основываСтся Π½Π° истинности ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ для ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ типобСзопасного ΠΊΠΎΠ΄Π°:

ссылка Π½Π° Ρ‚ΠΈΠΏ строго совмСстима с адрСсуСмым Ρ‚ΠΈΠΏΠΎΠΌ;

для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

удостовСрСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ.

Π’ процСссС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° MSIL дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ располоТСниям Π² памяти ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. НапримСр, ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ доступ ΠΊ полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ располоТСния Π² памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° опрСдСляСт, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Π±Ρ‹Π» создан ΠΊΠΎΠ΄ MSIL, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ MSIL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€Π°Π²ΠΈΠ» строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ процСссС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ пСрСдаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ типобСзопасный ΠΊΠΎΠ΄. Однако ΠΈΠ½ΠΎΠ³Π΄Π° типобСзопасный ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ процСсса ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ языки ΠΏΠΎ своСй структурС Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ типобСзопасный ΠΊΠΎΠ΄. Если Π² соотвСтствии с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ бСзопасности использованиС типобСзопасного ΠΊΠΎΠ΄Π° являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° создаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

Π‘Ρ€Π΅Π΄Π° CLR прСдоставляСт инфраструктуру, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ управляСмоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΈ ряд слуТб, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ создан MSIL-ΠΊΠΎΠ΄, компилируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JIT-компилятора ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ запускаСтся. ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ JIT-скомпилированный ΠΊΠΎΠ΄. ΠŸΡ€ΠΎΡ†Π΅ΡΡ JIT-компиляции ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния ΠΊΠΎΠ΄Π° повторяСтся Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния.

Π’ΠΎ врСмя выполнСния для управляСмого ΠΊΠΎΠ΄Π° доступны Ρ‚Π°ΠΊΠΈΠ΅ слуТбы, ΠΊΠ°ΠΊ сборка мусора, обСспСчСниС бСзопасности, взаимодСйствиС с нСуправляСмым ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языках, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ развСртывания ΠΈ управлСния вСрсиями.

Π’ Microsoft Windows Vista Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы выполняСт поиск управляСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, анализируя Π±ΠΈΡ‚ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ COFF. УстановлСнный Π±ΠΈΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ управляСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ управляСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ загруТаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Mscoree.dll, Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ _CorValidateImage ΠΈ _CorImageUnloading ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² управляСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° _CorValidateImage выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, являСтся Π»ΠΈ ΠΊΠΎΠ΄ допустимым управляСмым ΠΊΠΎΠ΄ΠΎΠΌ.

ЗамСняСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² ΠΎΠ±Ρ€Π°Π·Π΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² срСдС выполнСния.

Π’ 64-разрядных систСмах Windows _CorValidateImage измСняСт ΠΎΠ±Ρ€Π°Π·, находящийся Π² памяти, ΠΏΡƒΡ‚Π΅ΠΌ прСобразования Π΅Π³ΠΎ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° PE32 Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ PE32+.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выводящий Π½Π° экран возраст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:
исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ CLR?

CLR (Common language runtime) β€” общСязыковая ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ срСда. Она обСспСчиваСт ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ языков ΠΈ позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ благодаря стандартному Π½Π°Π±ΠΎΡ€Ρƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ), созданным Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС, Π±Ρ‹Ρ‚ΡŒ Β«Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹ΠΌΠΈ Π³Ρ€Π°ΠΆΠ΄Π°Π½Π°ΠΌΠΈΒ» ΠΊΠΎΠ΄Π°, написанного Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами CLR этот Ρ‚ΠΎΡ‚ самый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Π½Π°ΠΌ порядкС, вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, управляя Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. И всС это для Ρ€Π°Π·Π½Ρ‹Ρ… языков (c#, VisualBasic, Fortran). Π”Π°, CLR Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ управляСт процСссом выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ (машинного ΠΊΠΎΠ΄Π°, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅) ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ кусок ΠΊΠΎΠ΄Π° (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) ΠΎΡ‚ ΠΊΡƒΠ΄Π° Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΊΡƒΠ΄Π° ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прямо Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции прСдставлСн Π½Π° рисункС:
Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΏΠΎΠΌΠΈΠΌΠΎ ассСмблСра IL создаСт ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ β€” Π½Π°Π±ΠΎΡ€ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Ρ‡Ρ‚ΠΎ ссылаСтся управляСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ числа). Они Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ возмоТности Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ языка описания интСрфСйсов (IDL). ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ всСгда связаны с Ρ„Π°ΠΉΠ»ΠΎΠΌ с IL ΠΊΠΎΠ΄ΠΎΠΌ, фактичСски ΠΎΠ½ΠΈ встроСны Π² *.exe ΠΈΠ»ΠΈ *.dll.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ это Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ поля, говорящиС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ находится Π² Ρ‚Π°ΠΊΠΎΠΌ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΡƒ(классу).
Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядят ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ для ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° (Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… просто ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² понятный Π²ΠΈΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дизассСмблСра ILdasm.exe. На самом Π΄Π΅Π»Π΅ это Ρ‡Π°ΡΡ‚ΡŒ *.exe Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

Π Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ с основными понятиями, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ состоит Ρ‚ΠΎΡ‚ самый управляСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (ΠΈΠ»ΠΈ просто наш Ρ„Π°ΠΉΠ» ConsoleApplication_Test_Csharp.exe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран возраста ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°):

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ процСссора Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π Π•32 (для 32 ΠΈ 64 Π±ΠΈΡ‚Π½Ρ‹Ρ… ОБ) ΠΈΠ»ΠΈ Π Π•32+ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для 64 Π±ΠΈΡ‚Π½Ρ‹Ρ… ОБ)
Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ CLR β€” содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² управляСмый (Ρ„Π»Π°Π³ΠΈ, вСрсия CLR, Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² Main())
ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ β€” 2 Π²ΠΈΠ΄Π° Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…:
1) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² исходном ΠΊΠΎΠ΄Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹
2) Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ссылки Π² исходном ΠΊΠΎΠ΄Π΅.
Код IL β€” Код, создаваСмый компилятором ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° Π½Π° C#. Π—Π°Ρ‚Π΅ΠΌ IL прСобразуСтся Π² процСссорныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (0001 0011 1101… ) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ CLR (Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ JIT)

Π Π°Π±ΠΎΡ‚Π° JIT

И Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит, ΠΊΠΎΠ³Π΄Π° запускаСтся Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
Π‘ΠΏΠ΅Ρ€Π²Π° происходит Π°Π½Π°Π»ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ процСсс Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (32 ΠΈΠ»ΠΈ 64 разрядный). Π—Π°Ρ‚Π΅ΠΌ загруТаСтся выбранная вСрсия Ρ„Π°ΠΉΠ»Π° MSCorEE.dll ( C:\Windows\System32\MSCorEE.dll для 32разрядных процСссоров)
ПослС Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, располоТСнный MSCorEE.dll, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ CLR, сборки ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Main() нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ System.Console.WriteLine(Β«Hello β€ž), IL Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Ρ‚Π΅ самыС Π½ΡƒΠ»ΠΈ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹) Π­Ρ‚ΠΈΠΌ занимаСтся Jiter ΠΈΠ»ΠΈ just-in-time compiler.

Π‘ΠΏΠ΅Ρ€Π²Π°, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Main() срСда CLR Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏ Console).
Π—Π°Ρ‚Π΅ΠΌ опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, объСдиняя ΠΈΡ… Π² записи Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΉ β€œΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹Β» (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π² Ρ‚ΠΈΠΏΠ΅ Console).
Записи содСрТат адрСса, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Ρ‚.Π΅. Ρ‚Π΅ прСобразования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄).

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WriteLine вызываСтся JiT-compiler.
JiTer ‘Ρƒ извСстны Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ этот ΠΌΠ΅Ρ‚ΠΎΠ΄.
JiTer ΠΈΡ‰Π΅Ρ‚ Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сборки β€” Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° WriteLine(string str) ).
Π—Π°Ρ‚Π΅ΠΌ, ΠΎΠ½ провСряСт ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ IL Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (собствСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹), сохраняя Π΅Π³ΠΎ Π² динамичСской памяти.
ПослС JIT Compiler возвращаСтся ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ «структурС» Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° (Console) ΠΈ замСняСт адрСс Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½Π° адрСс Π±Π»ΠΎΠΊΠ° памяти с исполняСмыми процСссорными ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.
ПослС этого ΠΌΠ΅Ρ‚ΠΎΠ΄ Main() обращаСтся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ WriteLine(string str) ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Π’.ΠΊ. ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ скомпилирован, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ производится минуя JiT Compiler. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ WriteLine(string str) ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ возвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Main().

Из описания слСдуСт, Ρ‡Ρ‚ΠΎ Β«ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΒ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠΎΠ³Π΄Π° JIT ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ IL ΠΊΠΎΠ΄ Π² инструкции процСссора. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ находится Π² памяти ΠΈ подставляСтся ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСссора. Однако Ссли Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ процСссС, Ρ‚ΠΎ Jiter Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ снова для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ выполняСмых Π² Ρ…86 срСдС JIT гСнСрируСтся 32-разрядныС инструкции, Π² Ρ…64 ΠΈΠ»ΠΈ IA64 срСдах β€” соотвСтствСнно 64-разрядныС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°. УправляСмый ΠΈ нСуправляСмый ΠΊΠΎΠ΄

IL ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚.Π΅. ΠΈΠ· Π½Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ IL β€” ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ NOP (пустая ΠΊΠΎΠΌΠ°Π½Π΄Π°). Для этого ΠΏΡ€ΠΈ компиляции Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π§Π΅ΠΌ ΠΆΠ΅ отличаСтся управляСмый ΠΊΠΎΠ΄ ΠΎΡ‚ нСуправляСмого?

НСуправляСмый ΠΊΠΎΠ΄ компилируСтся для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ просто исполняСтся.

Π’ управляСмой срСдС компиляция производится Π² 2 этапа:

1) компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ C# ΠΊΠΎΠ΄ Π² IL
2) для исполнСния Π½ΡƒΠΆΠ½ΠΎ пСрСвСсти IL ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ процСссора, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏ. динамичСской памяти ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π° самая Ρ€Π°Π±ΠΎΡ‚Π° JIT).

ВзаимодСйствиС с нСуправляСмым ΠΊΠΎΠ΄ΠΎΠΌ:

β€” управляСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· DLL посрСдствам P/Invoke (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ CreateSemaphore ΠΈΠ· Kernel32.dll).
β€” управляСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ COM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (сСрвСр).
β€” нСуправляСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ управляСмый Ρ‚ΠΈΠΏ (сСрвСр). МоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ COM β€” ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² управляСмой срСдС ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ вСсти подсчСт ссылок интСрфСйсов.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /clr позволяСт ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Visual Π‘++ ΠΊΠΎΠ΄ Π² управляСмыС IL ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠ³Π΄Π°, содСрТащСго ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ассСмблСрными вставками ( __asm ), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ встроСнныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ( __enable, _RetrurAddress )). Если этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ получится, Ρ‚ΠΎ ΠΊΠΎΠ΄ скомпилируСтся Π² стандартныС Ρ…86 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π”Π°Π½Π½Ρ‹Π΅ Π² случаС IL ΠΊΠΎΠ΄Π° Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ управляСмыми (ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ) ΠΈ Π½Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ сборщиком мусора (это касаСтся Π‘++ ΠΊΠΎΠ΄Π°).

БистСма Ρ‚ΠΈΠΏΠΎΠ²

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ систСмС Ρ‚ΠΈΠΏΠΎΠ² CTS, принятой Microsoft.

CTS (Common Type System) β€” общая систСма Ρ‚ΠΈΠΏΠΎΠ² Π² CLR (Ρ‚ΠΈΠΏ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ β€” это Π°Π½Π°Π»ΠΎΠ³ класса C#). Π­Ρ‚ΠΎ β€” стандарт, ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΉ ECMA ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ опрСдСляСт ΠΏΡ€Π°Π²ΠΈΠ»Π° наслСдования, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ПослС рСгистрации ECMA стандарт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ CLI ( Common Language Infrastructure)

β€” CTS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π‘++)
β€” ВсС Ρ‚ΠΈΠΏΡ‹ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ System.Object (Object β€” имя Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ€Π΅Π½ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², System β€” пространство ΠΈΠΌΠ΅Π½)

По спСцификации CTS любой Ρ‚ΠΈΠΏ содСрТит 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π»Π΅Π½ΠΎΠ².

ПолС β€” пСрСмСнная, Ρ‡Π°ΡΡ‚ΡŒ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚ΠΈΠΏΡƒ.
ΠœΠ΅Ρ‚ΠΎΠ΄ β€” функция, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ дСйствиС Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ имя, сигнатуру(число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹.
Бвойство β€” Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ выглядит ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ (get/set) Π° для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороны ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ ( = ). Бвойства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ‚ΠΈΠΏΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ β€” обСспСчиваСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ увСдомлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Public β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ доступСн Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ ΠΈΠ· любой сборки
Private β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ°
Family (protected) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ нСзависимо ΠΎΡ‚ сборки
Assembly (internal) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· Ρ‚ΠΎΠΉ ΠΆΠ΅ сборки
Family or Assembly
(protected internal) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ· любой сборки ΠΈ + Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ· Ρ‚ΠΎΠΉ ΠΆΠ΅ сборки.

CLS (Common Language Specification) β€” спСцификации выпущСнная ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚. Она описываСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ компиляторов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² CLR. CLR/CTS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС возмоТностСй, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… CLS. АссСмблСр IL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CLR/CTS. Π―Π·Ρ‹ΠΊΠΈ (C#, Visual Basic) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ возмоТностСй CLR/CTS (Π² Ρ‚.Ρ‡. ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΡ‚ CLS).
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° рисункС

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° соотвСтствиС CLS

Атрибут [assembly: CLSCompliant(true)] заставляСт компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ доступныС ΠΈΠ·Π²Π½Π΅ Ρ‚ΠΈΠΏΡ‹, содСрТащиС конструкции, нСдопустимыС Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: UInt32 Abc() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ цСлочислСнноС Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°. Visaul Basic, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚Π°ΠΊΠΈΠΌΠΈ значСниями.
Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π΄Π²Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Abc() ΠΈ abc() β€” ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠ²Ρ‹Π΅ ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ лишь рСгистром Π±ΡƒΠΊΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. VisualBasic Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π£Π±Ρ€Π°Π² public ΠΈ оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ sealed class SomeLibraryType ΠΎΠ±Π° прСдупрСТдСния исчСзнут. Π’Π°ΠΊ ΠΊΠ°ΠΊ SomeLibraryType ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ internal ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Π½ ΠΈΠ·Π²Π½Π΅ сборки.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый/нСуправляСмый ΠΊΠΎΠ΄ Π² C#?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΈ нСуправляСмый ΠΊΠΎΠ΄? Π― Π½Π΅ понимаю.

12 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ нСуправляСмый ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, API собствСнного ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Win32). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° бСзопасности для управляСмого ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

Π²ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ бСсплатноС объяснСниС управляСмого ΠΊΠΎΠ΄Π°:

Π― Π΄ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ NUnit выполняСт ваш ΠΊΠΎΠ΄ для UnitTesting ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ, которая нСуправляСма. Но я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, поэтому Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ это Π·Π° Π·ΠΎΠ»ΠΎΡ‚ΠΎ. Π― ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ смоТСт Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± этом. НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚!

этой Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π΅.

ΡƒΡ€ΠΎΠΆΠ΅Π½Ρ†Π° ΠΊΠΎΠ΄ часто являСтся синонимом нСуправляСмого, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½.

ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ нСуправляСмыС, Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ машин-спСцифичСский, машин-Ρ€ΠΎΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Как ассСмблСрС x86. НСуправляСмый (Ρ€ΠΎΠ΄Π½ΠΎΠΉ) ΠΊΠΎΠ΄ компилируСтся ΠΈ связываСтся для запуска нСпосрСдствСнно Π½Π° процСссорС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ всС ОБ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Он Π½Π΅ пСрСносной, Π½ΠΎ быстрый. ΠžΡ‡Π΅Π½ΡŒ простой, ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… словах, ΠΊΠ°ΠΊ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:

NUnit Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ AppDomain, ΠΈ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π½Π΅ вызываСтся (вСроятно, Π½Π΅ трСбуСтся), поэтому сборка записи Ρ€Π°Π²Π½Π° null.

УправляСмый Код:
Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ «Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Ρƒ ΠΎ сотрудничСствС» с общСязыковая срСда выполнСния. УправляСмый ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для выполнСния оказания услуг, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ управлСния, ΠΌΠ΅ΠΆΡŠΡΠ·Ρ‹ΠΊΠΎΠ²Π°Ρ интСграция, ΠΊΠΎΠ΄ доступа, ΠΈ автоматичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ Π½Π° основС Microsoft ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык (MSIL) выполняСтся ΠΊΠ°ΠΊ управляСмый ΠΊΠΎΠ΄.

ООН-УправляСмый Код:
Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° соглашСния ΠΈ трСбования срСды выполнСния common language. НСуправляСмый ΠΊΠΎΠ΄ выполняСтся Π² срСдС CLR с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ слуТбы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Ρ‚ сборки мусора, ограничСнная ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ Ρ‚. Π΄.).

OTOH,unmanged code Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ спСцифичСскоС ΠΊ машинС ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ для использования, никакая ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π°Π»Π΅Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

УправляСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ содСрТит управляСмый ΠΊΠΎΠ΄.

УправляСмый ΠΊΠΎΠ΄ – это ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π² срСдС CLR. Код строится Π½Π° основС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Ρ… Π² исходном ΠΌΠΎΠ΄ΡƒΠ»Π΅ структур ΠΈ классов, содСрТащих объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². УправляСмому ΠΊΠΎΠ΄Ρƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…) для срСды выполнСния. Код C#, Visual Basic, ΠΈ JScript являСтся управляСмым ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Код Visual C++ Π½Π΅ являСтся управляСмым ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ управляСмый ΠΊΠΎΠ΄, для этого Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС(/CLR). Одной ΠΈΠ· особСнностСй управляСмого ΠΊΠΎΠ΄Π° являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π£ΠŸΠ ΠΠ’Π›Π―Π•ΠœΠ«ΠœΠ˜ Π”ΠΠΠΠ«ΠœΠ˜.

ДСкларация сборки (Manifest) – составная Ρ‡Π°ΡΡ‚ΡŒ сборки. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

Π­Ρ‚Π° информация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ НЕ ΠœΠžΠ–Π•Π’ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ IL-ΠΊΠΎΠ΄. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ IL-ΠΊΠΎΠ΄Π° осущСствляСтся JIT-компилятором (Just In Time – Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ активизируСтся CLR ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости ΠΈ выполняСтся процСссором. ΠŸΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JIT-компилятора ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ оттранслированного IL-ΠΊΠΎΠ΄Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ памяти устанавливаСтся соотвСтствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² дальнСйшСм позволяСт CLR ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ процСссора, записанным Π² этом Π±Π»ΠΎΠΊΠ΅ памяти, минуя ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ JIT-компилятору.

Π’ срСдС CLR допускаСтся совмСстная Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ взаимодСйствиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках программирования.

CLR Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² Π·ΠΎΠ½Π΅ особого внимания Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. К числу Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, выполняСмых CLR, относятся:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° срСды выполнСния CLR (основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты срСды) прСдставлСна Π½Π° рисункС.

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΈΠΏΠΎΠ², Π² частности, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ соотвСтствия Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ CLR Code Manager ΠΈ Garbage Collector Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ совмСстно: Code Manager обСспСчиваСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² управляСмой памяти, Garbage Collector – освобоТдаСт ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Exception Manager Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ управляСмый ΠΊΠΎΠ΄ ΠΈ clr основныС трСбования ΠΊ управляСмому ΠΊΠΎΠ΄Ρƒ

AppDomain (Π΄ΠΎΠΌΠ΅Π½ прилоТСния) – это логичСский ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сборок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для изоляции прилоТСния Π² Ρ€Π°ΠΌΠΊΠ°Ρ… адрСсного пространства процСсса. Код, выполняСмый Π² CLR (CLR-процСсс), ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов, выполняСмых Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² это ΠΆΠ΅ самоС врСмя. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ процСсс запускаСтся систСмой Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ выдСляСмого процСссу адрСсного пространства. CLR прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния мноТСства управляСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠžΠ”ΠΠžΠœ ΠŸΠ ΠžΠ¦Π•Π‘Π‘Π•. КаТдоС управляСмоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ связываСтся с собствСнным Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ прилоТСния (сокращСнно AppDomain). ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, создаваСмыС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π° прилоТСния. НСсколько Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. CLR ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ прилоТСния, управляя ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄ΠΎΠΌΠ΅Π½Π° прилоТСния. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ основного Π΄ΠΎΠΌΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΌΠ΅Π½ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *