Vra

In die maatskappy waarvoor ek werk, doen ons baie lêergebaseerde transaksieverwerking.Die verwerking sentreer rondom die omskakeling van lêers tussen talle formate om by talle stelsels in talle maatskappye te pas.

Die verwerking behels byna altyd 'n XML stadium en kan baie teksontleding, databasisopsoeke, dataomskakeling en datavalidering insluit.

Tans is die programme wat al hierdie take uitvoer, ingeskryf C++ en hulle presteer redelik vinnig alles op een gemiddelde bediener.Ek ondersoek die moontlikhede om 'n meer "moderne" taal te gebruik waarmee nuwer gegradueerde programmeerders meer geneig is om bekend te wees.(Korrekte geheuetoewysing in C++ Dit lyk asof dit deesdae probleme met baie nuwer programmeerders veroorsaak)

Gebaseer op die kort inligting wat verskaf is, sal 'n taal soos luislang die vereiste funksionaliteit en werkverrigting verskaf, sowel as die geheue-toekenning aanspreek (en verskeie ander C++ verwante) probleme wat ontstaan?

Ek hou van die idee dat dit nie nodig is om die programme saam te stel elke keer as ons 'n verandering maak nie.Ek verstaan ​​dat die geïnterpreteerde tale waarskynlik nie dieselfde prestasie sal tref wat ons tans kry nie.

Ons stelsels is Linux gebaseer wat ook sommige opsies beperk.

Enige kommentaar oor die funksionaliteit en werkverrigting beskikbaar met Python of voorstelle van alternatiewe tale sal baie waardeer word.

Was dit nuttig?

Oplossing

Ek hou van die idee dat dit nie nodig is om die programme saam te stel elke keer as ons 'n verandering maak nie.Ek verstaan ​​dat die geïnterpreteerde tale waarskynlik nie dieselfde prestasie sal tref wat ons tans kry nie.

Dit is die grootste kwessie;kan jy saamleef met die prestasietreffer.Jy kan probeer om Python en brei dit uit met jou huidige C++-modules vir die prestasie swaar dele.Tog, om jou hele stelsel om te skakel lyk na 'n groot poging as die enigste rede is die gebrek aan C ++ talent.Om mense te huur wat C++ ken, lyk na die goedkoper opsie.

Ander wenke

Wat is belangriker, om die programme vinnig te laat werk, of om die programme vinnig te laat werk?

As jy met groot getalle groot lêers te doen het, is dit dalk beter dat jy in C++ bly en jou gegradueerde programmeerders leer wat 'n wyser is (!)

Andersins sal ek sterk aanbeveel dat jy na 'n script-gebaseerde oplossing kyk, want ontwikkeling in hierdie, sodra jy op hoogte is, is soveel vinniger.En baie meer pret, as ons eerlik is, ten minste vir die meeste mense.

As die verwerkingslading per rekord nie hoog is nie, sal jy dalk verbaas wees hoe min prestasie jy verloor:lêer IO sal byna seker in 'n saamgestelde (C) biblioteek hanteer word, dus kan die tolkbokoste relatief laag wees.Die moeite werd om te probeer, stel ek voor.

Van die noodsaaklike tale is Perl 'n ooglopende opsie, Python is gewild en Ruby het 'n hoë profiel (en waarskynlik skoner OO-kenmerke as die eerste twee).Dan is daar die effens meer, eh, esoteriese gebied van die funksionele tale, maar ek is nie bevoeg om daarop kommentaar te lewer nie.

Python sal waarskynlik die meeste van die lae vlak goed wat jy in jou toepassing gebruik, verwyder.Geheuetoewysing sou nie meer 'n probleem wees nie.Ten minste lyk dit of my universiteit Python as 'n programmeertaal omhels, want studente hoef nie al daardie formele goed te skryf om te begin nie.Jou enigste probleem sou die prestasiedeel wees, aangesien Python waarskynlik nooit so vinnig soos 'n saamgestelde C++-program sal wees nie.

Ek sal jou aanraai om 'n paar weke te neem om die programmeertale te leer ken wat jy oorweeg.Ek sal ook na Ruby kyk.Speel jy dalk bietjie met Haskell?

Soos ek dit verstaan, lyk Python goed toegerus vir die hantering van alles waarvan jy praat.XML, databasisopsoeke, validering, ontleding.Dit is gewoonlik 'n veilige keuse, nie net as gevolg van die maklike en prettige programmeringservaring nie, maar as jy vashaak, is daar 'n wonderlike gemeenskap rondom die taal wat net graag help.

Nog 'n alternatief is om Python in jou C++-program in te sluit.Jy kan baie van jou toepassing dieselfde hou, en oproepe na Python maak vir die stukke wat gereeld verander, of wat die buigsaamheid benodig wat 'n skriftaal bied.

Van die Python-dokumente

Die vorige hoofstukke het bespreek hoe om Python uit te brei, dit wil sê hoe om die funksionaliteit van python uit te brei deur 'n biblioteek met C -funksies daaraan te heg.Dit is ook moontlik om dit andersom te doen:Verryk u C/C ++ -toepassing deur python in te sluit.Inbedding bied u aansoek die vermoë om die funksionaliteit van u toepassing in Python eerder as C of C ++ te implementeer.Dit kan vir baie doeleindes gebruik word;Een voorbeeld is om gebruikers in staat te stel om die toepassing by hul behoeftes aan te pas deur 'n paar skrifte in Python te skryf.U kan dit ook self gebruik as sommige van die funksies makliker in Python geskryf kan word.

