Perché il C ++ è ancora preferito per costruire pesanti app GUI sulle ultime lingue dinamiche? [chiuso]

44

Vedo che la maggior parte delle app che includono un pesante contenuto della GUI sono generalmente sviluppate in C ++. La maggior parte dei giochi / browser sono codificati in C ++.

Non possiamo semplicemente sviluppare migliori applicazioni GUI con le ultime lingue dinamiche? So che java non sarebbe una grande scelta. Ma che dire di linguaggi come Python che sono nativamente costruiti su C? Le lingue più recenti non dovrebbero essere migliori dei loro antenati? Perché dobbiamo ancora preferire il vecchio C ++ alle ultime lingue?

E mi piacerebbe anche sapere, cos'è che è responsabile in C ++, per la migliore velocità di elaborazione della GUI? D'altra parte, che cosa mancano le altre ultime lingue?

    
posta Vamsi Emani 31.05.2011 - 07:59
fonte

13 risposte

51

Sono una di quelle persone che scrivono app per GUI C ++ (principalmente per Windows). Con Qt, per essere precisi. Le mie ragioni:

  • Mi piace il C ++. Sono un libero professionista e di solito posso scegliere i miei strumenti (fortunato me!)
  • In un ambiente gestito potresti avere difficoltà quando devi usare un codice non gestito (dichiarazioni WinAPI prolisse in C #, chiunque?)
  • Meno dipendenze distribuite più facilmente
  • Più controllo su tutto.
  • RAII (vs GC). E anche se alloco con new , raramente mai delete qualcosa esplicitamente, perché uso i puntatori intelligenti o la gerarchia QObject .
  • C ++ è molto eccitante in questi giorni, non vedo l'ora che un compilatore supporti completamente il nuovo standard.
  • Velocità (solo alla fine della lista, so che non è così importante per la GUI stessa, ma tende ad essere più veloce perché i programmi C ++ non soffrono del sovraccarico che i runtime, codice byte JIT-compiling e tecnologie simili si aggiungono al programma.)

Come puoi vedere, queste sono principalmente preferenze personali. Trovo importante che il mio lavoro sia piacevole e C ++ me lo fornisce.

    
risposta data 31.05.2011 - 10:07
fonte
31

Perché la velocità è importante.

  • Giochi usa C ++ per le attività principali, dove le prestazioni sono importanti. Utilizzano linguaggi dinamici per attività di scripting in cui la flessibilità è importante.

  • App della GUI per desktop : Visual Studio, ad esempio, è scritto in .NET e non in C ++ nativo. Sembra funzionare piuttosto bene per un IDE, in quanto l'IDE non ha bisogno di svolgere molte attività intense. (Il compilatore, il linker e altri strumenti non sono necessariamente scritti in .NET, anche se come wawa indica in un commento, alcuni sembrano essere (ad esempio VB.NET))

  • I browser devono essere anche veloci. Dopotutto sono una sorta di SO secondario. D'altra parte, si può sostenere che molte parti di Firefox sono in realtà "scritte in" javascript, poiché il framework Mozilla sembra dipendere pesantemente da javascript.

Per riassumere: non direi che C ++ è necessariamente preferito ma se hai un collo di bottiglia nelle prestazioni devi andare più vicino al metallo e poi incontrare C ++ (beh, o C). A volte sarà più semplice fare tutto in C ++ - una sola lingua.

    
risposta data 31.05.2011 - 10:07
fonte
15

Le app della GUI che vedi scritte in C ++ sono generalmente fatte in modo dovuto a motivi legacy. Python (con Qt o Gtk) è molto valido per le applicazioni GUI, così come C # se lavori in una casa Windows. Quando si inizia qualcosa di nuovo, è molto molto preferito a C ++ a causa della mancanza di lavori idraulici che devono essere fatti.

    
risposta data 31.05.2011 - 08:12
fonte
14

Perché non importa quanti test di prestazioni dimostrano .NET e simili, indipendentemente da quanto siano vicini ai benchmark, alla fine l'app C ++ è in primo piano. È più veloce all'avvio a freddo, è più veloce e ha più possibilità di essere migliorato.

Ho sentito numerose prove durante le fasi di avvio del progetto che .NET è la strada da percorrere, ma una volta scelto, hanno sempre finito per essere un pesante cludge.

Inoltre, C ++ al giorno d'oggi è abbastanza sicuro e abbastanza facile da usare, specialmente con framework come Qt o WTL.

    
risposta data 01.06.2011 - 02:28
fonte
10

La maggior parte dei motori del gioco sono codificati in C ++. Anche molti browser motori sono codificati in C ++. Ma la GUI del browser è spesso codificata usando uno script leggero (JavaScript, Python). Con notevole eccezione di Source Engine, la maggior parte dei motori di gioco utilizza anche linguaggi di scripting (come Lua o Python). [per riferimento: elenco di giochi con script Lua ]

Prendi anche la famosa libreria C ++ come Qt. Nella versione corrente (4.7) usa QML per la GUI. QML è fondamentalmente JavaScript con collegamenti Qt.

Quindi non esistono linguaggi dinamici C ++ vs , è misto.

    
risposta data 31.05.2011 - 10:56
fonte
6

La prima ragione sarà: (vecchia) abitudine

Seconda ragione: minore affidabilità su macchine virtuali, interpreti che devono essere installati, ecc.

E ci sono ancora alcuni IDE eccellenti per sviluppare codice in C ++.

    
risposta data 31.05.2011 - 08:40
fonte
6

Il motivo è che hai molto più controllo su tutto ciò che accade. Se aveste intenzione di scrivere photoshop in C #, avreste seri problemi di prestazioni per alcune attività. In un linguaggio di livello inferiore con più controllo, puoi prendere scorciatoie, ottimizzare dove necessario per le cose che sono più intense. Ovviamente ciò presuppone che si stia utilizzando C ++ nel codice non gestito, non in C ++ in .NET.

Vedi qui per un rapido esempio.

    
risposta data 31.05.2011 - 09:31
fonte
5

C ++ è tipizzato staticamente. Ciò consente di ottimizzare l'esecuzione del codice in anticipo facendo in modo che un compilatore adatti le proprie astrazioni al processo di sistema disponibile su una determinata piattaforma. Fino ad ora, le lingue dinamiche hanno bisogno di un ulteriore strato software (= l'interprete) che rallenta l'accesso alle risorse di sistema.

    
risposta data 31.05.2011 - 16:51
fonte
4

