Esiste un punto per scrivere in C o C ++ anziché in C # senza sapere specificamente cosa renderebbe un programma più veloce?

4

Ho scritto una piccola libreria in Python per gestire i file STFS di xbox 360 da utilizzare sulle mie applicazioni web. Vorrei riscriverlo per l'uso in molti programmi desktop che le persone stanno scrivendo per il modding di giochi a 360, ma non lo so se dovrei continuare ad usare C # o approfondire C ++ o anche C.

STFS è un file system in-file utilizzato da xbox 360 e dal il lavoro della libreria consisterebbe nell'estrarre / iniettare file, il che potrebbe richiedere tempi notevoli. Quello che so in C # proviene da tutorial e risorse su Internet, così come qualsiasi cosa che apprendo su C ++, quindi quello che sto chiedendo è se è meglio portarmi ad un linguaggio di livello leggermente inferiore senza conoscere in anticipo le caratteristiche del linguaggio che aumentano prestazioni, o continuare a supporre che le ottimizzazioni del compilatore e che la mia mancanza di esperienza significherà che la lingua che scelgo non avrà importanza.

    
posta mowwwalker 13.06.2012 - 07:51
fonte

8 risposte

17

Il vantaggio di C # su C ++ è la velocità e lo slancio nello sviluppo (a meno che tu non sia uno dei molto pochi guru C ++, che può pretendere di fare RAD competitivo in C ++ e non farsi male in il processo, ma poi ancora buona fortuna trovare compagni di squadra che possono ragionevolmente reclamare la stessa cosa). Le ottimizzazioni del compilatore non ti aiuteranno a codificare più velocemente e con meno errori, specialmente quelli provenienti da uno sfondo di Python.

Puoi modificare le tue prestazioni se è davvero un problema, scrivendo porzioni critiche di codice in C ++ / CLI, o anche C con PInvoke, ma - se sei nel mondo Microsoft - ci sarà di solito un posto per Codice C # in alto nello stack, mentre C / C ++ potrebbe essere completamente assente in alcune soluzioni. Pertanto, forse dovresti iniziare con C # e integrare con C ++, non viceversa.

    
risposta data 13.06.2012 - 08:15
fonte
6

Per prima cosa devi considerare se le lingue con le quali stai già bene sono adatte all'attività. Se concludi che non conosci lingue che sono adatte per l'attività, allora dovresti investigare quale sarebbe il migliore da imparare.

Dalla breve descrizione che hai fornito, direi che C # è adatto allo sviluppo di desktop e all'integrazione di XBOX. Quindi, perché perdere tempo e fatica ad imparare il C ++ (con la sua curva di apprendimento ripida)? Ma se il tuo requisito è che il programma sia potenzialmente portatile, ad esempio, C # perde immediatamente punti. Quindi assicurati di definire i tuoi requisiti per te in modo corretto.

    
risposta data 13.06.2012 - 07:57
fonte
5

Se la tua app si occupa di molti handle e connessioni potresti preferire C ++ per la gestione delle risorse RAII. I garbage collector non funzionano per gli handle delle risorse condivise. Se stai usando C # o java sei costretto a de-volgere nel vecchio stile "malloc" di nuovo con chiamate di rilascio esplicite.

C ++ si occupa della gestione delle risorse in un modo più pulito ed elegante che non è possibile in altre lingue. Il C ++ è anni luce avanti a C #. E non c'è alcun segno di C # o di Java in quanto la loro migliore risposta a RAII è "usare" blocchi che non sono RAII, solo uno zucchero sintattico su un tentativo / finalmente / chiudi. Non ha il built-in fail-safe di popping fuori dallo stack. cioè devi ricordarti di provare / chiuderlo come hai sempre fatto, ma con una sintassi più gradevole.

Ho visto innumerevoli sistemi C # e java falliti perché gli sviluppatori hanno lasciato connessioni e maniglie al garbage collector ...

    
risposta data 13.06.2012 - 13:21
fonte
3

Questo suona come una forma estrema di ottimizzazione prematura per me. Non farlo Come ha detto @vski (supponendo che C #, C ++ o C) scelgano con C # e usino il C ++ in un punto del codice dove (nell'evento estremamente improbabile) potrebbe fare la differenza.

Modifica: in risposta al commento di @gbjbaanb:

Questo porta anche alla domanda: "È necessario riscrivere l'app di Python o si sta ottimizzando in modo prematuro."

    
risposta data 13.06.2012 - 08:53
fonte
2

Sceglierò prima lo strumento che renderà più facile lo sviluppo e la manutenzione (C #). Come detto, ci sono opzioni per ottimizzare in seguito se necessario (e puoi ottimizzare all'interno di C #).

    
risposta data 13.06.2012 - 12:17
fonte
2

Non è dato che il tuo codice verrà eseguito più velocemente da solo usando un linguaggio di livello inferiore come C o C ++. Python o C # dovrebbero andare bene, e con un buon codice può essere quasi veloce come il codice C o C ++. Se il tuo codice è troppo lento, puoi profilarlo per vedere quali parti ottimizzare, ma non preoccuparti di ciò quando scegli la lingua da utilizzare per l'implementazione.

Invece di cambiare lingua, probabilmente staresti molto meglio spendendo qualche sforzo per acquistare un libro per ulteriori studi su quello che già conosci o le migliori pratiche, la profilazione ecc.

Tuttavia, una cosa che potrebbe meritare di essere considerata è portabilità . Usando C o C ++ il tuo codice può essere più portabile e avere meno dipendenze dagli ambienti di runtime, ecc. Questo potrebbe essere di valore per gli altri che usano il tuo codice, poiché non devono installare un grande ambiente di runtime o lingua solo per eseguire il tuo programma. Se si presuppone che la maggior parte dei tuoi utenti avrà comunque queste parti sul posto, anche questo diventerà un punto controverso.

    
risposta data 13.06.2012 - 13:14
fonte
1

Dalla tua descrizione, sembra che il collo di bottiglia per le prestazioni qui sarà in I / O, e quando si tratta delle letture / scritture qui, nessuna lingua mostrerà alcuna differenza significativa. Quindi, se la performance del codice intermedio di modificare i dati è la tua preoccupazione per le prestazioni, potresti probabilmente modificare qualsiasi dato letto mentre continui a leggere di più in un thread separato, rendendo la scelta del linguaggio qui per le prestazioni piuttosto discutibile, IMO.

    
risposta data 13.06.2012 - 14:36
fonte
-1

Ti incoraggio a scriverlo in assembly lol. Una curva di apprendimento più ampia, ma se è la velocità che vuoi, l'assembly ben scritto può fornirlo.

Il prossimo runner up in velocità sarebbe C. Anche se tutti dicono che non è molto più veloce di C ++, non è l'unico vantaggio. C è IMO è stato scritto meglio e ha molto più potenziale per un aumento della velocità. Le classi in C ++ aggiungono un po 'di overhead e complessità non necessarie di apprendimento della lingua. Senza di loro potresti anche scrivere C e aumentare la velocità.

Anche se non ho scritto C # o visto il codice sorgente per un programma C #, so che non mi piace perché sono un ragazzo Linux. Quindi perché strongmente non consiglio C #. Sembra che sarebbe un programma utile anche per molti utenti Linux.

Python sembra una buona scelta anche se a me sembra più instabile a causa dell'elevato livello di astrazione per una funzione di livello inferiore. Permetterebbe di spostarlo avanti e indietro tra Linux Windows e Mac.

    
risposta data 21.06.2012 - 15:36
fonte

Leggi altre domande sui tag