Чи замінює сучасний 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. Скоріше, це конкретно, які позиції Майкрософт, чому він змінився і куди вони йдуть, бо реальність полягає в тому, що МС досить велика, що коли вони чинять вплив принаймні на менші гори, вони мають тенденцію рухатись. І так, в цьому випадку вони безумовно впливають.
DXM

9
Давайте будь-ласка, будьте всі громадянські. Грубість не буде терпіти.
maple_shaft

Відповіді:


95

Так, ваші підозри правильні. Microsoft підштовхує C ++ повернутися і стати більш популярною.

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

У нього була часова шкала, що він пояснював, як різні тиски впливають на те, яка технологія була популярною в певний час. Тож спочатку люди хотіли швидкості, тому всі вони були закодовані на 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, їх найновіший інтерфейс UI), щоб бути доступною і в C ++.

Тож для мене такий вид свідчить про те, що на C ++ у Microsoft, безумовно, більше уваги, ніж у минулому.

ОНОВЛЕННЯ №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 # може дещо знизити. На це наполягає МС, і, як я вже говорив у коментарях вище, коли МС відкладає свій капітал за ідею, вони змінюють значну частину галузі. Я, мабуть, отримаю відповідь від якогось хлопця, який буде сперечатися, "яка галузь, я завжди був у Linux", і на це моя єдина відповідь - прокинься! Так, є інші ОС там, але більшість ринку настільних комп'ютерів, як споживача, так і бізнесу на даний момент - це Windows, і будь-який серйозний розробник, який бажає максимально використовувати свій час, був би дуже нерозумним, щоб не націлювати на цю частину ринку настільних ПК.

Отже, на закінчення: Так, MS наполягає на тому, щоб C ++ повернувся, тому, швидше за все, його популярність зросте. Ні, C ++ ніколи не замінить C #.

Оновлення №2:

Я не знаю чому, але технічна спільнота має тенденцію бачити речі абсолютно абсолютними чорно-білими, коли реальність сповнена відтінків сірого. Це відповідь на кілька нових коментарів, які були додані до цієї публікації:

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

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

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


7
Це була розмова Герб Саттера на C ++ і далі, під назвою "Чому C ++?" На Канал 9 є відео про це, хоча в даний момент у мене виникають проблеми з доступом до нього, ймовірно, тому, що Редмонд проводить величезну трансляцію. Ваша логіка має сенс, але подібні висловлювання дійсно потрібно підкріплювати деякими посиланнями, оскільки це може означати серйозний стратегічний зсув для Microsoft та всіх інших, хто розробляє програмне забезпечення з продуктами Microsoft.
Роберт Харві

13
WinRT не замінює .NET. Будь ласка, тримайте свої факти.
Ейфорія

4
@Euphoric: Іншими словами .NET Framework ніколи не був заміною API Win32. У той же час, коли вийшов C #, багато людей перейшли і забули про вхідні дзвінки функцій C у стилі DLL для Windows. MS зараз наполягає на тому самому комутаторі. Так, так. .NET Framework буде продовжувати існувати під кришкою WinRT і впевнений, що ви все ще можете використовувати .NET Framework, але MS наполягає на тому, щоб люди перейшли на новий фреймворк.
DXM

21
@gbjbaanb - Це 100% помилково. Перший ВСЕ .NET коли-небудь був завжди дуже гарною обгорткою для бібліотеки Win32. По-друге, існують лише незначні відмінності між Full.NET Profile та 'WinRT' .NET Profile, основні відмінності - це велика кількість речей, які погано реалізовані 10-15 років тому, були видалені та замінені на краще розроблений код. Поки вони не позбудуться бібліотеки Win32, всі разом. NET тут залишається. У вашому коментарі видно ПОЛЬНЕ та ВСЬОГО відсутність знань щодо мови .NET та мови C #.
Рамхаунд

6
Не кажучи вже про те, що для веб-додатків .NET чудово підходить. Якби це колись була «заміна», це було б для додатків для настільних ПК, а не веб-додатків.
Джордж Стокер

22

