Domanda

Nell'azienda per cui lavoro, eseguiamo molte elaborazioni di transazioni basate su file.L'elaborazione è incentrata sulla conversione di file tra numerosi formati per adattarsi a numerosi sistemi in numerose aziende.

La lavorazione prevede quasi sempre un XML fase e può includere molte analisi del testo, ricerche nel database, conversione e convalida dei dati.

Attualmente i programmi che eseguono tutte queste attività sono scritti in C++ e funzionano abbastanza rapidamente su un server medio.Sto studiando la possibilità di utilizzare un linguaggio più "moderno" con cui i programmatori neolaureati hanno maggiori probabilità di avere familiarità.(Corretta allocazione della memoria in C++ sembra causare problemi con molti nuovi programmatori al giorno d'oggi)

Sulla base delle brevi informazioni fornite, un linguaggio come Python fornirebbe le funzionalità e le prestazioni richieste, oltre a gestire l'allocazione della memoria (e vari altri C++ correlati) problemi che si presentano?

Mi piace l'idea di non dover compilare i programmi ogni volta che si apporta una modifica.Capisco che le lingue interpretate probabilmente non raggiungeranno le stesse prestazioni che otteniamo attualmente.

I nostri sistemi lo sono Linux base che limitano anche alcune opzioni.

Eventuali commenti sulle funzionalità e sulle prestazioni disponibili con Python o suggerimenti di lingue alternative sarebbero molto apprezzati.

È stato utile?

Soluzione

Mi piace l'idea di non dover compilare i programmi ogni volta che si apporta una modifica.Capisco che le lingue interpretate probabilmente non raggiungeranno le stesse prestazioni che otteniamo attualmente.

Questo è il problema più grande;puoi convivere con il successo delle prestazioni.Potresti provare a usare Python e estendendolo con i tuoi attuali moduli C++ per le parti pesanti ad alte prestazioni.Tuttavia, cambiare l'intero sistema sembra un grande sforzo se l'unica ragione è la mancanza di talento C++.Assumere persone che conoscano C++ sembra l'opzione più economica.

Altri suggerimenti

Cos'è più importante, far funzionare rapidamente i programmi o far funzionare rapidamente i programmi?

Se hai a che fare con un gran numero di file di grandi dimensioni, potrebbe essere meglio restare in C++ e insegnare ai tuoi programmatori laureati cos'è un puntatore (!)

Altrimenti ti consiglio vivamente di considerare una soluzione basata su script, perché lo sviluppo in questi, una volta che sei al passo con i tempi, è molto più veloce.E molto più divertente, se siamo onesti, almeno per la maggior parte delle persone.

Se il carico di elaborazione per record non è elevato, potresti rimanere sorpreso dalla piccola perdita di prestazioni:l'IO del file verrà quasi certamente gestito in una libreria compilata (C), quindi il sovraccarico dell'interprete potrebbe essere relativamente basso.Vale la pena provare, suggerirei.

Tra i linguaggi imperativi, Perl è un'opzione ovvia, Python è popolare e Ruby ha un profilo elevato (e probabilmente funzionalità OO più pulite rispetto ai primi due).Poi c'è il regno leggermente più, ehm, esoterico dei linguaggi funzionali, ma non sono qualificato per commentarli.

Python probabilmente rimuoverebbe la maggior parte delle cose di basso livello che usi nella tua applicazione.L'allocazione della memoria non sarebbe più un problema.Inoltre, almeno la mia università sembra abbracciare Python come linguaggio di programmazione perché gli studenti non devono scrivere tutta quella roba formale per iniziare.Il tuo unico problema sarebbe la parte prestazionale, poiché Python probabilmente non sarà mai veloce come un programma C++ compilato.

Ti consiglierei di prenderti un paio di settimane per conoscere i linguaggi di programmazione che stai considerando.Darei un'occhiata anche a Ruby.Magari giocare un po' con Haskell?

A quanto ho capito, Python sembra ben attrezzato per gestire tutto ciò di cui stai parlando.XML, ricerche nel database, convalida, analisi.Di solito è una scelta sicura, non solo per l'esperienza di programmazione facile e divertente, ma se sei bloccato c'è una fantastica comunità intorno al linguaggio che è semplicemente felice di aiutarti.

Un'altra alternativa è incorporare Python nel tuo programma C++.Potresti mantenere gran parte della tua applicazione invariata ed effettuare chiamate a Python per le parti che cambiano spesso o avere bisogno della flessibilità fornita da un linguaggio di scripting.

Dal Documenti Python

I capitoli precedenti hanno discusso di come estendere Python, cioè come estendere la funzionalità di Python attaccando una libreria di funzioni C ad essa.È anche possibile farlo al contrario:Arricchisci la tua applicazione C/C ++ incorporando Python in essa.L'incorporamento fornisce all'applicazione la possibilità di implementare alcune delle funzionalità dell'applicazione in Python anziché C o C ++.Questo può essere usato per molti scopi;Un esempio sarebbe quello di consentire agli utenti di adattare l'applicazione alle loro esigenze scrivendo alcuni script in Python.Puoi anche usarlo da solo se alcune funzionalità possono essere scritte in Python più facilmente.

Odio dirlo, ma se vuoi qualcosa con cui i tuoi sviluppatori in arrivo avranno familiarità, scegli Java.Java è il linguaggio con cui avranno maggiore familiarità i neolaureati.Devi ancora compilare, ma i tempi di compilazione saranno più brevi rispetto al C++.Funzionerà su Linux e praticamente ovunque.Ha un buon netturbino.È abbastanza veloce.E ho già detto che i tuoi sviluppatori ne avranno familiarità?No, non è "figo" come Python, ma è un linguaggio molto collaudato.

Onestamente, dubito che tu abbia molti sviluppatori in arrivo che fanno schifo con C++ ma sarebbero comunque fantastici con Python.Le persone che usano bene Python tendono ad essere a proprio agio con la gestione manuale della memoria.Le persone che non sono brave con la gestione della memoria in realtà tendono ad essere pessime con tutte le lingue.

Trovo preoccupante che tu abbia sviluppatori così pessimi con la gestione della memoria da voler cambiare lingua.Questo è un segnale che indica un problema, ma non sono sicuro che il problema riguardi la lingua.

Se ti va bene restare con un linguaggio compilato, resterei con C++ e suggerirei di scegliere un buon set di librerie e insegnare ai neofiti l'uso corretto e l'aderenza a modelli solidi.

Se riesci a trovare un insieme piacevole di librerie, sarà facile per i principianti imparare a scrivere codice solido.La mia (attuale) preferenza personale è la libreria di classi Qt perché rende la gestione della memoria facile e sicura ed è piacevole lavorarci.Dispone inoltre del supporto per l'analisi e la generazione di XML, ha funzionalità di rete integrate di regexp, è multipiattaforma, ...ed è molto utile anche per i sistemi non GUI.

Per me, c'è un'enorme differenza tra lavorare con il semplice C++, libreria std e STL e lavorare con una libreria potente come Qt.Probabilmente, anche esaminare le chicche di potenziamento è molto utile.

Suggerirei di provare Groovy.Il supporto XML va bene e l'analisi e la convalida dei dati non dovrebbero essere troppo difficili.

Tuttavia alcune persone hanno sottolineato che la migrazione potrebbe non essere l’idea più brillante.Non puoi provare a scomporre cose comuni in "oggetti macher" e "oggetti di convalida" in modo che i nuovi programmatori utilizzino la tua libreria C++ invece di provare a scrivere nuovo codice soggetto a errori che duplica solo frammenti esistenti?

Assicurati inoltre di utilizzare file IO moderni (iostreams) e non C come IO in C++, che dovrebbe aiutare molto con i problemi di memoria.

Potrebbe essere utile anche consultare le librerie boost.

Le prestazioni in Python possono essere un grosso problema.Una volta ho dovuto creare un programma che coinvolgesse l'algoritmo di ottimizzazione nell'elenco delle attività.Ho iniziato con Python, l'ho creato in modo super veloce e pulito, poi ho visto che ci sarebbero voluti anni per fornire un risultato.Riscrivendolo riga per riga in C++ il risultato è stato over 100x miglioramento della velocità...

Quindi a volte non si tratta di una perdita di prestazioni del 5-10%, come puoi vedere.Dovresti indagarlo nel tuo caso (forse un piccolo test?).

Oppure dovresti provare a memorizzare le tue regole di analisi su un database invece di lasciarle codificate all'interno del tuo codice.COME Ken Downs giustamente citato, minimizzare il codice, massimizzare i dati.In questo modo non avresti bisogno di ricompilare ogni volta che cambia una piccola regola.

Se riesci a farla franca usando Python, Ruby, Groovy o Perl vs.C++ sarebbe meglio scegliere uno di questi linguaggi di livello superiore.La produttività aumenterà notevolmente.Se ritieni di aver bisogno di maggiori prestazioni, scegli Java.Tutti dovrebbero conoscere e utilizzare almeno un linguaggio tipizzato dinamicamente.

dovresti passare a Python quel linguaggio rende tutto possibile in rete, se hai bisogno di passare più velocemente a c/c++

se la natura del progetto che stai realizzando ti consente anche solo di contemplare una mossa del genere, allora muoviti (supponendo che tu abbia qualche indizio).In molti progetti C++, tuttavia, l'unica scelta è spostarsi giù uno o due livelli di astrazione (ad esempio, in C o Assembly).

Sono d'accordo con gli altri, dovresti restare con C++.Passare a un linguaggio non compilato è un passo indietro.Sebbene molti programmatori possano avere difficoltà a gestire alcuni degli aspetti problematici del linguaggio (come i puntatori), almeno la maggior parte dei programmatori è stata esposta a un po' di C++.Ti consiglio di spendere tempo e denaro per migliorare la base di codice e i programmatori piuttosto che cambiare lingua.

Per quanto riguarda le altre lingue, potresti voler tenere d'occhio GO lang.Un mio amico lo ha utilizzato abbastanza ampiamente.È un linguaggio compilato moderno.Tende ad essere chiaro, conciso e moderno.Le applicazioni GO in genere funzionano a velocità paragonabili a quelle scritte in C++ e si interfacciano bene con il web.Non è molto maturo a questo punto ma sembra promettente.

Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top