Managed C++

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:07, 1 июня 2016.
Managed C++
Парадигма мультипарадигменный: объектно-ориентированное, обобщённое, процедурное программирование
Первый   появившийся 2002
Стабильная версия 1.1.4322.573 / 1 апреля 2003
Главная реализация
Visual C++
Под влиянием
C++
Влияние
C++/CLI

Managed C++ — набор дополнений к языку C++ (Managed Extensions for C++), позволяющих программам, написанным изначально на С++, управляться CLR и работать по технологии Microsoft .NET. Данный набор помогает писать управляемый код (англ. managed code), совместимый с платформой .NET Framework и исполняемый в среде .NET.

В 2004 году в процессе разработки .NET 2.0 компанией Майкрософт были пересмотрены дополнения от Managed C++, в результате чего код был улучшен для более простой работы с ним. Новый набор изменений называется C++/CLI и поддерживается Visual Studio 2005. По этой причине Managed C++ считается устаревшей спецификацией, и код, написанный таким образом, рекомендуется переписать.

Структура

"Managed" относится к управляемым кодом, что выполняется в, или управляемой по, виртуальная машина .NET, что функции, как песочница для повышения безопасности в виде более проверок выполнения, например, как переполнение буфера проверок. Кроме того, приложения, написанные на Managed C ++ компилировать Common Intermediate Language (CIL) и mdash; Common Intermediate Language & mdash; а не непосредственно с носителями команд процессора, как приложений регулярного C ++ сделать.

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

Функциональные возможности Managed C++

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

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

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

  • Управляемые и неуправляемые код может быть смешаны вместе в той же сборке CLI легко. Это позволяет программисту, чтобы неуправляемого кода, которые не могут быть перенесены в .NET Framework без переписывания его полностью. Некоторые последствия использования этого гибридного конвенции присутствуют, хотя.
  • Managed C ++, это единственный язык, который может содержать неуправляемый код и изначально общаться со всеми другими языками .NET. Managed C ++, таким образом, очень удобно для взаимодействия между программистами, которые используют различные языки, в том числе в .NET театра и тех, кто использует стандартный C ++.

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

  • Managed C ++ вводит много новых ключевых слов и синтаксических соглашений, которые могут ухудшить читаемость кода, особенно если C ++ код включен непосредственно и напрямую взаимодействует с управляемый C ++ код в той же сборке.
  • Managed C ++ вытесняется C ++ / CLI и, таким образом устарела, так как был стандартизован C ++ / CLI.

