Il C ++ moderno sta sostituendo C #? Microsoft sta spingendo gli sviluppatori ad adottare il C ++? [chiuso]


91

Ho sentito della popolarità del C ++ moderno e alcuni discorsi sulla migrazione al C ++ da C # o altri linguaggi simili al C.

Conosco le funzionalità di C ++ 11 ma vorrei ascoltare le tue esperienze, in particolare dagli sviluppatori che sono passati da C # a C ++.

Ancora più importante, Microsoft spinge gli sviluppatori a utilizzare il C ++? Se si, perché?


16
Penso che il C ++ sia sempre stato un linguaggio più ampiamente utilizzato perché è più ben definito e facilmente trasportabile rispetto al C #. Non penso che sostituisca C #. Per le applicazioni aziendali basate su Windows, C # sarà ancora molto richiesto come linguaggio facile da usare . Il C ++ non è mai andato via. Recentemente ha avuto una sorta di rinascita.
KChaloux,

2
Spero di no. Java e C # sono stati vantaggi per gli sviluppatori e sono ancora in evoluzione.
Jesse C. Slicer,

4
Sia C ++ che C # sono solo strumenti : scegli quello migliore per quel particolare lavoro. ad esempio, se si desidera scrivere codice multipiattaforma, è possibile utilizzare C ++; se desideri piccole app che non richiedono l'installazione di runtime .NET, puoi utilizzare C ++ (con CRT collegato staticamente); se si desidera sviluppare alcuni strumenti GUI per Windows in modo RAD, è possibile utilizzare C # e WinForms; ecc.
Mr.C64

6
È una buona domanda, forse ha bisogno di una riformulazione. Non è un'altra lingua A contro la lingua B. Piuttosto, è in particolare quali sono le posizioni di Microsoft, perché è cambiato e dove stanno andando perché la realtà è che la SM è abbastanza grande che quando esercitano influenza almeno le montagne più piccole tendono spostare. E sì, in questo caso, stanno sicuramente influenzando.
DXM,

9
Per favore, rendiamoci civili tutti. La maleducazione non sarà tollerata.
maple_shaft

Risposte:


95

Sì, i tuoi sospetti sono corretti. Microsoft sta spingendo C ++ per tornare e diventare più popolare.

Non riesco a trovarlo ora, ma qualche tempo fa ho visto una presentazione di uno dei big di Microsoft e il tutto era orientato verso gli sviluppatori e riguardava il lancio di Windows 8 e in particolare WinRT (la sostituzione anche per .NET framework come API Win32).

Aveva una linea temporale che spiegava come le varie pressioni stavano influenzando quale tecnologia era popolare in determinati momenti. Quindi all'inizio la gente voleva la velocità, quindi tutti codificati in C / C ++ (due lingue separate). Man mano che l'hardware diventava più veloce, l'attenzione si spostava dalla velocità di esecuzione e più verso la velocità di sviluppo, quindi i linguaggi di livello superiore sono diventati molto più popolari.

Tuttavia, ora l'attenzione è sempre più rivolta ai computer mobili e basati su ARM (Windows 8 è la prima versione di Windows che sarà compilata per ARM) e molti credono che diventeranno molto più popolari e per alcuni sostituiranno completamente il desktop. Quindi l'attenzione (almeno agli occhi di Microsoft) è tornata sul C ++ perché ora ci preoccupiamo della durata della batteria. Codice di livello superiore = più istruzioni = più succo richiesto.

Per supportare questa transizione al C ++, hanno introdotto un'API di programmazione di Windows 8 completamente nuova, chiamata WinRT (ultimo controllo, che comunque era il nome). Questa API segue il tema di .NET Framework nell'ambito di funzionalità che fornisce ma sarà disponibile a chiunque codifichi in C ++ (tramite interfacce COM), in C # o anche in Javascript per coloro che desiderano scrivere app HTML 5 / Javascript. Stanno anche portando XAML (tecnologia utilizzata in WPF, il loro più recente framework UI) per essere disponibile anche in C ++.

