Устаревшие расширения C++ от Microsoft: Managed C++ и переход к C++/CLI
Managed Extensions for C++
Устаревшие расширения Microsoft для C++ (Managed C++): интеграция с .NET Framework, переход на C++/CLI в Visual Studio 2005. Ключевые особенности и замена.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Расширения языка C++ от Microsoft, устаревшие в 2004 году
Microsoft's C++ language extensions deprecated in 2004
Управляемые расширения для C++ (Managed C++) – это устаревший набор расширений языка C++, включающий грамматические и синтаксические дополнения, ключевые слова и атрибуты, предназначенный для интеграции синтаксиса и языка C++ с платформой .NET Framework. Эти расширения были разработаны Microsoft для компиляции кода C++ в управляемый код, работающий в среде выполнения Common Language Runtime (CLR), а также для обеспечения взаимодействия с нативным кодом. В 2004 году расширения Managed C++ были существенно переработаны для уточнения и упрощения синтаксиса и расширения функциональности, включая поддержку управляемых обобщений. Эти новые расширения получили название C++/CLI и были включены в Microsoft Visual Studio 2005. Таким образом, термин Managed C++ и соответствующие ему расширения считаются устаревшими и заменены новыми расширениями.
Managed Extensions for C++ or Managed C++ is a deprecated set of language extensions for C++, including grammatical and syntactic extensions, keywords and attributes, to bring the C++ syntax and language to the NET Framework. These extensions were created by Microsoft to allow C++ code to be targeted to the Common Language Runtime (CLR) in the form of managed code, as well as continue to interoperate with native code. In 2004, the Managed C++ extensions were significantly revised to clarify and simplify syntax and expand functionality to include managed generics. These new extensions were designated C++/CLI and included in Microsoft Visual Studio 2005. The term Managed C++ and the extensions it refers to are thus deprecated and superseded by the new extensions.
История
Microsoft представила управляемые расширения для C++ в Microsoft Visual C++ 2002 (MSVC++). Microsoft стремилась минимизировать расхождения между стандартным C++ и управляемыми расширениями для C++, что привело к тому, что основные различия между ними стали синтаксически менее заметными. MSVC++ 2003 и 2005 также поддерживали написание программ на управляемом C++. В 2004 году управляемые расширения для C++ были признаны устаревшими в пользу C++/CLI, второй попытки Microsoft обеспечить поддержку программирования для общей языковой инфраструктуры (Common Language Infrastructure) с использованием C++.
Microsoft introduced Managed Extensions for C++ in Microsoft Visual C++ 2002 (MSVC++). Microsoft attempted to minimise the deviations between standard C++ and Managed Extensions for C++, resulting in core differences between the two being syntactically obscured. MSVC++ 2003 and 2005 also provided support for writing programs in Managed C++. In 2004, Managed Extensions for C++ was deprecated in favor of C++/CLI, a second attempt by Microsoft at supporting programming for the Common Language Infrastructure using C++.
Дизайн
Управляемый относится к коду, выполняемому или управляемому средой выполнения .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++, он часто используется в качестве «моста».
Managed refers to managed code that it is run in, or managed by, the NET virtual machine that functions as a sandbox for enhanced security in the form of more runtime checks, such as buffer overrun checks. Additionally, applications written in Managed C++ compile to CIL—Common Intermediate Language—and not directly to native CPU instructions like standard C++ applications do. Managed C++ code could inter operate with any other language also targeted for the CLR such as C# and Visual Basic NET as well as make use of features provided by the CLR such as garbage collection. This means Managed C++ occupies a unique position in the gallery of NET languages. It is the only language that can communicate directly with NET languages (such as C#, VB. NET) as well as native C++. The other NET languages can only communicate with C++ code via PInvoke or COM. But since Managed C++ can communicate directly in both managed and standard C++ contexts, it is often used as a "bridge".
Преимущества по сравнению с кодом нативной версии
Управляемый и неуправляемый код могут быть объединены в одной сборке CLI без каких-либо проблем. Это позволяет программисту сохранять неуправляемый код, который невозможно перенести в .NET Framework без полной переработки. Однако использование этой гибридной модели имеет некоторые последствия. Управляемый C++ – единственный язык, который может содержать неуправляемый код и напрямую взаимодействовать со всеми другими языками .NET. Таким образом, управляемый C++ очень удобен для обеспечения взаимодействия между программистами, использующими разные языки, включая тех, кто работает в среде .NET, и тех, кто использует стандартный C++.
Managed and unmanaged code can be mixed together in the same CLI assembly seamlessly. This allows the programmer to keep unmanaged code that cannot be ported over to the NET Framework without re writing it completely. Some ramifications of using this hybrid convention are present though. Managed C++ is the only language that can contain unmanaged code and natively communicate with all other NET languages. Managed C++ is thus very convenient for interoperability between programmers who use different languages, including those in the NET theater and those who use standard C++.
Недостатки по сравнению с неконтролируемым кодом
Управляемый C++ вводит множество новых ключевых слов и синтаксических конструкций, которые могут снизить читаемость кода, особенно если код C++ включается напрямую и взаимодействует непосредственно с управляемым кодом C++ в одной и той же сборке. Управляемый C++ устарел и заменен C++/CLI, поскольку C++/CLI был стандартизирован.
Managed C++ introduces a lot of new keywords and syntactic conventions that can impair the readability of code, especially if C++ code is included directly and interacts directly with Managed C++ code in the same assembly. Managed C++ is superseded by C++/CLI and thus obsolete as C++/CLI has been standardized.
Недостатки по сравнению с полностью управляемым кодом
Управляемый C++ требует несколько большего времени разработки, чем другие языки .NET, которые можно использовать в проектах, дающих те же результаты. Использование указателей может потребоваться, а может и не потребоваться, поскольку управляемый C++ поддерживает как типы значений (value struct и value class), так и типы ссылок (gc struct и gc class). Управляемый C++ полностью поддерживает веб-приложения ASP.NET, хотя разработка на нем сложнее, чем на других языках .NET, включая некоторые сторонние языки. Управляемый C++ включает в себя поддержку только шаблонов (для взаимодействия с нативным C++), но не поддерживает обобщения (для взаимодействия со всеми остальными языками .NET). C++/CLI поддерживает как шаблоны (во время компиляции), так и обобщения (во время выполнения).
Managed C++ requires a slightly longer development time than other NET languages that could be applied to projects that still produce the same results. The use of pointers may or may not be a requirement, because managed C++ has both value types ( value struct and value class) and reference types ( gc struct and gc class). Managed C++ fully support ASP. NET web applications, even though the development is more difficult than with other NET languages, including some other third party languages. Managed C++ includes only support for templates (for interoperability with native C++) but no support for generics (for interoperability with all the other NET languages). C++/CLI supports both templates (at compile time) and generics (at run time).
Сравнение с другими языками
Ниже представлены основные моменты и программные стандарты, которые различают управляемый C++ и другие известные языки программирования со схожими концепциями.
The following contains main points and programmatic standards that differ between Managed C++ and other well known programming languages that are similar in concept.