stringtranslate.com

Управляемые расширения для C++

Managed Extensions for C++ или Managed C++ — устаревший набор языковых расширений для C++ , включая грамматические и синтаксические расширения, ключевые слова и атрибуты, для переноса синтаксиса и языка C++ в .NET Framework . Эти расширения были созданы корпорацией Microsoft, чтобы код C++ можно было нацеливать на Common Language Runtime (CLR) в форме управляемого кода , а также продолжать взаимодействовать с машинным кодом.

В 2004 году расширения Managed C++ были существенно пересмотрены для уточнения и упрощения синтаксиса и расширения функциональности для включения управляемых дженериков . Эти новые расширения были обозначены как C++/CLI и включены в Microsoft Visual Studio 2005. [ 1] Термин Managed C++ и расширения, на которые он ссылается, таким образом, устарели и заменены новыми расширениями.

История

Microsoft представила Managed Extensions для C++ в Microsoft Visual C++ 2002 (MSVC++). Microsoft попыталась минимизировать отклонения между стандартным C++ и Managed Extensions для C++, в результате чего основные различия между ними были синтаксически скрыты. MSVC++ 2003 и 2005 также обеспечивали поддержку написания программ на Managed C++. В 2004 году Managed Extensions для C++ был упразднен в пользу C++/CLI , второй попытки Microsoft поддержать программирование для Common Language Infrastructure с использованием C++. [2]

Дизайн

Управляемый относится к управляемому коду , который выполняется или управляется виртуальной машиной .NET , которая функционирует как песочница для повышения безопасности в виде большего количества проверок во время выполнения, таких как проверки переполнения буфера. Кроме того, приложения, написанные на управляемом C++, компилируются в CIL — Common Intermediate Language — а не напрямую в собственные инструкции ЦП , как это делают стандартные приложения C++.

Управляемый код C++ может взаимодействовать с любым другим языком, также предназначенным для CLR , таким как C# и Visual Basic .NET , а также использовать функции, предоставляемые CLR, такие как сборка мусора . Это означает, что управляемый C++ занимает уникальное положение в галерее языков .NET. Это единственный язык, который может напрямую взаимодействовать с языками .NET (такими как C#, VB.NET), а также с собственным C++. Другие языки .NET могут взаимодействовать с кодом C++ только через PInvoke или COM . Но поскольку управляемый C++ может напрямую взаимодействовать как в управляемом, так и в стандартном контексте C++, его часто используют в качестве «моста».

Функциональность

Программы, написанные на управляемом C++, предоставляют дополнительную функциональность .NET Framework и CLR . Наиболее примечательной из них является сборка мусора , которая освобождает программиста от ручного управления памятью. Сборщик мусора (GC) обрабатывается CLR. Управление памятью выполняется довольно быстро, но для более критичных к производительности приложений, скорее всего, предпочтительным вариантом будет собственный, неуправляемый код.

Managed C++ ориентирован на объектно-ориентированное программирование. Главное отличие стандартного C++ от Managed C++ заключается в том, что множественное наследование не поддерживается, а класс, управляемый сборщиком мусора CLR, не может наследовать более одного класса. Это связано с ограничением CLR.

Основные характеристики:

Преимущества перед собственным кодом

Недостатки по сравнению с неуправляемым кодом

Недостатки по сравнению с полностью управляемым кодом

Примеры

Следующие примеры иллюстрируют использование управляемого C++ по сравнению со стандартным C++:

//привет.cpp//новая директива using #using <mscorlib.dll>//еще одна директива using namespace. using namespace System ;  int main () { Console :: WriteLine ( "Привет, мир!" ); return 0 ; }    

Новая директива препроцессора

#использование <mscorlib.dll>

требуется. В дополнение к этому, требуются дополнительные директивы #using для импорта большего количества библиотек для использования большего количества пространств имен в библиотеке базовых классов, например

#использование <System.Windows.Forms.dll>

и

использование пространства имен System :: Windows :: Forms ;  

использовать Windows Forms.

 cl.exe hello.cpp /clr

/clr позволяет компилировать любой код, ссылающийся на .NET Framework, как CIL .

//gc.cpp#использование <mscorlib.dll> __gc класс gc { int * i ; char * g ; float * j ; };        int main () { while ( true ) { gc ^ _gc = gcnew gc (); } return 0 ; }            

Предыдущий код можно скомпилировать и выполнить, не опасаясь утечек памяти . Поскольку класс gcуправляется сборщиком мусора, нет необходимости вызывать deleteоператор. Чтобы добиться того же самого с неуправляемым кодом, deleteтребуется ключевое слово:

//nogc.cppкласс gc { int * i ; char * g ; float * j ; };       int main () { while ( true ) { gc * _gc = new gc (); delete _gc ; } return 0 ; }              

Примечания:

public __gc class эй { };     

ключевое слово public для изменения доступа к назначенному классу __gc.

Класс, обозначенный __gc, можно уничтожить вручную с помощью ключевого слова delete, но только в том случае, если у класса, обозначенного __gc, есть определенный пользователем деструктор.

//interface.cpp #используя <mscorlib.dll>__gc __interface ClassBase { void Init (); int Common (); }      

Для создания простого DLL-файла предыдущий код необходимо скомпилировать с использованием /clr и /LD.

Примечания:

Сравнение с другими языками

Ниже приведены основные положения и стандарты программирования, которые различаются между управляемым C++ и другими известными языками программирования, имеющими схожую концепцию.

Стандартный С++

Недостатки

public __gc class one { int i ; }; public __gc class two : private one { int h ; i = h ; }; // ошибка public __gc class three : protected one { int h ; i = h ;}; // ошибка                              
__gc class a {}; __gc class b {}; __gc class c : public a , public b {}; //выдаст ошибку              

Преимущества

Ява

Различия

Недостатки

Преимущества

С#

Различия

Недостатки

Преимущества

Смотрите также

Ссылки

  1. ^ "Руководство по переводу: перемещение программ из управляемых расширений для C++ в C++/CLI". Microsoft . Август 2004. Получено 11 ноября 2009 г.
  2. ^ Sutter, Herb. "A Design Rationale for C/C++" (PDF) . стр. 6. Архивировано (PDF) из оригинала 2017-08-30 . Получено 2018-06-12 .

Внешние ссылки