Quindi per me questo tipo di indica che in Microsoft c'è decisamente più attenzione al C ++ che in passato.

AGGIORNAMENTO N. 1:

Dato che ho appena ricevuto un badge di "bella risposta" per questo, ho pensato che forse dovrei tornare e a) chiarire alcune cose eb) rendere felice la polizia di controllo dei fatti perché, come sappiamo tutti nei forum tecnologici, qualsiasi cosa inesatta potrebbe portare a guerre che dura da anni.

  1. WinRT non è un sostituto di .NET framework, ma è ancora un'altra alternativa che gli sviluppatori di MS Windows hanno ora e MS sta spingendo fortemente le persone ad andare in quella direzione. Sembra (ti preghiamo di tenere le fiamme se questo non è accurato al 100%) che WinRT era principalmente mirato per le app moderne dell'interfaccia utente, anche se le normali app desktop dovrebbero essere in grado di trarne vantaggio. Detto questo, MS sta spingendo fortemente le persone a passare alla scrittura di a) moderne app UI e b) iniziare a utilizzare WinRT in modo che la percentuale di persone che usano il framework .NET diminuisca molto probabilmente diminuirà.

  2. C ++ non sostituirà MAI i linguaggi di livello superiore come C # o Python. Proprio come quelle lingue non sostituiranno MAI il C ++. Questa è stata probabilmente la parte più controversa della domanda di OP. Ma si tratta dell'equilibrio e i fatti sono che:

    • La comunità C ++ (di cui MS fa gran parte) sta spingendo per un forte ritorno al posizionamento del C ++ come un buon linguaggio per dispositivi a basso consumo, la cui quota di mercato è andata impazzendo di recente. Se non mi credi, cerca la serie di discorsi "GoingNative" iniziati l'anno scorso.
    • Con tutto lo sforzo e l'influenza di Microsoft, l'utilizzo del C ++ salirà sicuramente, mentre il C # potrebbe far cadere qualcosa. Questo è ciò che la MS sta spingendo e, come ho detto nei commenti sopra, quando la MS mette il proprio capitale dietro un'idea, spostano gran parte del settore. Probabilmente riceverò una risposta da un tipo che sosterrà "quale settore, sono sempre stato su Linux" e la mia unica risposta è svegliarmi! Sì, ci sono altri sistemi operativi là fuori ma la maggior parte del mercato desktop, sia i consumatori che le imprese al momento sono Windows e qualsiasi sviluppatore serio che desideri massimizzare il valore del suo tempo sarebbe molto sciocco non mirare a quella fetta del mercato desktop.

Quindi, in conclusione: Sì, MS sta spingendo per il ritorno del C ++, quindi molto probabilmente la sua popolarità aumenterà. No, C ++ non sostituirà mai C #.

Aggiornamento n. 2:

Non so perché, ma la comunità tecnica tende a vedere le cose in termini assolutamente bianchi / neri quando la realtà è piena di sfumature di grigio. Questa è una risposta a diversi nuovi commenti che sono stati aggiunti a questo post:

  1. .NET framework non scomparirà presto (o mai). Quasi tutte le tecnologie che Windows aveva dagli anni '90 sono ancora in qualche modo o in qualche modo. Quindi, per quelli che sono così attaccati a .NET framework: a) non preoccuparti che scompaia eb) smetti di litigare a suo favore come se la tua vita dipendesse da esso, la tua API è al sicuro.

  2. WinRT reimplementa molte funzionalità che in passato erano fornite dalle API del framework Win32 e .NET. Le persone che desiderano tale funzionalità potranno scegliere se vogliono utilizzare WinRT, .NET framework o continuare con l'API Win32 (che non è neanche morto). Se WinRT non supporta la creazione semplice di applicazioni Web oggi, ci sono ottime possibilità che le supporterà in futuro.

