Является ли современный C ++ заменой C #? Microsoft подталкивает разработчиков к внедрению C ++? [закрыто]

91

Я слышал о современной популярности C ++ и некоторых разговорах о переходе на C ++ с C # или других C-подобных языков.

Я знаю о возможностях C ++ 11, но мне бы хотелось услышать ваш опыт, особенно от разработчиков, которые перешли с C # на C ++.

Что еще более важно, подталкивает ли Microsoft разработчиков к использованию C ++? Если да, то почему?

Амир Карими
источник
16
Я думаю, что C ++ всегда был более широко используемым языком, потому что он более устоявшийся и легко переносимый, чем C #. Я не думаю, что это заменяет C #. Для бизнес-приложений на базе Windows C # по-прежнему будет востребован как простой в использовании язык. C ++ никогда не уходил. Это только что было своего рода возрождение в последнее время.
KChaloux
2
Надеюсь нет. Java и C # были благом для разработчиков, и они все еще развиваются.
Джесси С. Слайсер
4
И C ++, и C # - всего лишь инструменты : выберите лучший для конкретной работы. например, если вы хотите написать кроссплатформенный код, вы можете использовать C ++; если вам нужны небольшие приложения, не требующие установки .NET, вы можете использовать C ++ (со статически связанными CRT); если вы хотите разработать какой-либо инструмент с графическим интерфейсом для Windows в режиме RAD, вы можете использовать C # и WinForms; и т. д.
Mr.C64
6
Это хороший вопрос, возможно, нужно переписать. Это не другой язык A против языка B. Скорее, это именно то, что позиции Microsoft, почему она изменилась и куда они идут, потому что реальность такова, что MS достаточно велика, что, когда они оказывают влияние, по крайней мере, небольшие горы имеют тенденцию двигаться. И да, в этом случае они определенно влияют.
ДХМ
9
Давайте, пожалуйста, будьте гражданскими. Грубость не потерпит.
maple_shaft

Ответы:

95

Да, ваши подозрения верны. Microsoft подталкивает C ++, чтобы вернуться и стать более популярным.

Я не могу найти его сейчас, но некоторое время назад я увидел презентацию одного из крупных парней Microsoft, и все это было направлено на разработчиков и было связано с развертыванием Windows 8 и особенно WinRT (замена также для .NET framework). как Win32 API).

У него был график, в котором он объяснил, как различные факторы влияют на то, какая технология популярна в определенные периоды времени. Сначала люди хотели скорость, поэтому все они написаны на C / C ++ (два разных языка). По мере того, как аппаратное обеспечение становилось все быстрее, внимание смещалось от скорости выполнения и больше к скорости разработки, поэтому языки более высокого уровня стали намного популярнее.

Однако теперь все больше внимания уделяется мобильным компьютерам и компьютерам на базе ARM (Windows 8 - первая версия Windows, скомпилированная для ARM), и многие считают, что они станут намного более популярными, а для некоторых полностью заменят настольные компьютеры. Таким образом, основное внимание (по крайней мере, в глазах Microsoft) вернулось к C ++, потому что теперь мы заботимся о времени автономной работы. Код более высокого уровня = больше инструкций = требуется больше сока.

Чтобы поддержать этот переход обратно на C ++, они представили совершенно новый программный API для Windows 8, названный WinRT (последнее, что я проверил, так оно и было). Этот API следует теме .NET Framework в том объеме, который он предоставляет, но он будет доступен любому, кто кодирует на C ++ (через COM-интерфейсы), на C # или даже на Javascript для тех, кто хочет писать приложения HTML 5 / Javascript. Они также предоставляют XAML (технологию, используемую в WPF, их новейшей среде пользовательского интерфейса), которая также будет доступна в C ++.

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