Недостатки в полностью управляемом коде (C #, Visual Basic, и т.д.)

  • Managed C ++ требует немного больше времени, чем другие разработки .NET языков, которые могут быть применены к проектам, которые все еще производят тот же результат, поскольку последствия указателей в C ++ по-прежнему требуется, даже в управляемой C ++ кода.
  • Managed C ++ не поддерживает ASP.NET веб-приложений, что является возможность поддерживается всеми другими языками, ориентированных на .NET Framework, в том числе на других языках сторонних.
  • Managed C ++, не включает в себя поддержку обобщенного программирования (ака шаблонов). C ++ / CLI имеет эту поддержку.

Основные программные изменения в Managed C++

Ниже список изменений относятся к различиям в объектно-ориентированного программирования по сравнению с программированием со стандартным C ++.

  • (Глобальное изменение) Существующие C ++, чтобы быть перенесены на CLR должны быть приложены со следующим:
//hello.cpp

//new using directive
#using <mscorlib.dll>

//another using namespace directive.
using namespace System;

int main()
{
  Console::WriteLine("Hello, world!");
  return 0;
}

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

#using <mscorlib.dll>

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

#using <System.Windows.Forms.dll>

и

using namespace System::Windows::Forms;

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

  • Чтобы скомпилировать код для целевой CLR, новая опция компилятора должен быть введен.
   cl.exe hello.cpp /clr

/clr enables any code referencing the .NET Framework to be compiled as CIL.

  • Класс может быть назначен в мусор, собранных с помощью __gc расширение ключевых слов.
//gc.cpp

#using <mscorlib.dll>

 __gc class gc
{
  int* i;
  char* g;
  float* j;
};

int main()
{
  while(true)
  {
    gc^ _gc = gcnew gc();
  }
  return 0;
}

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

//nogc.cpp

class gc
{
  int* i;
  char* g;
  float* j;
};

int main()
{
  while(true)
  {
    gc* _gc = new gc();
    delete _gc;
  }
  return 0;
}

Заметки:

  • А __gc обозначены класс может иметь конструктор объявлен.
  • А __gc обозначены класс может быть объявлен деструктор.
  • А __gc обозначены класс не может наследовать более одного класса. (Это ограничение CLR)
  • А __gc обозначены класс не может наследовать другой класс, не __gc назначенный.
  • А __gc обозначены класс не может быть унаследован другим классом, что не __gc назначенного.
  • А __gc обозначены класс может реализовать любое количество интерфейсов __gc.
  • А __gc обозначены класс не может реализовать неуправляемый интерфейс.
  • А __gc обозначены класс по умолчанию не производится видны за пределами собственной сборки. использование
    public __gc class hey  { };
    

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

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

  • Интерфейс может быть объявлен с ключевым словом __gc расширение предшествующих. Такие как:
//interface.cpp
#using <mscorlib.dll>

__gc __interface ClassBase
{
  void Init();
  int Common();
}

Этот код должен быть скомпилирован с / CLR и / LD, чтобы произвести простой DLL файл. Заметки:

  • Интерфейс ____ не может содержать каких-либо пользователей данных, статические члены, вложенные объявления класса и никаких спецификаторов доступа.
  • А __gc __interface может наследовать только от другого __gc интерфейс __interface или системы :: Object. Наследование от системы :: Object поведение по умолчанию.
  • А __gc __interface не может содержать любую реализацию (код тела) его объявленных прототипов функций.

Сравнение Managed C++

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

…с Java

Различия

  • Запуск Java код требует соответствующего виртуальную машину, во время движения Managed C ++ кода требует соответствующего осуществления .NET Framework.

Недостатки

  • Java обеспечивает документацию по исходному коду, а Managed C ++ не делает. (C ++ / CLI в настоящее время поддерживает эту функцию в Visual C ++ .NET 2005 и позже)
  • Java-есть много других инструментов и решений, доступных для Java программистов использовать развития, в то время как Managed C ++, доступна только в Visual Studio .NET. Managed C ++ приложения могут быть скомпилированы с использованием Visual C ++ Toolkit 2003 однако, который предоставляется бесплатно .

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

  • Управляемый C ++ может получить доступ к компьютерной системе на границе нижнего уровня гораздо более эффективно, чем Java. Java программисты должны использовать JNI (Java Native Interface), чтобы использовать услуги низкий уровень операционной системе хоста.

…с C#

Различия

  • В то время как C # поддерживает указатели, как и в C ++, эта функция по умолчанию отключена.

Недостатки

  • Как Java, C # синтаксически проще, когда дело с управляемым кодом. <! - Это не так много, как нужно доказательство деталей. Что проще? -> А в C # поддерживает платформу .NET Framework изначально.
  • С # можно добиться в основном тот же результат при нанесении на том же растворе, как той, которая используется с управляемыми C ++, так как все синтаксические и структурные соглашения остаются поразительно схожи.
  • Управляемый C ++, хотя это строго типизированный язык в связи с его вступлением в CLR, могут быть склонны к ошибкам, если неуправляемый код компилируется вводится в том же растворе, в то время как C # чистый код MSIL.

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

  • С # должны использовать .NET Framework и предоставляемые библиотеки классов для доступа к компьютерной системе на низком уровне.
  • Портирование приложений над к .NET Framework от С или С ++ намного легче сделать с помощью управляемых C ++.
  • Компилятор Visual C ++ .NET Microsoft, которая компилирует Управляемый C ++ для платформы .NET Framework, производит гораздо более зрелую набор инструкций в своей результирующей сборки, тем самым улучшая производительность. Производительность может изменяться в зависимости от кода, но в целом, Managed C ++ кода (Microsoft Intermediate Language (MSIL)) немного быстрее и эффективнее, чем код (MSIL) составлен с использованием С # компилятор

…с C++

Недостатки

  • Native C ++ код может быть быстрее во время выполнения.
  • С ++ не требует установки ассоциированного компилятора и среды выполнения управляемого на целевой системе
  • С ++ поддерживает обобщенное программирование. До финального релиза C ++ / CLI, однако, удалось C ++ программисты не должны вернуться обходные пути для использования дженериков в своих решениях.
  • С ++ поддерживает ключевое слово "сопзЬ" и константный правильность. Managed C ++, Java, как и C #, не содержит эту функцию. [Изготовление класс управляемых неизменными, или ограничение установленных методов доступа на общественных интерфейсов позволяет управляемого кода, чтобы иметь такую же защиту, до такой степени.]
  • C ++ код не стягивается ограничениями СЬК. Например, CLR не позволяет классы наследовать другие классы в частном порядке, таким образом,
public __gc class one { int i; };
public __gc class two: private one { int h; i = h; }; //error

будет производить ошибку компилятора.

[Хотя это не обязательно смягчающее, как точки принятия класса частными, чтобы предотвратить наследование или доступ за пределами библиотеки классов.]

Кроме того, __gc классы не может наследовать от более чем одного класса, например, как

__gc class a {};
__gc class b {};
__gc class c: public a, public b {}; //will produce an error

предыдущий будет производить ошибку компиляции.

Это является преимуществом, когда множественного наследования приводит к проблемам. Это может быть истолковано как преимущество управляемого кода запретить плохая техника. Наоборот, множественное наследование часто является очень естественным некоторым сценариям моделирования программного обеспечения, и большая сложность может привести к попытке избежать его использования.

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

  • Managed C ++ поддерживает большую степень отражения, чем обычный C ++, который, как правило, гораздо удобнее в зависимости от функции кода, или то, что код, предназначенный для.
  • Managed C ++ может взаимодействовать с другими .NET всех способных языках, в том числе на других языках сторонних.
  • Managed C ++, является сборщиком мусора. В стандартном C ++, управление памятью и распределение является обязанностью программиста.

Список литературы