Ar trebui să trec de la C ++ la Python? ... Sau altă limbă?

În compania pentru care lucrez, facem o mulțime de procesări de tranzacții bazate pe fișiere. Centrele de procesare convertesc fișierele între numeroase formate pentru a se potrivi numeroaselor sisteme din numeroase companii.

Procesarea implică aproape întotdeauna o etapă xml și poate include o mulțime de parsare de text, căutări de baze de date, conversie de date și validare de date.

În prezent, programele care îndeplinesc toate aceste sarcini sunt scrise în C ++ și execută destul de repede toate pe un server mediu. Investighez posibilitățile de a folosi un limbaj mai "modern" pe care noii absolvenți de programatori îl vor cunoaște mai bine. (Alocarea corectă a memoriei în C ++ pare să cauzeze probleme cu mulți programatori mai noi în aceste zile)

Pe baza informațiilor scurte furnizate, o limbă precum python va furniza funcționalitatea și performanța necesare, precum și problemele care apar în ceea ce privește alocarea memoriei (și a altor diverse coduri C ++ )?

Îmi place ideea de a nu fi nevoie să compilați programele de fiecare dată când facem o schimbare. Înțeleg că limbile interpretate probabil că nu vor atinge aceleași performanțe pe care le obținem în prezent.

Sistemele noastre sunt bazate pe Linux care restricționează și unele opțiuni.

Orice comentarii cu privire la funcționalitatea și performanța disponibile cu Python sau sugestiile de limbi alternative ar fi mult apreciate.

0
fr hi bn

12 răspunsuri

Sau ar trebui să încercați să stocați regulile de parsing pe o bază de date, în loc să le lăsați codificate în interiorul codului. Pe măsură ce Ken Downs citat pe bună dreptate, minimizați codul, maximizați datele . În acest fel, nu ar trebui să recompilați fiecare dată când se schimbă o mică regulă.

0
adăugat

Python ar elimina, probabil, cele mai multe chestii de nivel scăzut pe care le utilizați în cererea dumneavoastră. Alocarea de memorie nu ar mai fi o problemă. De asemenea, cel puțin universitatea mea pare să imbratiseze Python ca limbaj de programare, deoarece studenții nu trebuie să scrie toate acele lucruri formale pentru a începe. Singura dvs. problemă ar fi partea de performanță, deoarece Python probabil nu va fi niciodată la fel de rapidă ca un program C ++ compilat.

Vă sfătuiesc să luați câteva săptămâni pentru a cunoaște limbile de programare pe care le considerați. Aș verifica și pe Ruby. Poate jucați cu Haskell puțin?

După cum am înțeles, Python pare a fi bine echipat pentru a face față tot ceea ce vorbești. XML, căutări de baze de date, validare, parsare. Este de obicei o alegere sigură, nu doar din cauza experienței de programare ușoară și distractivă, dar dacă sunteți blocat există o comunitate minunată în jurul limbii, care sunt doar bucuroși să vă ajute.

0
adăugat

Nu-mi place să spun asta, dar dacă vrei ceva cu care dezvoltatorii tăi vor fi familiarizați, du-te cu Java. Java este limbajul pe care îl vor cunoaște cei mai recenți absolvenți. Mai trebuie să compilați, dar timpul de compilare va fi mai scurt decât C ++. Se va executa pe Linux și aproape oriunde altundeva. Are un colector de gunoi bun. E destul de repede. Și am menționat că dezvoltatorii dvs. vor cunoaște acest lucru? Nu, nu este "cool" ca Python, dar este o limbă foarte încercată și adevărată.

Sincer, mă îndoiesc că aveți mulți dezvoltatori care sosesc cu C ++, dar oricum ar fi minunat cu Python. Persoanele care utilizează Python tind să fie bine cu gestionarea manuală a memoriei. Oamenii care sunt răi cu gestionarea memoriei tind să fie rău în toate limbile.

Mi se pare îngrijorător faptul că aveți dezvoltatori care sunt atât de răi în gestionarea memoriei pe care doriți să schimbați limbile. Acesta este un semn care indică o problemă, dar nu sunt sigur că problema este cu limba.

0
adăugat
-1 pentru Java (nu prea ajută la OP), dar +1 pentru "persoanele care sunt rău cu gestionarea memoriei tind să fie prost cu toate limbile".
adăugat autor gbjbaanb, sursa

Performanța în Python poate fi o problemă foarte importantă. Odată ce am avut de a crea un program care implică algoritmul de optimizare pe lista sarcinilor. Am inceput cu Python, l-am creat super-rapid si curat, apoi am vazut ca va dura varste pentru a obtine un rezultat. Rescrierea liniei pe linie la C ++ a avut ca rezultat îmbunătățirea vitezei de peste 100x ...

Deci, uneori, nu este vorba de o pierdere de performanță de 5-10%, după cum puteți vedea. Ar trebui să investighezi în cazul tău (poate puțin test?).

