Viziato da Python per convenienza e produttività, rovinato da C ++ in termini di velocità. Ora infelice sia con [chiuso]

6

Ho difficoltà a scegliere come procedere come programmatore. Ho principalmente programmato i giochi e mi piacerebbe continuare. E per circa 5 anni ho utilizzato solo C ++ e OpenGL, quindi ho dedicato molto tempo all'infrastruttura, a strani bug e soprattutto a come far funzionare le cose di base.

Un mio amico ha poi consigliato python e dopo essere stato inizialmente avversato dal fatto che non fosse così esplicito e formale come ero abituato a me sono rimasto scioccato da quanto potevo essere più produttivo e da quanto progresso potevo effettivamente fare in un piccola quantità di tempo.

Quindi attualmente sto lavorando a uno sparatutto multiplayer e più volte mi trovo a dover lottare con Python non essendo così veloce che potrei volere che fosse. So che devo affrontare la scrittura di codice efficiente in Python in modo molto diverso ora, ma anche con un piccolo aiuto da parte di amici che hanno più esperienza con Python a volte succede troppo (e estrapolandolo, so che finirò bloccato).

Ci sono molte cose che mi piacciono molto del mio C ++ "home-language", ma dopo aver saputo quante ore potrei sprecare non voglio davvero tornare indietro.