La maggior parte dei motivi indicati sono tecnici o "sopra il tavolo" ... qui ci sono motivi di lavoro o "sotto il tavolo":

distribuzione del codice compilato v.s. distribuzione del codice sorgente. quando si sviluppa in c / c ++ si distribuiscono i binari. se stai sviluppando in una delle lingue moderne, ne distribuisci la fonte. è difficile vendere l'idea di offuscatori alla dirigenza che devono rispondere agli azionisti / investitori quindi non preoccuparti.

utenti stupidi: almeno nelle menti della direzione. continuano a percepire che i loro utenti riescono a malapena a fare doppio clic su "setup.exe". Se includi l'installazione di un interprete come parte del setup, scuoteranno la testa da un lato all'altro.

vecchi sviluppatori: la maggior parte delle persone con esperienza esiste da molto tempo e non si è tenuta aggiornata. programmano in C ++ e non nelle lingue più recenti, perché non conoscono le lingue più recenti.

    
risposta data 31.05.2011 - 13:55
fonte
4

Estenderei l'ambito del problema dalla GUI al software che dovrebbe essere competitivo. C ++ non impone alcuna tassa sulla piattaforma di destinazione in quanto riguarda potenza di elaborazione, runtime installato, framework ecc. Quindi funzionerà su hardware del cliente più limitato rispetto a una soluzione simile scritta in un linguaggio gestito / interpretato. Nel caso di un software commerciale di successo, il costo di sviluppo (potenzialmente più elevato nel caso di C ++) è ammortizzato dal numero di vendite.

Inoltre, il C ++ di solito offre accesso diretto alle apis di sistema (come la GUI) che offre la migliore opportunità per ottimizzare l'utilizzo e differenziarsi da soluzioni simili.

    
risposta data 31.05.2011 - 14:04
fonte
3

Penso che molto abbia a che fare con le API per i toolkit della GUI. Tutti hanno un'API C / C ++, ma non tutti hanno (per esempio) collegamenti Python. E a volte gli stessi toolkit sono stati scritti pensando a C ++, quindi anche se hanno il supporto per altri linguaggi non li supportano pienamente (per esempio, non supporteranno un Python tuple come un argomento).

    
risposta data 31.05.2011 - 16:53
fonte
2

Stai citando browser e giochi come esempi. Entrambe queste sono applicazioni critiche per le prestazioni, quindi avere un linguaggio di basso livello per la velocità ha senso.

Molte altre applicazioni sono meno vincolate alle prestazioni e potrebbero essere facilmente scritte in altre lingue. C # in particolare sembra essere usato molto. (E Obj-C, ma in realtà non si qualifica come di alto livello, meglio di C ++.)

Tuttavia, esiste una certa mancanza di framework per gli ultimi linguaggi di programmazione. Ad esempio, non esiste realmente una libreria GUI nativa valida per Python. Certo, puoi usare PyQt o PyGtk e funzionano bene, ma alla fine si tratta solo dell'interfacciamento con il codice C. Ancora una volta, C # (e probabilmente Obj-C) sembra essere l'eccezione e forse, MacRuby o IronPython potrebbero cambiare quel gioco.

    
risposta data 31.05.2011 - 10:11
fonte
0

Affinché una lingua sostituisca C ++ o Java, deve fare ciò che manca in queste lingue oltre a eseguirle con le proprie forze. Inoltre, enormi investimenti sono andati in queste lingue. Ciò significa che esiste una libreria C ++ standard su molte piattaforme, che i browser, i giochi e tali programmi possono facilmente utilizzare. Quindi è inevitabile che ci sia un'inerzia. Le lingue tendono a decollare lentamente a differenza di altri software.

Se lo guardi, Anaconda (il programma di installazione di RedHat) è in circolazione da circa 10 anni, scritto in Python dall'inizio. Python non era così popolare quando Anaconda era nuovo.

Google's Go (golang.org) si sta evolvendo molto velocemente. Il compilatore deve ancora essere riavviato. Per la sua popolarità a decollare, la sua biblioteca deve stabilizzarsi, il compilatore deve essere riavviato e più persone devono usarlo. Ho sentito che un programma di produzione esterno a Google è scritto in Go e si dice che non abbia mai avuto un tempo libero nella sua vita di poco più di un anno.

    
risposta data 31.05.2011 - 22:46
fonte

Leggi altre domande sui tag