2009-12-28 3 views
2

Созданный Microsoft в качестве основы своей технологии .NET, Общий Language Infrastructure (CLI) является стандартом ECMA (ECMA-335), что позволяет писать приложения в различных высокого уровня программирование языки и выполняются в разных системные среды. Языки программирования, соответствующие CLI, имеют доступ к одной библиотеке базового класса и могут быть скомпилированы в на том же промежуточном языке (IL) и метаданных. IL затем затем скомпилирован в собственный код для конкретной архитектуры.В чем разница между ANSI/ISO C++ и C++/CLI?

Из-за этого промежуточного шага, приложений не обязательно переписан с нуля. Их IL только необходимо скомпилировать в собственный код системы .

Что именно подразумевается под системами ?


Кроме того, при изучении Айвор Хортон Начиная с Visual C++ 2008, я заметил, что он заявил, что принципиально разные виды приложений C++ могут быть разработаны с помощью Visual C++ 2008. К ним относятся:

  1. Приложения, которые выполняются изначально на своем компьютере, которые он называет родными программами на C++. Нативные программы на C++ написаны в версии C++, которая определяется стандартом языка ISO/ANSI.

  2. Приложение также может быть записано для запуска под управлением CLR в расширенной версии C++, называемой C++/CLI. Эти программы назывались Программы CLR, или Программы C++/CLI.

Так что же подразумевается под программным обеспечением C++ и программами CLR? В чем разница между ними? Спасибо за помощь любого эксперта.

ответ

9

«Системные среды» означают такие вещи, как Linux, Windows x86, Windows x64 и т. Д. Обратите внимание, как они используют термин «архитектура» взаимозаменяемо в конце абзаца. Программа


Уроженец C++ является один, где вы берете стандарт (ANSI/ISO) C++ и вы скомпилировать его в EXE-файл. Обычно вы будете компилировать это для определенной среды, например. Windows x86, и в этом случае он не мог работать под Linux и работал под управлением WoW64 emulation layer на Windows x64. Примечательно, что этот код работает непосредственно на машине.

C++/CLI - это другой язык программирования, чем стандартный C++. Он, как и C# или VB.NET, работает поверх Microsoft C ommon L anguage I nterface.Это означает, что он имеет доступ ко всем этим приятным вещам в приведенном вами параграфе, например библиотеке базового класса и компиляции в IL, что позволяет запускать ее на разных архитектурах. Но, как и C# и VB.NET, он не запускается изначально на машине. Для этого требуется установка .NET Framework; частью работы .NET Framework является перевод программ C++/CLI в собственные программы, что означает, что у них гораздо меньше прямого доступа к машине.

+2

Компиляторы Microsoft C do * not * соответствуют ISO C, кстати. – paxdiablo

+6

Я уверен, что никакой компилятор там в настоящий момент не работает; это похоже на деталь, о которой OP не нужно беспокоиться. – Domenic

+0

Но как C++/CLI собирается внедряться в системных средах, которые не поддерживают .NET-инфраструктуру (например, linux). Кроме того, я думал, что при компиляции стандартного исходного кода на C++ в .exe это означает, что программа компилируется в машинный язык . Поэтому почему стандартный C++ не зависит от архитектуры разных инструкций каждого отдельного процессора, а от типа операционной системы? – caramel1995

0

Я становлюсь немного ржавым и не могу вспомнить, когда именно слово «родной» появилось на общем языке. Я считаю, что он был широко использован разработчиками среды, предназначенной для упрощения программирования, работающего на вершине других, предназначенных для обеспечения оптимального доступа к системным ресурсам с ограниченным фокусом на стиль программирования. Который может измениться с течением времени, поскольку родной также может быть отнесен некоторый код ассемблера, вызванный с языка высокого уровня, используемого для программирования встроенной системы. Вот почему я избегаю использовать такие понятия, как операционная система, как CLI/CLR, несмотря на то, что общая причуда может быть реализована в Linux (Mono) или на чистом кремнии без поддержки ОС (.NET Micro).

В таком контексте стандарт C++ следует за нативным подходом и вполне терпим к тому, на каком аппаратном или ОС (или нет ОС) он работает до тех пор, пока можно предоставить для него компилятор и стандартную библиотеку. Стандартный код на C++ может быть легко перекомпилирован для любой такой платформы, поскольку для него существует компилятор C++.

Для того чтобы называть C++/CLI, для реализации диалекта C++ требуется поддержка CLI/CLR и, конечно, платформа CLI, но код может быть перенесен без повторной компиляции с использованием CIL и использовать стандартную сложную библиотеку и утилиты. Однако первоначальные требования выше, чем в случае стандартного C++, который может играть в этом случае роль родной среды.