C ++ / CLI: зачем мне его использовать? - PullRequest
53 голосов
/ 19 декабря 2009

Я довольно хорошо знаком с C ++, поэтому я рассмотрел изучение .NET и всех его производных (особенно C #).

На пути к C ++ / CLI, и я хочу знать, есть ли какое-то конкретное применение для этого языка? Предполагается ли, что он является промежуточным языком для преобразования из нативного C ++ в C #?

Другой вопрос, который возник у меня в голове, - это почему в .NET Framework все еще так много языков программирования? (VB, C ++ / CLI, C # ...)

Ответы [ 8 ]

55 голосов
/ 19 декабря 2009

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

Если вам нужно взаимодействовать с собственным C ++, классами, которые имеют функции экземпляра и которым нужны ключевые слова new и delete для создания / уничтожения экземпляра класса, у вас нет выбора, кроме как использовать C ++ / CLI. Pinvoke не может этого сделать, только компилятор C ++ знает, сколько памяти выделить и как правильно использовать указатель this для функции экземпляра.

.NET Framework содержит код, написанный на C ++ / CLI, особенно в System.Data и WPF PresentationCore. Если у вас нет неуправляемых потребностей взаимодействия или вам не нужно работать с унаследованным кодом, тогда есть несколько причин выбрать C ++ / CLI. C # или VB.NET - лучший выбор. Набор функций C ++ / CLI был заморожен примерно в 2005 году, он не поддерживает более поздние добавления, такие как лямбда-выражения или синтаксис Linq. Кроме того, среда IDE не поддерживает многие функции, доступные в средах C # и VB.NET. Примечательно, что VS2010 изначально будет поставляться без поддержки IntelliSense для C ++ / CLI. Там что-то вроде смертельного поцелуя.

ОБНОВЛЕНИЕ: возрождено в VS2012, поддержка IntelliSense вернулась. Не в последнюю очередь благодаря C ++ / CX, языковому расширению, которое упрощает написание приложений WinRT на C ++. Его синтаксис очень похож на C ++ / CLI. Шаблоны проекта Windows Forms были удалены, однако дизайнер все еще работает. Новый механизм отладки в VS2012 не поддерживает C ++ / CLI, необходимо включить параметр «Режим управляемой совместимости» в меню «Инструменты + параметры», «Отладка», «Общие».

17 голосов
/ 19 декабря 2009

Первый C # не является «производным» от .NET. .NET - это не язык, это платформа приложений и библиотека классов, основанная на CLR, для которой существует несколько языков.

Тем не менее, наиболее веская причина для использования .NET в том, что это хорошо спроектированная библиотека классов и гораздо более простой способ разработки для Windows, чем Win32 или MFC. Однако я лично решил, что лучше изучать новый язык в целом, чем изучать расширения для старого, и, поскольку C # изначально разрабатывался для работы с .NET, я полагаю, что это предпочтительный язык для .NET.

C ++ / CLI полезен, если вы хотите использовать .NET с некоторым устаревшим кодом, и я использовал его для создания графических интерфейсов Windows Forms и склеивания их с существующим кодом приложения. Другой смысл raison d'etre заключается в том, что это единственный язык .NET, который поддерживает смешанный управляемый и собственный код в одном модуле загрузки, поэтому он хорош как для производительности, так и для повторного использования устаревшего кода.

Что касается количества языков, Microsoft хочет, чтобы каждое приложение Windows было основано на .NET, потому что это лучше для безопасности и стабильности их ОС. Единственный способ, которым это произойдет, - поддержка нескольких языков. Думайте о .NET как о прикладной платформе или OS API, и тогда этот вопрос будет иметь меньше смысла; для .NET будет много языков по той же причине, что и для любой платформы. Этих причин много, в том числе коммерческое преимущество, подгонка приложений, политика, поддержка существующих разработчиков, выбор и, несомненно, больше.

15 голосов
/ 19 декабря 2009

Microsoft несколько раз меняла свою позицию по этому вопросу. Это был изначально , предназначенный как полноценный язык, по сути, то, к чему они хотели, чтобы все нативные разработчики перешли, максимально отказавшись от родного C ++.

Потом, несколько лет назад, они поняли, что это просто не то, что хотели их клиенты. Разработчики, которые в любом случае переходят на .NET, обычно переходят на язык, подобный C #, а у остальных есть основания сохранять их код в собственном мире, поэтому они остаются с C ++.

Итак, теперь Microsoft намеревается, чтобы C ++ / CLI был «мостом» между собственным кодом C ++ и управляемым кодом, написанным на каком-то языке .NET. Это больше не тот язык, на котором они рекомендуют переключать всю кодовую базу.

12 голосов
/ 19 декабря 2009

Он действительно предназначен в основном как промежуточный язык для простой связи кода .net с нативным, неуправляемым C ++. Сделайте себе одолжение, не используйте его, если вам не нужно. Синтаксис C ++ / CLI - беспорядок.

Относительно вашего второго вопроса ... Я думаю, что сегодня C # является доминирующим языком в .net, но не всем нравится его стиль и парадигмы. Архитектура .net упрощает добавление новых языков (см. F #, предназначенный для функционального программирования).

8 голосов
/ 19 декабря 2009

Я использовал C ++ / CLI для создания .NET API для некоторых неуправляемых библиотек C ++. Передача и распределение параметров требует некоторого привыкания (в зависимости от используемых типов), но как только вы освоите его, это действительно хороший способ преодолеть разрыв между управляемым и неуправляемым миром.

5 голосов
/ 19 декабря 2009

Я не смотрел на C ++ / CLI, но он использует мир .NET - думайте о нем как о промежуточном C ++ и C #, где у вас есть лучшее из обоих миров. Это может быть полезно в ситуациях, когда вы хотите использовать C ++, который может легко обращаться к объектам .NET и его ядру BCL. Взгляните сюда на эту статью , в которой обсуждаются праймеры C ++ / CLI. К сожалению, я не слышал о приложении Managed C ++, так как оно взволновало многих друзей C ++ по части синтаксиса и потеряло сбор подписчиков, которые вернулись в неуправляемый мир C ++.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 19 декабря 2009

Просто чтобы ты знал. Если вы не укажете код для компиляции как неуправляемый, при компиляции с поддержкой CLR он будет скомпилирован как управляемый код.

Хотя CLI C ++ хорош. Я нахожу боль в коде. Есть что-то такое, что заставляет меня не хотеть программировать в нем. Это даже не «^». Это как использовать сломанный .net. Я потратил 40 минут на кодирование чего-то полностью управляемого, что заняло у меня 10 минут в C #. Я имею в виду, иногда я просто сдаюсь и использую C #, потому что это расстраивает меня, когда кодирую в нем. Я имею в виду, что если вы собираетесь использовать .net, вы также можете использовать C # (вместо CLI C ++).

0 голосов
/ 19 декабря 2009

для меня, я должен использовать его, когда нет другого способа повторно использовать класс C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...