Ні, Windows 8 - це використання будь-якої мови, яку вам потрібно (або знати), щоб виконати роботу. JavaScript, .Net мови (C #) та C / C ++ всі підтримуються однаково.

Нічого не замінюється, і все-таки це залежить від розробників. Однак є поштовх до кращого часу роботи акумулятора, що WinRT полегшує.

Виняток становлять ігри, де C ++ отримує більшу підтримку, особливо на Windows Phone 8, поки керовані мови не мають вбудованої підтримки (він же не xna).


1
+1 Майкрософт відчайдушно хоче прийняти Windows 8 на ринку смартфонів та планшетів. Apple заробляє більше доходів лише від iPhone, ніж загалом Microsoft. Одна перешкода полягає в тому, що програм для телефонів / планшетів Windows у порівнянні з усталеними платформами дуже мало. Тому вони хочуть зробити можливість будь-кому створити додаток на своїй улюбленій мові. C #, C ++ або JavaScript.
MarkJ

Я не знаю, чому вони вирішили відмовитись від підтримки рідного c / c ++, починаючи з Windows Phone 7. З цього дня Windows + Windows Mobile став з 90% основної платформи для нашої компанії перейшов на 10% важливості. 10% - це лише завдяки кращим інструментам розробки (візуальна студія), інакше ми не робимо більше продуктів навіть для робочого столу Windows.
Павло П

1
@Pavel Я не впевнений, що ти там говориш ..
Даніель Літтл

@Pavel - вони скинули власний код з WinPhone7, потім скинули керований код з WinPhone8. Можливо, ви можете повторно відвідати платформу зараз або просто проігнорувати її, поки / якщо вона не отримає набагато більшу частку ринку.
gbjbaanb

19

Я знаю про функції C ++ 11, але хотів би почути ваш досвід

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

У C ++ є хороші ніші, і це все ще найкращий варіант на деяких платформах з обмеженою підтримкою компілятора. Але ні, сучасний C ++ ніде не замінює нічого, крім, можливо, застарілого, зламаного C ++.


31
Прочитайте, що ви пишете. Ви відверто стверджуєте, що використання C ++ для програмування загального призначення на C # є смішним . Це щиро факт, в який ви вірите, чи це лише ваша перебільшена думка?
zxcdw

38
@zxcdw - Якщо у мене 100 загальних проблем з програмуванням, я зроблю ~ 90 з них швидше, краще, з меншою кількістю помилок, використовуючи C # або Java, Python або Scala, або ... І це щедро. Це загальна точка зору майже кожного професійного програміста, якого я знаю; навіть ті, хто використовує C ++ як основну мову.
Теластин

33
@zxcdw: Я хардкор C ++ розробник. Я займався C ++ протягом 15+ років і працював здебільшого над бек-енд-додатками, яким потрібен C ++. Я був у всьому STL і наполовину Boost. На жаль, моїй команді я запровадив метапрограмування шаблонів у кількох місцях, на які я вважав, що це заслуговує. Я намагаюся зазначити, що я люблю C ++ і працюю з ним. Сказавши це, я погоджуюся з Telastyn, якщо у мене є загальна проблема, яка не вимагає того, що може запропонувати C ++, я б скоріше забрав C # або навіть Python. Вони є мовами вищого рівня, і ви просто швидше робите в них справи. Це принаймні для Win devs
DXM

5
@MadKeithV - Якщо я не працював над додатком C #, який працює на OSX, iOS та Android, я міг би надати цьому аргументу крос-платформи трохи більше ваги. Навіть не зважаючи на це, перелічені мною мови, що не належать до C #, майже завжди є кращими варіантами, ніж C ++, коли кросплатформа викликає серйозне занепокоєння. C ++ 11 не дуже допомагає відхилити ці варіанти.
Теластин

14
Якщо все, що у вас є, це молоток, все виглядає як цвях. Поліпшення C ++ 11 не зменшить всебічний вплив C # та інших подібних, але, можливо, більше платформних агностичних мов, скоріше це збереже цей корабель на плаву. Найбільшою точкою продажу C ++ 11 залишається те, що він може бути мовою для кінця до кінця для системи, яка задирається в глибині системи, але все ж пропонує можливість повозитися навколо з абстракціями вищого порядку.
JustinC

2

DXM написав:

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

Відповідно, помилка вибору Java як основної мови / основи для Android від Google. Це не так. Мова вищого рівня зазвичай означає, що все можна зробити швидше, і я думаю, що це найважливіше для Microsoft та Google. Чим більше і якісніших програм створено для платформи, тим вище прибуток виробника ОС.

З іншого боку, існує багато програмного забезпечення для Windows, яке все ще написано на C ++, тому підштовхування цих розробників до переходу на C # / JavaScript / все інше було б шаленим. Майкрософт зосередився на наданні можливості розробляти програми 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 Будь ласка, не відповідайте на відповіді інших людей у ​​власній відповіді. Відповіді повинні стосуватися лише оригінального питання :)
Андрес Ф.

6
@gbjbaanb: Я б сказав, що це було твердженням без доказів того, що системи середнього рівня, які не дають тобі ні найкращої продуктивності, ні найвищої продуктивності - це помилка. З огляду на , що ефективність і продуктивність є і важливими, найкращим рішенням є той , який врівноважує два, і середнє заземлення вибору , як Java або C # є відмінним вибором для багатьох випадків застосування.
Carson63000

2

У C ++ досі є файли заголовків, гнучкі препроцесори (#define), ... такі речі деякі люди вважали ці функції "злими" або "важкими для управління".

C #, з іншого боку, використовуйте метадані, не потрібно писати та підтримувати файли заголовків.

Про додавання Microsoft додаткових функцій до C ++: Не дивно.

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


7
Якщо все, що ви можете сказати, погано про C ++ - це файли заголовків, ви опосередковано довели це. Я можу перелічити цілу низку серйозних проблем із C #,
непереносимість, недетермінованість, накладні режими роботи

1
Використовуйте правильний інструмент для правильної роботи. C ++ чудово підходить таким компаніям, як Intel, для різноманітних керованих функцій коду потрібен низький рівень медальних проектів, але якщо вам потрібен веб-сайт / веб-сервіс, який робить кожна компанія, ніж удачі з C ++ для цього!
Том Стікель

1

Це може бути просто я, але я бачу набагато простіше використання C, ніж C ++.

Той факт, що C ++ проковтнув звичайний C цілий, важко зробити висновок, хто чим користується.

Але є набагато більше проектів з відкритим кодом C, ніж C ++.

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


2
Ні, я думаю, що ви тут неправі. Якщо ви відключите винятки, C ++ є наближеним до металу, як і C, якщо ви знаєте, що ви робите. Проблема - ІБС. У С ++ ситуацію ще потрібно вирішити, вони над цим працюють. Як тільки це буде зроблено, я думаю, що використовувати C не замість C ++ буде дуже багато, коли насправді C ++ має кращу перевірку помилок і є суперсетом, тож інструмент буде кращим у цьому пункті.
Germán Diago

0

c ++ не замінює c #. Давайте розглянемо, де використовується мова ++. Він використовується, коли є необхідність у високій продуктивності, для написання проміжних бібліотек, низького рівня доступу та для написання коду для обмежених ресурсів пристроїв. Хоча ви можете використовувати c # для деяких із цих с ++, більше підходить для них. Позиція Microsoft на c ++ дуже пов'язана з її великим поштовхом у мобільному просторі. Ніхто не попросить вас написати свій наступний веб-додаток на c ++. Але з Qt аргумент продуктивності не може бути зроблений проти c ++. Але я думаю, що багато людей не знайомі з Qt.


C ++ все ще активно використовується в невертикальній комерційній розробці програмного забезпечення Windows.
біт-твідлер

1
C ++ - це як найпрофесійніший інструмент, який можна використовувати для написання програмного забезпечення. Але ви повинні вміти писати хороший код, оскільки він досить безкоштовний і має деякі химерності, спрямовані на зворотну сумісність. Я думаю, що він добре підходить для будь-якого програмного забезпечення, крім сценаріїв. Проблема - крива навчання. З сучасними бібліотеками він дуже компетентний навіть за продуктивністю. І подумайте, що якщо програма успішна, ви повинні її портувати. Передача даних простішою за допомогою C / C ++ баз коду, це зробити для компілятора. Список програмного забезпечення, написаного на C ++, нескінченний: amazon, google, dropbox, телеком, ігри, facebook ...
Germán Diago

-4

Ні, C ++ не може замінити C #, оскільки всі додатки для Windows-8, не Direct3D, повинні бути розроблені за допомогою C #. Ви не можете розробляти та публікувати програми в магазині додатків wp8, лише використовуючи C ++ або HTML5 / Javascript. І поки Microsoft не усуне це обмеження, C ++ нічого не замінює. Як результат, я впевнений, що дуже мало людей розроблять для WP8. Бідна Nokia, втрачаючи ще один раз.

Ось уривок із центру Microsoft Microsoft Dev :

Windows Phone 8 не підтримує інтерфейс XAML з кодовою моделлю додатків C ++, що підтримується для додатків Windows Store.

ще один:

Чи означає це, що я не можу використовувати C ++ з XAML для розробки програми на Windows PHone 8, чи я обмежений у використанні C # + XAML?

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

Навіть MVP Microsoft стверджують, що ця чутка є навмисною дезінформацією, зробленою самим Microsoft:

Мені подобається, що Microsoft робить з WinRT та Windows Phone 8, але хотілося б, щоб вони не перепродавали частину цього, оскільки це просто засмутить користувачів, коли вони дізнаються повністю правду про це.

І цей навмисний неправильний маркетинг витрачає людей на місяці :

Було б добре дізнатись про це АГРОМИ МІСЯЦІВ, перш ніж я спустився на весь рідний код з моїм додатком Metro.


1
Як у ваших посиланнях, ви можете використовувати C ++ для розробки WP8, і для цього потрібен лише XAML. Крім того, Direct3D підтримується лише C ++.
Лі

@Lee, чи можна розробити додаток non-Direct3D, не використовуючи C # для WP8?
Özgür
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.