La posizione che Microsoft ha annunciato è che WinRT è un framework di grandi dimensioni che ha dato a Microsoft la possibilità di iniziare con una lavagna pulita e di creare un'API utilizzando le lezioni apprese nell'API Win32 e nel framework .NET stesso. Ho provato a cercare quel video, e ancora non riesco a trovarlo, ma una delle cose che il relatore ha menzionato è che ci sono alcune aree del framework .NET che avrebbero potuto essere definite migliori / più semplici / più pulite e WinRT espone quella stessa funzionalità in quella nuova interfaccia più pulita.


7
Era il discorso di Herb Sutter su C ++ e oltre, intitolato "Why C ++?" C'è un video su Channel 9, anche se al momento sto riscontrando problemi ad accedervi, probabilmente perché Redmond sta organizzando un grande evento di streaming. La tua logica ha senso, ma è necessario eseguire il backup di questo tipo di affermazioni con alcuni riferimenti, poiché ciò rappresenterebbe un importante cambiamento strategico per Microsoft e chiunque altro sviluppi software con i prodotti Microsoft.
Robert Harvey,

13
WinRT non sostituisce .NET. Tieni i tuoi fatti sotto controllo per favore.
Euforico

4
@Euforico: in altre parole, .NET framework non ha mai sostituito l'API Win32. Allo stesso tempo, quando è uscito C # molte persone sono passate e si sono dimenticate di effettuare chiamate di funzione in stile C in DLL di Windows. MS sta spingendo per lo stesso interruttore ora. Quindi sì, .NET framework continuerà a esistere sotto il cofano di WinRT e sicuramente sarà ancora possibile utilizzare .NET framework, ma MS sta spingendo le persone a passare al nuovo framework.
DXM

21
@gbjbaanb - Questo è falso al 100%. Il primo ALL NET di sempre è sempre stato un wrapper molto carino per la libreria Win32. In secondo luogo, ci sono solo piccole differenze tra il Fullprofilo .NET e il profilo .NET "WinRT", le differenze principali sono una grande quantità di elementi che sono stati rimossi e implementati male 10-15 anni fa e sostituiti con codice meglio progettato. Fino a quando non si sbarazzeranno della libreria Win32 tutti insieme .NET è qui per rimanere. Il tuo commento mostra una mancanza COMPLETA e TOTALE di conoscenza riguardo al linguaggio .NET e C # stesso.
Ramhound,

6
Per non parlare del fatto che, per le applicazioni Web, .NET è eccezionale. Se fosse mai una "sostituzione", sarebbe per le app desktop e non per le applicazioni Web.
George Stocker,

22

No, Windows 8 si basa sull'utilizzo di qualsiasi linguaggio sia necessario (o sapere) per svolgere il lavoro. I linguaggi JavaScript, .Net (C #) e C / C ++ sono tutti ugualmente supportati.

Nulla viene sostituito e dipende comunque dagli sviluppatori. C'è comunque una spinta per una migliore durata della batteria che WinRT semplifica.

L'eccezione sono i giochi in cui C ++ sta ottenendo più supporto, specialmente su Windows Phone 8 mentre le lingue gestite non hanno supporto nativo (aka no xna).


1
+1 Microsoft è alla disperata ricerca di Windows 8 adottato nel mercato degli smartphone e dei tablet. In totale, Apple guadagna di più dal solo iPhone rispetto a Microsoft. Un ostacolo è che ci sono pochissime app per Windows Phone / Tablet rispetto alle piattaforme stabilite. Vogliono quindi consentire a chiunque di creare un'app, nella loro lingua preferita. C #, C ++ o JavaScript.
MarkJ

Non so perché abbiano deciso di abbandonare il supporto nativo c / c ++ a partire da Windows Phone 7. Da quel giorno, windows + windows mobile è diventato dalla piattaforma principale del 90% per la nostra azienda spostata al 10% di importanza. Il 10% è solo grazie ai migliori strumenti di sviluppo (Visual Studio), altrimenti non realizziamo più prodotti nemmeno per desktop Windows.
Pavel P

