Выбор языка: C ++ или C # для приложения Магазина Windows?

Я ищу общее мнение о том, какой язык будет лучше. Лучший в отношении многих соображений.

У меня довольно сильный опыт работы в c, c ++ и target-c. Я чувствую себя довольно комфортно с этими 3. Я использовал очень мало C #. Я работал над прошивками и промежуточным программным обеспечением более десяти лет и в последнее время перешел на мобильные приложения. В основном iOS, но теперь расширяется до Windows RT.

Я собираюсь написать версию приложения моей компании для Магазина Windows (или Metro, в зависимости от того, как вы хотите ее назвать). Я сделал подтверждение концепции пару месяцев назад, используя C ++ / CX. Было несколько препятствий к его изучению (синтаксис для ref-классов и интенсивное использование пространств имен), но это в прошлом, и я чувствую себя довольно комфортно с этим моментом.

Некоторые недостатки, которые я обнаружил, заключались в том, что большинство примеров (как MSDN, так и частных) .net находятся на c #, а на c ++ — меньше. Также было немного сложнее получить ответы на вопросы, касающиеся .net-фреймворков с c ++. Большую часть времени люди будут публиковать ответ на c #, и мне нужно будет перенести его на эквивалент C ++. Иногда это легко, иногда сложнее.

У меня такой вопрос: стоило бы моего времени и времени моей компании начать все сначала с c # вместо продолжения c ++? Мне нужно было бы взять c #, но я не считаю это огромным бременем (на самом деле с нетерпением жду этого). Некоторые проблемы:
* Привлечение большего количества инженеров в будущем для работы над этим кодом. Наша компания будет расти в ближайшее время. Будет ли легче найти инженера, который знает c ++ против MS специализированный c ++ / cx?
* Простота получения помощи через примеры, статьи и форумы. Если c # встречается гораздо чаще, это полезно.
* Совместимость между сторонними библиотеками (похоже, компоненты WinRT можно использовать на любом из основных языков)
* Преимущества C # над C ++? Они оба предлагают все, что мне нужно для этого приложения, по крайней мере, что я вижу. Какие есть подводные камни в C #?
* Использует ли c # продолжение / лямбда для программирования asych так же, как C ++ / CX?

Есть ли другие плюсы / минусы, о которых я не думаю?

Что ты думаешь? Кроме того, с чем у вас есть опыт? Почему вы поддерживаете свой ответ?

1

Решение

C # будет иметь лучшую онлайн-поддержку (примеры кода, ответы на вопросы) и более сильную базу инженеров. Я имею в виду, что в данной конкретной ситуации для такого рода сильно API-интерфейсов Microsoft требуется разработка программного обеспечения. Магазин Windows крайне важен для общей стратегии Microsoft, а C # важнее в их языковой стратегии, чем C ++. Таким образом, C # является правильным выбором, IMO.


* РЕДАКТИРОВАТЬ (Филипп Скакун) Я знаю, что возобновить вопрос может быть сложно, поэтому я не могу ответить на него отдельно, но я набрал весь этот текст, который может быть полезным, поэтому я решил добавить его ниже:

Конечно, решать вам, и это может быть очень субъективным выбором, в зависимости от того, во что вы верите, например, если вы считаете, что более высокая потенциальная производительность и лучшая инструментальная и документальная поддержка C # перевешивают преимущества более быстрого, более близкого к металлический и (немного субъективно) более портативный C ++, который вы уже знаете. C ++ по-прежнему почти в два раза более популярен, чем язык, основанный на индексе tiobe, поэтому получить разработчиков на C ++ может быть проще, чем на C #. C ++ / CX — это то, что вам нужно использовать только для связи между сборками и общения с библиотекой WinRT, но все остальное, что вы кодируете, должно выполняться в стандарте C ++ на основе всех рекомендаций экспертов. Также обратите внимание, что C ++ / CX не является управляемым языком, и вы не используете его с .NET. По синтаксису он очень похож на C ++ / CLI, который является управляемым языком. Хорошая вещь о WinRT заключается в том, что вы можете использовать оба языка, если хотите или должны. Я использую C # для всего пользовательского интерфейса XAML, сетей, бизнес-логики и т. Д. Существует множество примеров использования C # с XAML, в то время как ограниченный диапазон примеров для C ++, поскольку он стал доступен и рекомендован только для платформ XAML с WinRT. С другой стороны, для чего-то более низкого уровня, например для работы с DirectX или задачами, интенсивно использующими процессор, я использую C ++, поскольку документации для DirectX больше, чем оберток .NET с открытым исходным кодом, и она работает лучше, когда вы хотите выжать все потенциальная мощность процессора или использовать наименьшее количество энергии от батареи.

C # немного чище, чем C ++, с меньшей пунктуацией, новые ключевые слова async / await, которые делают асинхронные вызовы (которые вы должны использовать в приложениях Windows 8) намного чище. Это также управляемый язык, поэтому в большинстве случаев вам может не понадобиться заботиться о том, когда освободится память, о переполнениях буфера и т. Д. Отладка кода C # дает более детерминированные результаты, чем C ++ (я только что потратил 2 дня на отладку кода C ++, и до сих пор не знаю, как далеко я нахожусь в поиске ошибки). Также легче поддерживать устаревший код, так как отладка намного проще.

C ++ быстрее, поэтому он также потребляет меньше энергии, ваше приложение будет запускаться быстрее и, возможно, потреблять меньше энергии. Если вы уже хорошо это знаете, у вас может быть преимущество перед толпой управляемых приложений разработки приложений. Поскольку он не использует сборку мусора — управление памятью является более детерминированным и легким, поэтому ваши анимации будут более плавными.

Тогда есть и фактор мотивации. Если вы действительно хотите изучать C # — вы, возможно, будете более счастливы, мотивированы и продуктивны в изучении C #, чем язык, который вы уже знаете, и с радостью потратите больше времени на его изучение, чем вы готовы потратить на написание другого приложения C ++.

Базовые библиотеки WinRT одинаковы независимо от того, какой язык вы используете, но библиотеки .NET доступны только в коде .NET, а стандартные библиотеки C ++ доступны только в собственном коде.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]