Ek haat dit om dit te sê, maar as jy iets wil hê waarmee jou inkomende ontwikkelaars vertroud gaan wees, gaan met Java.Java is die taal waarmee die meeste onlangse gegradueerdes die meeste vertroud sal wees.Jy moet nog saamstel, maar saamsteltye sal korter wees as C++.Dit sal op Linux werk en byna enige ander plek.Dit het 'n goeie vullisverwyderaar.Dit is redelik vinnig.En het ek genoem dat u ontwikkelaars daarmee vertroud sal wees?Nee, dit is nie "cool" soos Python nie, maar dit is 'n baie beproefde taal.

Eerlik, ek twyfel of jy baie inkomende ontwikkelaars het wat suig met C++, maar in elk geval wonderlik sal wees met Python.Die mense wat Python goed gebruik, is geneig om goed te gaan met handgeheuebestuur.Die mense wat sleg is met geheuebestuur is eintlik geneig om sleg te wees met alle tale.

Ek vind dit wel kommerwekkend dat jy ontwikkelaars het wat so sleg is met geheuebestuur dat jy van taal wil verander.Dit is 'n teken wat 'n probleem aandui, maar ek is nie seker dat die probleem by die taal is nie.

As jy goed gaan met 'n saamgestelde taal, sal ek by C++ bly en voorstel dat jy 'n goeie stel biblioteke kies en beginners leer oor die korrekte gebruik en nakoming van soliede patrone.

As jy daarin slaag om 'n aangename stel biblioteke te vind, sal dit maklik wees vir beginners om te leer om soliede kode te skryf.My (huidige) persoonlike voorkeur is die Qt-klasbiblioteek omdat dit geheuehantering maklik en veilig maak en aangenaam is om mee te werk.Dit bevat ook ondersteuning vir XML-ontleding en generering, het ingeboude regexp, netwerkvermoëns, is kruisplatform, ...en is ook baie nuttig vir nie-GUI-stelsels.

Vir my is dit 'n groot verskil tussen werk met gewone C++, std-biblioteek en STL en om met 'n kragtige biblioteek soos Qt te werk.Dit is waarskynlik ook baie die moeite werd om na hupstootgoedjies te kyk.

Ek sal voorstel om groovy te probeer.Die XML-ondersteuning is goed en ontleding sowel as datavalidering behoort nie te moeilik te wees nie.

Sommige mense het egter daarop gewys dat migreer dalk nie die slimste idee is nie.Kan jy nie probeer om algemene goed in "macher-voorwerpe" en "validerende voorwerpe" te faktoriseer sodat nuwe programmeerders jou C++-biblioteek gebruik in plaas daarvan om te probeer om foutgevoelige nuwe kode te skryf wat net bestaande fragmente dupliseer nie?

Maak ook seker om moderne lêer IO (iostreams) te gebruik en nie C soos IO in C++ nie, wat baie met geheueprobleme behoort te help.

Dit kan ook nuttig wees om na die hupstootbiblioteke te kyk.

Prestasie in Python kan 'n baie groot probleem wees.Een keer moes ek 'n program skep wat optimaliseringsalgoritme op die lys take behels.Ek het met Python begin, dit supervinnig en skoon geskep, en toe gesien dit sal eeue neem om 'n resultaat te lewer.Om dit reël vir reël na C++ te herskryf, het tot oor gelei 100x spoed verbetering...

So soms is dit nie 'n kwessie van 5-10% prestasieverlies soos jy kan sien nie.Jy moet dit in jou geval ondersoek (dalk bietjie toets?).

Of jy moet probeer om jou ontledingreëls op 'n databasis te stoor in plaas daarvan om dit hard-gekodeer in jou kode te laat.Soos Ken Downs tereg aangehaal, verminder kode, maksimeer data.Op hierdie manier hoef u nie elke keer te hersaamstel wanneer 'n klein reël verander nie.

As jy kan wegkom met die gebruik van Python, Ruby, Groovy of Perl vs.C++ sal jy beter wees om met een van hierdie hoërvlaktale te gaan.Produktiwiteit sal baie toeneem.As jy vind dat jy meer werkverrigting nodig het, gaan dan met Java.Almal moet ten minste een dinamies getikte taal ken en gebruik.

moet skuif na python daardie taal maak alles moontlik in netwerke, as jy vinniger moet skuif na c/c++

as die aard van die projek wat jy doen jou toelaat om selfs so 'n skuif te oorweeg, beweeg dan (met die veronderstelling dat jy 'n idee het).In baie C++-projekte is jou enigste keuse egter beweeg af een of twee abstraksievlakke (bv. na C of Assembly).

Ek stem saam met ander, jy moet by C++ bly.Om oor te skakel na 'n nie-saamgestelde taal is 'n stap terug.Terwyl baie programmeerders dalk probleme ondervind om sommige van die lastige aspekte van die taal (soos wysers) te hanteer, is ten minste die meeste programmeerders aan sommige C++ blootgestel.Ek beveel aan dat jy jou tyd en geld spandeer om jou kodebasis en programmeerders te verbeter eerder as om taal te verander.

Wat ander tale betref, wil jy dalk jou oog op GO lang hou.'n Vriend van my het dit redelik baie gebruik.Dit is 'n moderne saamgestelde taal.Dit is geneig om duidelik, bondig en modern te wees.GO-toepassings loop gewoonlik teen spoed wat vergelykbaar is met dié wat in C++ geskryf is en dit koppel goed met die web.Dit is nie baie volwasse op hierdie stadium nie, maar dit lyk belowend.

Sterkte!

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top