1
@Pavel Non sono sicuro di quello che stai dicendo lì ...
Daniel Little

@Pavel: hanno eliminato il codice nativo da WinPhone7, quindi hanno eliminato il codice gestito da WinPhone8. Forse puoi visitare nuovamente la piattaforma ora o semplicemente ignorarla fino a quando / se ottiene una quota di mercato molto più grande.
gbjbaanb,

19

Conosco le funzionalità di C ++ 11 ma vorrei ascoltare le tue esperienze

Il pensiero che le persone preferirebbero il C ++ rispetto al C # (o praticamente qualsiasi altro alterativo post-1990 [non-php]) per la programmazione generale è ridicolo . C ++ 11 aggiunge alcuni bit mancanti, ma sta ancora inchiodando le gambe a un cane .

Il C ++ ha alcune buone nicchie ed è ancora l'opzione migliore su alcune piattaforme con supporto limitato del compilatore. Ma no, il C ++ moderno non è affatto vicino alla sostituzione di nulla tranne forse il C ++ antiquato e rotto.


31
Leggi cosa stai scrivendo. Stai affermando apertamente che l'uso di C ++ per la programmazione generica su C # è ridicolo . È sinceramente un fatto in cui credi o è semplicemente la tua opinione esagerata?
zxcdw,

38
@zxcdw - Se avrò 100 problemi di programmazione generale, ne farò ~ 90 più velocemente, meglio, con meno bug usando C # o Java o Python o Scala o ... E questo è generoso. Questo è il punto di vista comune di praticamente tutti i programmatori professionisti che conosco; anche quelli che usano C ++ come lingua principale.
Telastyn,

33
@zxcdw: sono uno sviluppatore C ++ hardcore. Ho fatto C ++ per oltre 15 anni e ho lavorato principalmente su app back-end che richiedono C ++. Sono stato in tutto STL e metà del Boost. Con grande sgomento del mio team ho introdotto la metaprogrammazione dei template in alcuni posti che pensavo meritassero. Il punto che sto cercando di sottolineare è che adoro il C ++ e lavorare con esso. Detto questo, sono d'accordo con Telastyn, se ho un problema generale che non richiede ciò che C ++ ha da offrire, preferirei prendere C # o persino Python. Sono linguaggi di livello superiore e semplicemente fai cose più velocemente in loro. Questo è vero almeno per gli sviluppatori Win
DXM

5
@MadKeithV - Se non lavorassi su un'app C # in esecuzione su OSX, iOS e Android, potrei dare un po 'più peso a quell'argomento multipiattaforma. Anche ignorando ciò, i linguaggi non C # che ho elencato sono quasi sempre opzioni migliori rispetto al C ++ quando la multipiattaforma è una grande preoccupazione. C ++ 11 non sta facendo molto per allontanare queste opzioni.
Telastyn,

14
Se tutto ciò che hai è un martello, tutto sembra un chiodo. I miglioramenti in C ++ 11 non diminuiranno l'impatto pervasivo di C # e di altri linguaggi simili, ma forse più agnostici della piattaforma, piuttosto manterranno a galla quella nave. Il principale punto di forza di C ++ 11 rimane che può essere il linguaggio end-to-end per un sistema che si aggira nelle profondità di un sistema, ma offre l'opportunità di armeggiare con astrazioni di ordine superiore.
Giustino

2

DXM ha scritto:

Quindi l'attenzione (almeno agli occhi di Microsoft) è tornata sul C ++ perché ora ci preoccupiamo della durata della batteria. Codice di livello superiore = più istruzioni = più succo richiesto.

Secondo queste parole, la scelta di Java come lingua / framework principale per Android di Google è stata un errore. Non era. Un linguaggio di livello più elevato in genere significa svolgere le attività più rapidamente e penso che questa sia la cosa più importante per Microsoft e Google. Più e migliori sono le applicazioni create per la piattaforma, maggiore è il profitto del produttore del sistema operativo.