ОБНОВЛЕНИЕ № 1:

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

  1. WinRT не является заменой .NET Framework, но это еще одна альтернатива, которую сейчас имеют разработчики MS Windows, и MS настоятельно подталкивает людей идти в этом направлении. Похоже (пожалуйста, держите себя в руках, если это не на 100% точно), что WinRT был в первую очередь нацелен на приложения современного пользовательского интерфейса, хотя обычные настольные приложения также должны иметь возможность воспользоваться этим. Сказав это, MS настоятельно призывает людей перейти к написанию: а) современных приложений пользовательского интерфейса и б) начать использовать WinRT, так как процент смещения баланса людей, использующих .NET Framework, скорее всего, снизится.

  2. C ++ НИКОГДА не заменит языки более высокого уровня, такие как C # или python. Так же, как эти языки никогда не заменит C ++. Это была, вероятно, самая противоречивая часть вопроса ОП. Но все дело в балансе, а факты таковы:

    • Сообщество C ++ (большая часть которого - MS) настаивает на сильном возвращении к позиции C ++ как хорошего языка для маломощных устройств, чья доля на рынке в последнее время растет как сумасшедшая. Если вы мне не верите, найдите серию переговоров «GoingNative», которая началась в прошлом году.
    • Со всеми усилиями и влиянием Microsoft использование C ++ определенно возрастет, в то время как C # может немного упасть. Это то, к чему стремится MS, и, как я сказал в комментариях выше, когда MS вкладывает свой капитал в идею, они действительно меняют значительную часть отрасли. Я, вероятно, получу ответ от какого-то парня, который будет спорить: «В какой отрасли я всегда был на Linux», и на это мой единственный ответ - проснись! Да, есть и другие ОС, но большинство настольных компьютеров, как потребительских, так и коммерческих, на данный момент - это Windows, и любой серьезный разработчик, который хочет максимизировать стоимость своего времени, будет очень глупо не ориентироваться на этот кусок рынка настольных ПК.

Итак, в заключение: да, MS настаивает на возвращении C ++, поэтому, скорее всего, его популярность возрастет. Нет, C ++ никогда не заменит C #.

Обновление № 2:

Я не знаю почему, но техническое сообщество склонно видеть вещи в абсолютно абсолютном черно-белом выражении, когда реальность полна оттенков серого. Это ответ на несколько новых комментариев, которые были добавлены к этому сообщению:

  1. .NET Framework не исчезнет в ближайшее время (или когда-либо). Почти все технологии, которые были у окон с 90-х годов, все еще существуют в той или иной форме. Поэтому для тех, кто так привязан к .NET Framework: а) не беспокойтесь об его исчезновении и б) прекратите спорить в его пользу, как будто ваша жизнь зависит от него, ваш API безопасен.

  2. WinRT действительно реализует множество функций, которые в прошлом предоставлялись API-интерфейсами Win32 и .NET. Люди, которые хотят эту функциональность, будут иметь выбор, если они захотят использовать WinRT, .NET Framework или продолжить работу с Win32 API (это тоже не мертво). Если WinRT не поддерживает простое создание веб-приложений сегодня, очень велика вероятность, что он поддержит их в будущем.

Microsoft объявила о том, что WinRT - это большой фреймворк, который дал Microsoft возможность начать с чистого листа и создать API, используя уроки, извлеченные из Win32 API и самой .NET Framework. Я пытался найти это видео, но до сих пор не могу его найти, но одна из вещей, о которых говорил докладчик, состоит в том, что существуют определенные области .NET Framework, которые можно было бы определить лучше / проще / чище, и WinRT предоставляет те же функциональные возможности. в этом новом чистом интерфейсе.

DXM
источник
7
Было ли это выступление Херба Саттера на C ++ и далее под названием «Почему C ++?» Это видео на 9 канале, хотя сейчас у меня проблемы с доступом к нему, возможно, из-за того, что в Редмонде проходит огромное потоковое мероприятие. Ваша логика имеет смысл, но такие заявления действительно должны быть подкреплены некоторыми ссылками, так как это станет серьезным стратегическим сдвигом для Microsoft и всех, кто разрабатывает программное обеспечение с использованием продуктов Microsoft.
Роберт Харви
13
WinRT не является заменой .NET. Держите ваши факты в узде, пожалуйста.
Эйфорическая
4
@Euphoric: Другими словами .NET Framework никогда не заменял Win32 API. В то же время, когда вышел C #, многие переключились и забыли о том, что делать вызовы функций в стиле C в Windows DLL. MS настаивает на том же переключателе сейчас. Так что да. Платформа .NET по-прежнему будет существовать под капотом WinRT и, конечно, вы все еще можете использовать платформу .NET, но MS подталкивает людей к переходу на новую платформу.
DXM
21
@gbjbaanb - это 100% ложь. Первый ALL .NET всегда был очень хорошей оберткой для библиотеки Win32. Во-вторых, между Full.NET Profile и 'WinRT' .NET Profile есть только незначительные различия , а основные отличия заключаются в том, что большое количество вещей, которые были плохо реализованы 10-15 лет назад, были удалены и заменены более качественным кодом. Пока они не избавятся от библиотеки Win32, все вместе .NET останется здесь. Ваш комментарий показывает полное и полное отсутствие знаний в отношении самого языка .NET и C #.
Ramhound
6
Не говоря уже о том, что для веб-приложений .NET отлично подходит. Если бы это было когда-нибудь «замена», это было бы для настольных приложений, а не веб-приложений.
Джордж Стокер
22