Quale lingua puoi raccomandare che offra alta produttività, sia sicura per la memoria (l'ho odiato davvero tanto) e per prestazioni elevate, ma è ancora abbastanza matura per essere usata per progetti seri (giochi- correlati) e forse anche abbastanza maturo da avere persone che hanno già trascorso un po 'di tempo su OpenGL-Bindings o varie librerie per Sound e simili (in alternativa un facile accesso alle librerie condivise scritte in C). La semplice piattaforma incrociata è un grande vantaggio! Quindi no .NET per favore. È persino possibile?

    
posta user2346786 06.05.2013 - 00:37
fonte

5 risposte

5

Direi stick con Python e utilizzare alcune delle funzionalità avanzate che fornisce. Specificamente sto parlando delle estensioni. Se guardi come funzionano le cose oggi ci sono alcune cose molto veloci in Python e quelle cose sono tutte fatte in C / C ++ come estensioni.

Puoi creare estensioni C / C ++ per velocizzare le parti lente di Python. Inoltre, una buona posizione intermedia sarebbe quella di usare Cython per ottenere degli speedup decenti.

Cython Questo fornisce un modo per modificare il codice Python per renderlo più veloce. L'idea di base qui è rendersi conto che una delle cose più lente in Python è quella di digitare uno dei più potenti. Cython ti dà la possibilità di specificare la digitazione delle variabili al fine di accelerare le cose. Ecco un ottimo esempio: Cython Example

Estensioni Il prossimo passo se Cython non accelera abbastanza è creare un'estensione C / C ++ diritta. Ciò significa che è possibile creare una funzione personalizzata che velocizzerà notevolmente le cose. Cerca le parti più intensive della CPU e implementale in C ++ mantenendo le altre abilità di Python.

La mia esperienza personale Ho creato questo strumento IO per testare l'IO asincrono in Python che era molto potente. Potrebbe fare ogni genere di cose, inclusi i controlli sull'integrità dei dati. Ciò significava che potevo scrivere i dati e successivamente verificarlo. Il mio problema era che Python mi permetteva di creare molto rapidamente questo programma, ma a causa di Python la sezione di integrità dei dati era molto lenta. Era così lento che avrebbe consumato tutta la CPU e portato il sistema a una scansione. Per risolvere questo e rendere il programma utilizzabile ho pensato di ricreare il programma in C ++. Il mio problema era che ogni volta che guardavo quello che avrei dovuto fare, il problema sembrava sbalorditivo e non ne valeva la pena. Dopo un po 'di tempo mi sono guardato intorno e ho trovato Cython. Era una buona soluzione intermedia. Ho implementato il lento codice Python in Cython e ho scoperto che ottenevo grandi miglioramenti delle prestazioni. Dopo un po 'mi sono imbattuto nel problema in cui le cose erano lente, quindi ho creato un'estensione C. Questa estensione mi ha permesso di realizzare il mio sogno.

PyPy Ho sentito, anche se non ho mai provato, che PyPy è un'implementazione molto più veloce di Python che potrebbe darti le prestazioni che desideri mentre usi ancora Python.

    
risposta data 06.05.2013 - 05:30
fonte
3

Ci sono molte opzioni da considerare una volta scoperto che i linguaggi di scripting non sono solo giocattoli.

Personalmente, suggerirei:

  • Lua: molto veloce per un interprete bytecode, molto più veloce con LuaJIT (seriamente, sfida i buoni compilatori C), facile da combinare con il codice C (incorporato in un'applicazione o esteso con i moduli C), minimalista core / librerie, very portable (pure ANSI C), ampiamente utilizzato nell'industria dei videogiochi.

  • Vai: statico digitato, compilato, nessun bytecode. Garbage collection, inferenza di tipo, threading moderno. Progettato da programmatori C ++ che desideravano qualcosa di più produttivo ma amato dai programmatori Python che non odiano la tipizzazione statica.

risposta data 06.05.2013 - 04:01
fonte
1

Delphi.

Alta produttività . È nella famiglia Pascal, che è stata progettata per essere facile da leggere e scrivere, con alcune librerie standard molto ben congegnate disponibili.

Memory safe . Non completamente (è difficile ottenerlo senza codice gestito) ma molto meglio del C ++, con un sistema di tipi più rigido, il controllo dei limiti a livello di linguaggio e un gestore di memoria di debug disponibile su SourceForge che fa rintracciare ciò che supera le prime due protezioni semplici .

Al massimo delle prestazioni che posso ottenere . Compilano codice nativo e sono stati utilizzati per creare giochi prima, compresi alcuni titoli di profilo piuttosto elevato come Age of Wonders e la serie Space Rangers .

Ancora abbastanza maturo da essere utilizzato per tipi di progetti seri (relativi ai giochi) . Delphi è stato rilasciato per la prima volta nel 1995 (lo stesso anno di Java) come aggiornamento dal già maturo prodotto Turbo Pascal e da allora ha avuto una strong community.

Abbastanza maturo da avere persone che hanno già trascorso un po 'di tempo su OpenGL-Bindings . Un'implementazione di intestazione OpenGL di base viene fornita con la libreria standard. Un'unità di intestazione GL più ampia può essere trovata come parte di Asphyre, una libreria multimediale open source per Delphi adattata allo sviluppo del gioco.

In alternativa facile accesso alle librerie condivise scritte in C . Delphi rende effettivamente più facile parlare alle DLL basate su C rispetto a C, poiché non ha bisogno di file .lib; tutto ciò di cui hai bisogno è una traduzione delle intestazioni. Inoltre, esistono traduzioni di intestazione Delphi per varie librerie multimediali, incluso il popolare framework di sviluppo del gioco SDL , a cui ho contribuito personalmente.

Il facile cross-plattform è un grande vantaggio! Delphi è ancora principalmente una piattaforma di sviluppo di Windows, ma di recente hanno rilasciato compilatori per OSX e iOS e attualmente stanno lavorando anche su un compilatore Android .

È persino possibile? Sì. Non è perfetto, ma è possibile, e funziona davvero bene.

    
risposta data 06.05.2013 - 00:58
fonte
0

Dovresti essere felice con entrambi. Usa python dove vuoi essere altamente produttivo (le tue parole) e usa C ++ dove hai bisogno di prestazioni elevate. Se hai bisogno di prestazioni ancora più elevate, usa un linguaggio più specifico (ad es. Fortran), avvolgilo e chiamalo dal tuo codice Python. Hai bisogno di un codice ancora più veloce, codice di istruzioni per l'assemblaggio. Forse non hai nemmeno bisogno di farlo, magari usare un linguaggio che supporti la concorrenza paga più dividendi.

Si tratta di utilizzare lo strumento giusto per il lavoro. Non è necessario ottimizzare tutto, solo dove conta davvero.

Se vuoi davvero conoscere solo una lingua, probabilmente ruby è la risposta. Solo perché ottieni "rastrello" per la sostituzione "fai". È possibile avere script client, server e di distribuzione in una sola lingua. Altrimenti utilizza alcune lingue.

    
risposta data 06.05.2013 - 04:24
fonte
0

Se lavori come parte di un team; chiedi ai membri del tuo team. Niente è peggio di qualche programmatore disonesto che decide di scrivere un pezzo di codice in una lingua che nessun altro conosce. È meglio che l'intero team sia d'accordo su un piccolo numero di "strumenti giusti per il lavoro" con cui tutti (o quasi tutti) hanno esperienza e che si attengono a loro. Nota: avere esperienza con una lingua è molto diverso dalla semplice conoscenza di una lingua.

Se sei solo tu (nessuna squadra, e nessuno mantiene il codice per molti anni dopo aver finito); quindi ti consiglio di utilizzare qualsiasi cosa tu sia più produttiva con (ad esempio Python) quindi, dopo aver lavorato sui pezzi e dopo aver trovato i colli di bottiglia, riscrivi i pezzi "non abbastanza veloci" in un linguaggio più veloce (ad esempio C ++). Infine, dopo che tutto è stato fatto e tutto è abbastanza veloce, pensa a ridurre al minimo le dipendenze del tuo software (ad esempio, considera la sostituzione di qualsiasi / tutto il codice che è ancora in Python in modo che i tuoi poveri utenti finali che difficilmente avranno installato Python non finiranno con inutili fastidi).

    
risposta data 06.05.2013 - 05:29
fonte

Leggi altre domande sui tag