D'altra parte c'è un sacco di software per Windows ancora scritto in C ++, quindi spingere quegli sviluppatori a passare a C # / JavaScript / qualsiasi altra cosa sarebbe folle. Microsoft si concentra sul dare la possibilità di sviluppare app Win8 a quanti più sviluppatori possibile, ecco perché secondo me hanno deciso di supportare C ++ e JavaScript nello stack di sviluppo di Win8.


5
Java è stato un errore. Se vuoi prestazioni grezze (e spesso lo fai), allora vuoi scrivere in C / C ++. Se si desidera la produttività degli sviluppatori, si desidera un linguaggio di livello superiore come Python o PHP o Ruby o JS. Java (e C #) sono sistemi di livello intermedio che non offrono né le migliori prestazioni né la migliore produttività. Allo stato attuale, il C ++ non è poi così male: puoi ottenere una buona produttività da esso una volta che sai cosa stai facendo.
gbjbaanb,

8
@gbjbaanb Ho dei sentimenti contrastanti sul tuo commento: qualche anno fa, mettere Java e C # sullo stesso livello di astrazione avrebbe avuto senso, ma l'introduzione di LINQ, espressioni lambda e funzionalità di programmazione asincrona nelle nuove versioni di .NET ha ha spostato C # a un livello superiore (Java recupererà la mancanza di programmazione funzionale in JDK8, ma è ancora in fase di accesso anticipato).
codesparkle,

2
@gbjbaanb per fortuna, WCF è solo una piccola parte di .NET, e generalizzare che applicare al linguaggio C # non è valido. Hai effettivamente utilizzato le nuove funzionalità da .NET 3? Perché VS non è affatto un ottimo ambiente di sviluppo (in realtà, è davvero fastidioso senza ReSharper). Quindi, considerando che questo stesso sito (e l'intera rete SE) è costruito con C #, il tuo commento sembra un po 'impreciso.
codesparkle del

1
@rotman Non rispondere alle risposte degli altri nella tua risposta. Le risposte dovrebbero rispondere solo alla domanda originale :)
Andres F.

6
@gbjbaanb: Direi che è stata un'affermazione senza prove che i sistemi di livello intermedio che non offrono né le migliori prestazioni né la migliore produttività siano un errore. Dato che le prestazioni e la produttività sono entrambe importanti, la soluzione migliore è quella che bilancia i due e una scelta di livello intermedio come Java o C # è una scelta eccellente per molti casi d'uso.
Carson63000,

2