0
adăugat
Mai ales pentru că Python este un limbaj de script, care cred că este mai lent prin definiție decât unul compilat. În cazul meu particular, a trebuit să calculez milioane de operații pe listele de numere întregi. Listele avansate ale lui Python sunt mult mai lente decât folosind o simplă matrice cu lungime fixă ​​în C ++ (nu aveam nevoie de niciunul dintre caracteristicile avansate ale acestor liste). Și nu în ultimul rând, în măsura în care știu C ++ (sau C) este următoarea limbă de viteză de vârf după Assembler;).
adăugat autor Episodex, sursa
Episodex: Vă rugăm să spuneți, de ce python genera rezultate "atât de recent" & De ce c + + genera rezultate "atât de devreme?".
adăugat autor cupcake, sursa
mulțumesc, dar am citit la Stackoverflow într-unul din comentariul utilizatorului că dacă Python este lent, nu vă faceți griji, deoarece timpul procesorului este mult mai ieftin decât timpul dezvoltatorului.
adăugat autor cupcake, sursa

Care este mai importantă, obținerea rapidă a programelor de lucru sau obținerea rapidă a programelor?

Dacă aveți de-a face cu un număr mare de fișiere mari, atunci este posibil să fiți mai bine să rămâneți în C ++ și să învățați programatorii absolvenți ce este un pointer (!)

În caz contrar, aș sfătui cu tărie să vă uitați la o soluție bazată pe scripting, deoarece dezvoltarea acestora, odată ce ați ajuns la viteză, este mult mai rapidă. Și mult mai distractiv, dacă suntem cinstiți, cel puțin pentru majoritatea oamenilor.

Dacă încărcarea de procesare pe înregistrare nu este ridicată, este posibil să fiți surprins de cât de puțin performanță pierdeți: fișierul IO va fi aproape sigur gestionat într-o bibliotecă compilată (C), astfel încât cheltuielile de interpretare pot fi relativ scăzute. Merită să încercați, aș sugera.

Dintre limbile imperative, Perl este o opțiune evidentă, Python este popular și ruby are un profil înalt (și probabil mai curat OO decât primele două). Apoi există tărâmul ceva mai mult, er, esoteric al limbilor funcționale, dar nu sunt calificat să comentez aceste lucruri.

0
adăugat

Dacă sunteți bine să stați cu un limbaj compilat, aș rămâne cu C ++ și vă recomand să alegeți un set bun de biblioteci și să îi învețe pe noii buni despre utilizarea corectă și respectarea modelelor solide.

Dacă reușiți să găsiți un set plăcut de biblioteci, va fi ușor pentru începători să învețe scrierea unui cod solid. Preferința mea personală (actuală) este biblioteca de clasă Qt deoarece face ca manipularea memoriei să fie ușoară și sigură și este plăcută pentru a lucra cu ea. De asemenea, oferă suport pentru parsing și generare XML, are built-in regexp, capabilități de rețea, este cross-platform, ... și este, de asemenea, foarte util pentru sistemele non-GUI.

Pentru mine, este o mare diferență între lucrul cu C ++, biblioteca std și STL și lucrul cu o bibliotecă puternică, cum ar fi Qt. Probabil, căutarea bunurilor de stimulare este, de asemenea, foarte utilă.

0
adăugat
Oh, chiar acum realizat, această întrebare este de 2 ani vechi. Nu contează.
adăugat autor Tilman Vogel, sursa

Aș sugera să încercați groovy. Suportul xml este bine și parsarea, precum și validarea datelor ar trebui să nu fie dificilă.

Cu toate acestea, unii oameni au subliniat că migrarea ar putea să nu fie cea mai strălucită idee. Nu puteți încerca să determinați chestii obișnuite în "obiecte macher" și "validarea obiectelor", astfel încât noii programatori să utilizeze biblioteca dvs. C ++ în loc să încerce să scrie codul de erori predispus la erori, care doar duplică fragmentele existente?

De asemenea, asigurați-vă că folosiți fișierul IO modern (iostreams) și nu C ca IO în C ++, care ar trebui să ajute mult la problemele de memorie.

De asemenea, căutarea bibliotecilor de stimulare ar putea fi utilă.

0
adăugat

Îmi place ideea de a nu fi nevoie să compilați programele de fiecare dată când facem o schimbare. Înțeleg că limbile interpretate probabil că nu vor atinge aceeași performanță pe care o obținem în prezent.

Aceasta este cea mai mare problemă; puteți trăi cu lovitura de performanță. Puteți încerca să utilizați Python și să îl extindeți-l cu modulele C ++ actuale pentru performanță componente grele. Totuși, comutarea întregului dvs. sistem pare a fi un efort mare dacă singurul motiv este lipsa de talent C ++. Angajarea persoanelor care cunosc C ++ pare a fi opțiunea mai ieftină.

