Какова связь между C++/CX и C++/CLI из синтаксисов и компиляции представления процесса? https://softwareengineering.stackexchange.com/questions/162168/what-are-c-cx-and-c-cli-and-how-do-they-relate-to-c-and-winrt не является исчерпывающим. У кого-нибудь есть дополнительная информация?Зависимость C++/CX и C++/CLI
ответ
(Этот ответ представляет свой личный опыт работы в качестве тестера, участвующих в реализации C++/CX, и не должны рассматриваться как несущие мнения кого-либо еще.)
Внутренне, когда Windows, объявила о том, что они были построив Windows Runtime, и было решено, что одна из главных целей DevDiv заключалась в поддержке этого API и предоставлении полезных прогнозов на разных языках, была создана небольшая команда разработчиков, чтобы посмотреть на уникальные проблемы и возможности, представленные это для команды C++. Я стал одним из тестеров компилятора, назначенных этой функции, которая в то время мы называли «MoCOM» (Modern COM). Для контекста важно отметить, что я не был в команде разработчиков языка, но я был посвящен некоторым из ранних проектов проекта.
Неясно, какую форму примет этот возможный язык, и было несколько различных предложений (некоторые из которых были более низкого уровня, чем другие). Стало ясно: цель в конечном итоге заключалась в том, чтобы полностью использовать новую среду Windows Runtime, развивая что-то, что было бы совместимо с C++, и было бы за кулисами быть исполнительным и полностью родным. Было слишком мало времени для разработки этого нового языка.
Дизайнеры WinRT также внимательно изучили, что будет означать, что их время исполнения будет использоваться на разных языках, и решительно рассмотрел, как языки .NET (в частности, C#) будут взаимодействовать с их временем выполнения. Это означало, что многие концепции WinRT довольно четко сопоставлялись с существующими концепциями .NET. (Эти два режима времени пытались решить многие из тех же проблем и обеспечить аналогичный набор функций, поэтому это не совсем удивительно.)
В конце концов, это означало, что существующий синтаксис C++/CLI соответствовал концепции WinRT достаточно близко, и уже решил многие из более философских проблем, как представлять все эти же понятия таким образом, который был совместим (в той или иной степени) с синтаксисом C++. Это также имело то преимущество, что оно уже реализовано в компиляторе с большим банком существующих тестов. Наконец, команда intellisense в то время работала над реализацией C++/CLI intellisense, поэтому мы могли получить Intellisense C++/CX для небольших дополнительных затрат (по крайней мере, по сравнению с совершенно новым синтаксисом).
Однако, хотя синтаксис был одинаков, фактическое генерирование кода было совершенно иным. В .NET время выполнения делает много тяжелой работы для вас; язык определяет типы и MSIL для выражений, но во время выполнения делает много тяжелой работы: макет типа, родной генерации кода, сбор мусора и т.д.
Несколько примеров:
- В родной мир C++/CX,^был концептуально и синтаксически подобен C++/CLI^(он представляет собой указатель на интерфейс или класс), но был в реализации совсем другой. Где в C++/CLI вы просто сказали runtime, что это был управляемый указатель определенного типа (a * в MSIL), а среда выполнения «сделала магию», в C++/CX, a^был умным указателем, где требовался компилятор для добавления AddRefs и выпусков в соответствующие моменты времени (например, когда он вышел из сферы действия).
- «gcnew» в C++/CLI стал простой, единственной строкой MSIL. «ref new» в C++/CX необходимо будет определить подходящую фабрику, создать экземпляр фабрики, а затем попросить фабрику создать экземпляр базового класса.
- В C++/CLI вы просто должны сделать вызов функции указателем класса, в C++/CX, если у вас есть указатель на класс, вам нужно было определить соответствующий интерфейс, на который была запрошена функция, QI для этого интерфейса, а затем вызывать функцию против результата QI.
Эти различия были многочисленными, и каждое представление концепции представляло уникальные проблемы. Кроме того, мои примеры касаются , потребляющих Типы WinRT; имея компилятор, способный также автору типам, совместимым с WinRT, была целая другая червь из червей.
Все это говорит о том, что синтаксис C++/CLI и C++/CX очень похож, в рамках реализации реализация полностью отличается. Это была большая работа, но также был преднамеренным выбором со стороны команды разработчиков разработать язык, совместимый с концепциями WinRT, но не зависящий от среды выполнения .NET (поскольку это было не нужно и были теоретические преимущества в производительности).
Если вы хотите узнать больше о том, что происходит на самом деле, Deon Brewis, один из дизайнеров и главный разработчик расширения языка, дал прекрасные подробные сведения о мучениях реализации на Build 2011: http://channel9.msdn.com/Events/Build/BUILD2011/TOOL-690C. (Я парень за клавиатурой.)
- 1. ccx - calculix: почему возникает ошибка, когда я хочу выполнить ccx?
- 2. шаблон адаптера и зависимость
- 3. Призма и круговая зависимость
- 4. SDKTools и зависимость AFNetworking
- 5. Зависимость и согласованность данных
- 6. Зависимость HTML5 и SPA
- 7. Зависимость искры и httpclient
- 8. Функциональная зависимость и нормализация
- 9. Шаблоны и циклическая зависимость
- 10. .NET-зависимость и XNA
- 11. Maven и зависимость
- 12. Циклическая зависимость и графики
- 13. ntopng и mysql зависимость
- 14. Зависимость и параллельное выполнение
- 15. Зависимость Maven и db4o
- 16. C++: Зависимость инъекции, циклическая зависимость и обратные вызовы
- 17. Прямая зависимость и транзитивная зависимость в области тестирования через maven
- 18. Boost.test и зависимость от Boost.thread?
- 19. Весенний реактор и загрузочная зависимость
- 20. Жадная конструкция и зависимость впрыска
- 21. Зависимость впрыска и названные регистраторы
- 22. Фабричный метод и циклическая зависимость
- 23. Maven модуль зависимость и ресурсы
- 24. Зависимость Инъекции и сериализованные классы
- 25. TideSDK и зависимость от SDK
- 26. Циклическая зависимость, заголовки и шаблоны
- 27. заголовки включают и циклическую зависимость
- 28. FactoryGirl круговая зависимость и валидация
- 29. Laravel и зависимость Инъекции Сценарий
- 30. Зависимость впрыска и инициализация объекта
Не так уж полезно думать, что у них есть * что-то общее. Синтаксис выглядит очень похожим, потому что они оба решают одну и ту же проблему, взаимодействуя с системой иностранного типа. –