Нет, Windows 8 полностью использует любой язык, который вам нужен (или вы знаете), чтобы выполнить свою работу. JavaScript, языки .Net (C #) и C / C ++ поддерживаются одинаково.

Ничто не заменяется, и в конечном итоге дело за разработчиками. Тем не менее, есть толчок к увеличению времени автономной работы, что облегчает WinRT.

Исключение составляют игры, в которых C ++ получает большую поддержку, особенно в Windows Phone 8, в то время как управляемые языки не имеют встроенной поддержки (иначе xna).

Даниэль Литтл
источник
1
+1 Microsoft отчаянно пытается внедрить Windows 8 на рынке смартфонов и планшетов. Apple зарабатывает больше только на iPhone, чем Microsoft в целом. Одним из препятствий является то, что существует очень мало приложений для Windows Phone / планшета по сравнению с установленными платформами. Поэтому они хотят, чтобы любой мог создать приложение на своем любимом языке. C #, C ++ или JavaScript.
MarkJ
Я не знаю, почему они решили отказаться от родной поддержки c / c ++, начиная с Windows Phone 7. С того дня Windows + Windows Mobile стала основной платформой для нашей компании на 90%, а ее значение перешло на 10%. 10% только из-за лучших инструментов разработки (visual studio), в противном случае мы больше не делаем продукты даже для Windows Desktop.
Павел П
1
@Pavel Я не уверен, что ты там говоришь ..
Даниэль Литтл
@Pavel - они удалили собственный код из WinPhone7, а затем удалили управляемый код из WinPhone8. Возможно, вы можете повторно посетить платформу сейчас или просто игнорировать ее, пока / или она не получит гораздо большую долю рынка.
gbjbaanb
19

Я знаю о возможностях C ++ 11, но хотел бы услышать ваш опыт

Мысль о том, что люди предпочли бы C ++, а не C # (или почти любой другой пост 1990 [non-php] альтернативный) для программирования общего назначения, смешна . C ++ 11 добавляет несколько хороших пропущенных кусочков, но это все еще прибивает ногу собаке .

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

Telastyn
источник
31
Прочитайте, что вы пишете. Вы прямо заявляете, что использование C ++ для программирования общего назначения на C # смешно . Это искренний факт, в который вы верите, или это просто ваше преувеличенное мнение?
zxcdw
38
@zxcdw - Если у меня будет 100 общих проблем программирования, я решу ~ 90 из них быстрее, лучше, с меньшим количеством ошибок, используя C # или Java, или Python, или Scala, или ... И это щедро. Это общая точка зрения практически каждого профессионального программиста, которого я знаю; даже те, кто использует C ++ в качестве основного языка.
Теластин
33
@zxcdw: я хардкорный разработчик C ++. Я занимался C ++ более 15 лет и работал в основном над серверными приложениями, которые нуждаются в C ++. Я был на всем протяжении STL и половина Повышения. К большому разочарованию моей команды, я ввел шаблонное метапрограммирование в нескольких местах, которые, по моему мнению, заслуживают этого. Я хочу подчеркнуть, что люблю C ++ и работаю с ним. Сказав это, я согласен с Telastyn: если у меня есть общая проблема, которая не требует того, что может предложить C ++, я бы предпочел взять C # или даже Python. Это языки более высокого уровня, и вы просто делаете вещи быстрее в них. Это верно, по крайней мере, для разработчиков Win
DXM
5
@MadKeithV - Если бы я не работал над приложением C #, которое работает на OSX, iOS и Android, я мог бы придать этому кроссплатформенному аргументу немного больший вес. Даже игнорируя это, языки, отличные от C #, которые я перечислил, почти всегда лучше, чем C ++, когда кросс-платформенность - серьезная проблема. C ++ 11 не делает ничего, чтобы отодвинуть эти опции.
Теластин
14
Если у вас есть только молоток, все выглядит как гвоздь. Улучшения в C ++ 11 не уменьшат повсеместного влияния C # и других подобных, но, возможно, более независимых от платформы языков, скорее, это сохранит этот корабль на плаву. Самым большим преимуществом C ++ 11 остается то, что он может быть сквозным языком для системы, которая копается в недрах системы, но предлагает возможность возиться с абстракциями более высокого порядка.
JustinC
2

ДХМ написал:

Таким образом, основное внимание (по крайней мере, в глазах Microsoft) вернулось к C ++, потому что теперь мы заботимся о времени автономной работы. Код более высокого уровня = больше инструкций = требуется больше сока.

Согласно этим словам, выбор Java в качестве основного языка / фреймворка для Android от Google был ошибкой. Не было. Язык более высокого уровня обычно означает, что работа выполняется быстрее, и я думаю, что это самое важное для Microsoft и Google. Чем больше приложений создается для платформы, тем выше прибыль производителя ОС.

С другой стороны, существует множество программ для Windows, все еще написанных на C ++, поэтому подталкивать этих разработчиков к переходу на C # / JavaScript / что-либо еще было бы безумно. Microsoft стремится предоставить возможность разработки приложений для Win8 как можно большему числу разработчиков, поэтому, по моему мнению, они решили поддержать C ++ и JavaScript в стеке разработки Win8.

Ротман
источник
5
Ява была ошибкой. Если вам нужна грубая производительность (и вы часто это делаете), тогда вы хотите писать на C / C ++. Если вы хотите продуктивности для разработчиков, вам нужен язык более высокого уровня, такой как Python или PHP, Ruby или JS. Java (и C #) - это системы среднего уровня, которые не дают ни лучшую производительность, ни лучшую производительность. На самом деле C ++ не так уж и плох - вы можете получить от него хорошую производительность, как только узнаете, что делаете.
gbjbaanb
8
@gbjbaanb У меня смешанные чувства по поводу вашего комментария: несколько лет назад перевод Java и C # на один и тот же уровень абстракции имел бы смысл, но введение LINQ, лямбда-выражений и функций асинхронного программирования в более новые версии .NET поднял C # на более высокий уровень (Java собирается наверстать недостаток функционального программирования в JDK8, но это все еще на ранней стадии доступа).
codeparkle
2
@gbjbaanb, к счастью, WCF - это лишь малая часть .NET, и обобщение того, что применять к языку C #, недопустимо. Вы действительно использовали новые функции начиная с .NET 3? Потому что VS не такая уж хорошая среда разработки (на самом деле, это действительно раздражает без ReSharper). Итак, учитывая, что этот самый сайт (и вся сеть SE) построен на C #, ваш комментарий кажется немного неточным.
codeparkle
1
@rotman Пожалуйста, не отвечайте на ответы других людей в своем собственном ответе. Ответы должны отвечать только на исходный вопрос :)
Andres F.
6
@gbjbaanb: Я бы сказал, что это было утверждение без доказательств того, что системы среднего уровня, которые не дают ни лучшую производительность, ни лучшую производительность, являются ошибкой. Учитывая , что эффективность и производительность является и важными, лучшим решением является тот , который уравновешивает два, и среднее заземление выбора , как Java или C # является отличным выбором для многих случаев применения.
Carson63000
2

В C ++ все еще есть файлы заголовков, гибкие препроцессоры (#define), ... такие вещи некоторые люди считали этими функциями «злыми» или «трудными в управлении».

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

О добавлении Microsoft дополнительных функций в C ++: не удивительно.

Каждый компилятор C ++ добавляет больше функций, включая функции C ++ 11. gcc тоже.

linquize
источник
7
Если все, что вы можете сказать о C ++ плохо, это заголовочные файлы, вы косвенно доказали это. Я могу перечислить целый ряд серьезных проблем C #, непереносимости, недетерминированности, накладных расходов во время выполнения, проприетарных и т. Д.
user805547
1
Используйте правильный инструмент для правильной работы. C ++ хорош в таких компаниях, как Intel, потому что производительность различного неуправляемого кода требовала низкого уровня для медальных проектов, но если вам нужен веб-сайт / веб-сервис, который делает каждая компания, то удачи с C ++ для этого!
Том Стиккель
1

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

Тот факт, что C ++ проглотил простое C целом, затрудняет вывод, кто чем пользуется.

Но проектов с открытым исходным кодом на C гораздо больше, чем на C ++.

На мой взгляд, если вам нужна скорость, близкая к металлу, используйте C. Если вам нужна гибкость и управляемость при разумной производительности, используйте C # или Java. Если вы хотите быстро создать чистый дизайн, используйте Python, Scala, Groovy или любой из множества полнофункциональных языков.

Джеймс Андерсон
источник
2
Нет, я думаю, что вы не правы здесь. C ++, если вы отключите исключения, так же близок к металлу, как C, если вы знаете, что делаете. Проблема в ABI. В C ++ ситуация еще не решена, они работают над этим. Как только это будет сделано, я думаю, что не будет особой привлекательности использовать C вместо C ++, хотя на самом деле C ++ имеет лучшую проверку ошибок и является надмножеством, так что инструмент в этом случае будет лучше.
Герман Диаго
0

C ++ не заменяет C #. Давайте посмотрим, где используется язык C ++. Он используется, когда требуется высокая производительность, для написания библиотек промежуточного программного обеспечения, низкоуровневого доступа и для написания кода для устройств с ограниченными ресурсами. Хотя вы можете использовать c # для некоторых из этих c ++ больше подходит для них. Толчок Microsoft к c ++ тесно связан с ее большим толчком в мобильном пространстве. Никто не попросит вас написать ваше следующее веб-приложение на с ++. Но с Qt аргумент производительности не может быть сделан против c ++. Но я думаю, что многие люди не знакомы с Qt.

Яак
источник
C ++ по-прежнему широко используется в не-вертикальной коммерческой разработке программного обеспечения для Windows.
bit-twiddler
1
C ++ - самый профессиональный инструмент, который вы можете использовать для написания программного обеспечения. Но вы должны уметь писать хороший код, поскольку он довольно бесплатный и имеет некоторые особенности обратной совместимости. Я думаю, что он хорошо подходит для всех видов программного обеспечения, кроме сценариев. Проблема в кривой обучения. С современными библиотеками это очень грамотно даже при производительности. И подумайте, что если приложение успешно, вы должны его портировать. Портировать проще с базами кода C / C ++, делайте это с доступностью компилятора. Список программного обеспечения, написанного на C ++, бесконечен: Amazon, Google, Dropbox, Telecom, Games, Facebook ...
Герман Диаго
-4

Нет, C ++ не может заменить C #, потому что все не-Direct3D приложения для Windows Phone 8 должны быть разработаны на C #. Вы не можете разрабатывать и публиковать приложения в магазине приложений wp8, просто используя C ++ или HTML5 / Javascript. И пока Microsoft не снимает это ограничение, C ++ ничего не заменяет. В результате я уверен, что мало кто будет разрабатывать для WP8. Бедная Nokia, проигрывает еще раз.

Вот выдержка из Microsoft Dev Center :

Windows Phone 8 не поддерживает пользовательский интерфейс XAML с моделью приложения с выделенным кодом C ++, которая поддерживается для приложений Магазина Windows.

еще один:

Означает ли это, что я не могу использовать C ++ с XAML для разработки приложения на Windows PHone 8, могу ли я использовать C # + XAML?

Это верно. XAML может использоваться только с C #. C ++ может использоваться для компонента WinRT, используемого проектом C #.

Даже Microsoft MVP утверждают, что этот слух является преднамеренной дезинформацией, сделанной самим Microsoft:

Мне нравится то, что Microsoft делает с WinRT и Windows Phone 8, но я бы хотел, чтобы они не перепродали некоторые из них, поскольку это просто расстроит пользователей, когда они узнают всю правду.

И этот намеренный неправильный маркетинг тратит впустую месяцы людей :

Было бы неплохо узнать этот МЕСЯЦЕВ назад, пока я не пошел по всему маршруту с собственным кодом с моим приложением Metro.

Özgür
источник
1
Ваши ссылки указывают, что вы можете использовать C ++ для разработки WP8, и только XAML требует C #. Кроме того, Direct3D поддерживается только C ++.
Ли
@ Послушай, можешь ли ты разработать не-Direct3D приложение без использования C # для WP8?
Озгюр