Il C ++ ha ancora file Header, preprocessori flessibili (#define), ... cose del genere che alcune persone consideravano queste caratteristiche "malvagie" o "difficili da gestire".

C #, d'altra parte, usa i metadati, non è necessario scrivere e gestire i file di intestazione.

Informazioni su Microsoft che aggiungono più funzionalità a C ++: non è una questione da meravigliarsi.

Ogni compilatore C ++ aggiunge più funzionalità, incluse le funzionalità C ++ 11. gcc lo è anche.


7
Se tutto ciò che si può dire male su C ++ sono i file di intestazione bene, hai indirettamente dimostrato il punto. Posso elencare tutta una serie di gravi problemi di C #, non portabilità, non deterministico, sovraccarico di runtime, proprietario, ecc.
user805547

1
Usa lo strumento giusto per il lavoro giusto. Il C ++ è ottimo in aziende come Intel per varie prestazioni di codice non gestito che necessitavano di basso livello per i progetti medaglia, ma se hai bisogno di un sito Web / servizio Web che ogni azienda FA, allora buona fortuna con C ++ per quello!
Tom Stickel,

1

Potrei essere solo io, ma vedo un uso C molto più semplice di C ++.

Il fatto che il C ++ abbia ingoiato il C intero rende difficile dedurre chi sta usando cosa.

Ma ci sono molti più progetti open source in C rispetto al C ++.

Il mio punto di vista è se hai bisogno di avvicinarti alla velocità del metallo usa C. Se hai bisogno di flessibilità e gestibilità con prestazioni ragionevoli usa C # o Java. Se vuoi un design pulito fatto rapidamente usa Python, Scala, Groovy o uno qualsiasi dei numerosi linguaggi completi.


2
No, penso che tu abbia torto qui. Il C ++, se disabiliti le eccezioni, è simile al C quanto il C, purché tu sappia cosa stai facendo. Il problema è ABI. In C ++ la situazione deve ancora essere risolta, ci stanno lavorando. Una volta fatto questo, penso che non ci sarà molto appello all'utilizzo di C invece di C ++ quando in realtà C ++ ha un migliore controllo degli errori ed è un superset, quindi lo strumento sarebbe superiore a quel punto.
Germán Diago,

0

c ++ non sostituisce c #. Vediamo dove viene utilizzato il linguaggio c ++. Viene utilizzato quando sono necessarie prestazioni elevate, per la scrittura di librerie di middleware, accesso a basso livello e per la scrittura di codice per dispositivi con risorse limitate. Sebbene sia possibile utilizzare c # per alcuni di questi c ++ è più adatto a questi. La spinta di Microsoft per c ++ è fortemente legata alla sua grande spinta nello spazio mobile. Nessuno ti chiederà di scrivere la tua prossima web app in c ++. Ma con Qt, l'argomento della produttività non può essere fatto contro c ++. Ma penso che molte persone non abbiano familiarità con Qt.


Il C ++ è ancora ampiamente utilizzato nello sviluppo di software commerciali Windows non verticali.
bit-twiddler,

1
Il C ++ è come lo strumento più professionale che puoi usare per scrivere software. Ma devi essere bravo a scrivere un buon codice, dal momento che è abbastanza gratuito e ha alcune stranezze per la retrocompatibilità. Penso che sia adatto a tutti i tipi di software, tranne gli script, in realtà. Il problema è la curva di apprendimento. Con le biblioteche moderne è molto competente anche per la produttività. E pensa che se l'app ha successo, devi portarla. Il porting è più semplice con le codebase C / C ++, rispetto alla disponibilità del compilatore. L'elenco dei software scritti in C ++ è infinito: amazon, google, dropbox, telecom, games, facebook ...
Germán Diago

-4

No, C ++ non può sostituire C # perché tutte le app non Direct3D per Windows Phone 8 devono essere sviluppate con C #. Non è possibile sviluppare e pubblicare applicazioni su app store wp8 semplicemente usando C ++ o HTML5 / Javascript. E fintanto che Microsoft non rimuove questa limitazione, C ++ non sostituisce nulla. Di conseguenza, sono sicuro che pochissime persone svilupperanno per WP8. Povero Nokia, perdendo ancora una volta.

Ecco l'estratto del microsoft dev center :

Windows Phone 8 non supporta l'interfaccia utente XAML con il modello di app code-behind C ++ supportato per le app di Windows Store.

ancora un altro:

Questo significa che non posso usare C ++ con XAML per sviluppare un'app su Windows PHone 8, sono limitato a usare C # + XAML?

È corretto. XAML può essere utilizzato solo con C #. C ++ può essere utilizzato per un componente WinRT utilizzato dal progetto C #.

Perfino gli MVP di Microsoft affermano che questa voce è una disinformazione deliberata fatta dallo stesso Microsoft:

Adoro ciò che Microsoft sta facendo con WinRT e Windows Phone 8, ma vorrei che non ne sopravvalutassero un po 'poiché frustrerebbe gli utenti una volta appresa la verità.

E questo deliberato marketing sbagliato spreca i mesi delle persone :

Sarebbe stato bello conoscere questo MESE AGO, prima di percorrere la via del codice nativo con la mia app Metro.


1
Entrambi i tuoi collegamenti indicano che puoi usare C ++ per lo sviluppo di WP8, ed è solo XAML che richiede C #. Inoltre, Direct3D è supportato solo da C ++.
Lee,

@Vedi, puoi sviluppare un'app non Direct3D senza usare C # per WP8?
Özgür,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.