0
adăugat
programatorii săraci tind să fie săraci în toate limbile, schimbând totul doar pentru a se potrivi numărului nu va fi o soluție. I-aș recomanda să-i învăț cum să fie mai bine în schimb, se va plăti în mod semnificativ. (și folosiți STL și un frumos xml lib - tinyXML este bun)
adăugat autor gbjbaanb, sursa
@gbjbaanb Pe de altă parte, aș prefera programatorii săraci să utilizeze Python decât C ++. Exemplu, un dezvoltator Python nu poate face globale inter-module. El nu poate avea probleme cu ordinea de inițializare a globalelor. El este forțat să proiecteze lucrurile într-un mod modular modest și este puțin mai greu să obții acele modele dezastruoase de rău în Python, care pot provoca daune în tot sistemul. Acestea fiind spuse, sunt în principal un pasionat de C ++ (verificați profilul meu), dar am văzut felul dezastruos de codare C ++ de la prima mână și cred că o limbă precum Python ar fi de fa
adăugat autor stinky472, sursa
Există mai puține moduri pentru un astfel de dezvoltator să prăbușească un program în Python. Accesarea unei variabile cu "None" ar determina o excepție, mai degrabă decât un comportament nedefinit (ex. Încălcarea accesului sau segfault). Nu există nici un fel de logică tip casting tip C-ish (tipărire/ocolire tipică), pe care dezvoltatorii C ++ nu o fac din obiceiuri proaste. Nu există, de asemenea, nici o modalitate pentru ei de a încetini sistemul de construcție prin ignorarea idioms importante ca pimpls pentru anteturile centrale. Deci, presupunând că astfel de maimuțe de cod vor avea dific
adăugat autor stinky472, sursa
[...] Mai degrabă aș avea încredere în ei cu Python decât C ++, deoarece codificarea slabă nu este la fel de dezastruoasă. Desigur, aș prefera să înțeleagă exact ceea ce fac și dacă există dezvoltatori fără loc de muncă pe acest forum, unii dintre cei mai buni utilizatori au o mare experiență în ceea ce privește conceptele generale de inginerie și utilizarea C ++.
adăugat autor stinky472, sursa

O altă alternativă este să încorporați Python în programul dvs. C ++. Puteți să păstrați o mare parte din cererea dvs. la fel, și să efectuați apeluri către Python pentru piesele care se schimbă des, sau aveți nevoie de flexibilitatea pe care o oferă o limbă de scripting.

Din Python docs

Capitolele anterioare au discutat cum să   extindeți Python, adică, cum să vă extindeți   funcționalitatea Python de către   atașând o bibliotecă de funcții C la   aceasta. Este, de asemenea, posibil să o faceți   alt mod în jur: îmbogățiți-vă C/C ++   aplicație prin încorporarea lui Python în el.   Embedding vă oferă aplicația   cu capacitatea de a implementa o parte din   funcționalitatea aplicației dvs.   în Python și nu în C sau C ++. Acest   poate fi utilizat în multe scopuri; unu   exemplu ar fi să le permită utilizatorilor   adaptează cererea la nevoile lor   scriind câteva scripturi în Python. Tu   poate, de asemenea, să-l utilizați singur, dacă unele dintre ele   funcționalitatea poate fi scrisă   Python mai ușor.

0
adăugat

ar trebui să se mute în Python care languange face toate posibile în rețea, dacă aveți nevoie mai repede trece la C/C ++

0
adăugat

dacă natura proiectului pe care îl faci îți permite chiar să contempli o astfel de mișcare, atunci să te miști (presupunând că ai un indiciu). Cu toate acestea, în multe dintre proiectele C ++, singura dvs. alegere este să mutați în jos unul sau două niveluri de abstractizare (de ex., La C sau Adunare).

0
adăugat

Sunt de acord cu ceilalți, ar trebui să rămâi cu C ++. Trecerea la o limbă necompilată este un pas înapoi. În timp ce mulți programatori ar putea avea probleme cu unele aspecte ale limbajului (cum ar fi indicii), cel puțin majoritatea programatorilor au fost expuși unor C ++. Vă recomandăm să vă petreceți timpul și banii îmbunătățind codul de bază și programatorii, mai degrabă decât schimbând limbile.

În ceea ce privește alte limbi, poate doriți să păstrați ochii pe lang GO. Un prieten de-al meu a folosit destul de mult. Este un limbaj compilat modern. Tind să fie clară, concisă și modernă. Aplicațiile GO rulează în mod obișnuit la viteze comparabile cu cele scrise în C ++ și se interfață bine cu webul. Nu este foarte matur în acest moment, dar arată foarte promițător.

Mult noroc!

0
adăugat
im sigur că sfatul dvs. este grozav, dar nu cred că este relevantă, de ce postați pe o întrebare întrebată acum 4 ani?
adăugat autor Inbar Rose, sursa
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.