
Στην εταιρεία Δουλεύω για, κάνουμε πολλή επεξεργασία των συναλλαγών που βασίζονται σε αρχεία. Τα κέντρα επεξεργασίας γύρω από τη μετατροπή των αρχείων μεταξύ πολλών μορφών που ταιριάζουν σε πολλά συστήματα σε πολλές εταιρείες.


Η επεξεργασία περιλαμβάνει σχεδόν πάντα ένα `XML`στάδιο και μπορεί να περιλαμβάνει πολλά ανάλυσης κειμένου, αναζητήσεις βάσεων δεδομένων, τη μετατροπή των δεδομένων και την επικύρωση των δεδομένων.


Επί του παρόντος, τα προγράμματα που εκτελεί όλα τα καθήκοντα αυτά γραμμένα σε `C++`και εκτελεί πολύ γρήγορα όλα σε ένα μέσο όρο server. Είμαι διερευνά τις δυνατότητες χρησιμοποιώντας μια πιο «μοντέρνο» γλώσσα που νεότερα απόφοιτος προγραμματιστές έχουν περισσότερες πιθανότητες να είναι εξοικειωμένοι με. (Σωστή κατανομή μνήμης στη `C++`φαίνεται να προκαλεί προβλήματα με πολλές νεότερες προγραμματιστές αυτές τις μέρες)


Με βάση τις σύντομες πληροφορίες που παρέχονται, θα μια γλώσσα όπως η Python παρέχει την απαιτούμενη λειτουργικότητα και απόδοση, καθώς και την αντιμετώπιση της εκχώρησης μνήμης (και διάφορα άλλα `C++`συναφή) προβλήματα που προκύπτουν;


Μου αρέσει η ιδέα ότι δεν χρειάζεται για την κατάρτιση των προγραμμάτων κάθε φορά που κάνετε μια αλλαγή. Καταλαβαίνω ότι οι ερμηνεύεται γλώσσες πιθανότατα συνηθισμένος χτυπήσει την ίδια απόδοση αυτή τη στιγμή να πάρει.


Τα συστήματά μας `Linux`με βάση τα οποία περιορίζουν επίσης κάποιες επιλογές.


Τυχόν παρατηρήσεις σχετικά με τη λειτουργικότητα και την απόδοση διαθέσιμα με `Python`ή προτάσεις εναλλακτικών γλωσσών θα ήταν πολύ ευπρόσδεκτη.

 
Θα πρέπει να περάσουμε από C ++ σε Python; ... Ή μια άλλη γλώσσα;
=================================================================




> 
> Μου αρέσει η ιδέα ότι δεν χρειάζεται για την κατάρτιση των προγραμμάτων κάθε φορά που κάνετε μια αλλαγή. Καταλαβαίνω ότι οι ερμηνεύεται γλώσσες πιθανότατα συνηθισμένος χτυπήσει την ίδια απόδοση αυτή τη στιγμή να πάρει.
> 
> 
> 


Αυτό είναι το μεγαλύτερο πρόβλημα? μπορεί να ζείτε με το χτύπημα απόδοση. Θα μπορούσατε να δοκιμάσετε να χρησιμοποιήσετε την Python και την [επέκτασή του με την τρέχουσα C ++ σας modules](http://www.python.org/doc/ext/intro.html) για τα βαρέα τμήματα των επιδόσεων. Παρόλα αυτά, η αλλαγή ολόκληρου του συστήματός σας φαίνεται σαν μια μεγάλη προσπάθεια, αν ο μόνος λόγος είναι η έλλειψη της C ++ ταλέντο. Πρόσληψη ανθρώπους που ξέρουν C ++ φαίνεται να είναι η φθηνότερη επιλογή.

 

Python θα αφαιρέσει πιθανώς περισσότερα από τα πράγματα χαμηλού επιπέδου που χρησιμοποιείτε στην εφαρμογή σας. κατανομή μνήμης δεν θα είναι πλέον ένα ζήτημα. Επίσης, τουλάχιστον πανεπιστήμιο μου φαίνεται να αγκαλιάζει Python ως γλώσσα προγραμματισμού, επειδή οι μαθητές δεν χρειάζεται να γράψετε όλα αυτά επίσημης πράγματα για να ξεκινήσετε. μόνο σας πρόβλημα θα είναι το μέρος των επιδόσεων, όπως η Python δεν θα είναι ποτέ πιθανόν τόσο γρήγορα όσο ένα εκτελέσιμο πρόγραμμα C ++.


Θα σας συμβούλευα να πάρει μια-δυο εβδομάδες να γνωρίσουν τις γλώσσες προγραμματισμού που σκέφτεστε. Θα δείτε Ruby επίσης. Ίσως παιχνίδι γύρω με Haskell λίγο;


Όπως το αντιλαμβάνομαι Python φαίνεται καλά εξοπλισμένο για την αντιμετώπιση ό, τι μιλάμε. XML, αναζητήσεις βάσεων δεδομένων, την επικύρωση, την ανάλυση. Συνήθως είναι μια ασφαλής επιλογή, όχι μόνο λόγω της εύκολη και διασκεδαστική εμπειρία προγραμματισμού, αλλά αν είστε κολλημένοι υπάρχει μια τρομερή κοινότητα γύρω από τη γλώσσα που βρίσκονται στην ευχάριστη θέση να βοηθήσει.

 

Ποιο είναι πιο σημαντικό, να πάρει γρήγορα τα προγράμματα για να εργαστούν, ή να πάρει τα προγράμματα εργασίας γρήγορα;


Αν έχουμε να κάνουμε με μεγάλο αριθμό μεγάλων αρχείων, τότε ίσως είναι καλύτερα να μένουν σε C ++ και διδασκαλία μεταπτυχιακών προγραμματιστές σας τι ένα δείκτη είναι (!)


Διαφορετικά, θα ήθελα να συνιστούμε να δούμε μια λύση scripting που βασίζεται, διότι η ανάπτυξη σε αυτές, όταν είστε μέχρι την ταχύτητα, είναι τόσο πολύ πιο γρήγορα. Και πολύ πιο διασκεδαστικό, αν είμαστε ειλικρινείς, για τους περισσότερους ανθρώπους, τουλάχιστον.


Αν το φορτίο επεξεργασίας ανά εγγραφή δεν είναι υψηλό, μπορεί να εκπλαγείτε από το πόσο μικρή απόδοση χάσετε: το αρχείο IO σχεδόν βέβαιο ότι θα αντιμετωπιστεί με συγκεντρώνονται (C) βιβλιοθήκη, έτσι ώστε η επιβάρυνση διερμηνέας μπορεί να είναι σχετικά χαμηλή. Αξίζει να δοκιμάσετε, θα πρότεινα.


Από τις προστακτικές γλώσσες, Perl είναι μια προφανής επιλογή, Python είναι δημοφιλής και Ruby έχει υψηλό προφίλ (και ίσως καθαρότερα τα χαρακτηριστικά OO από τα δύο πρώτα). Στη συνέχεια, υπάρχει το ελαφρώς περισσότερο, er, εσωτερική σφαίρα των λειτουργικών γλώσσες, αλλά δεν είμαι ειδική να σχολιάσει εκείνους.

 

Μια άλλη εναλλακτική λύση είναι να ενσωματώσετε την Python σε C ++ το πρόγραμμά σας. Θα μπορούσατε να κρατήσετε ένα μεγάλο μέρος της αίτησής σας το ίδιο, και να πραγματοποιείτε κλήσεις με Python για τα κομμάτια που αλλάζουν συχνά, ή χρειάζεστε την ευελιξία που μια γλώσσα scripting παρέχει.


**Από τα [έγγραφα Python](https://web.archive.org/web/20080918092931/http://docs.python.org/ext/embedding.html)**



> 
> Στα προηγούμενα κεφάλαια συζήτησαν πώς να επεκτείνει Python, δηλαδή, πώς να επεκτείνει τη λειτουργικότητα των Python συνδέοντας μια βιβλιοθήκη των λειτουργιών C σε αυτό. Είναι επίσης δυνατό να το κάνουμε το αντίθετο: να εμπλουτίσει C / C ++ εφαρμογή από την ενσωμάτωση Python σε αυτό. Ενσωμάτωση παρέχει την αίτησή σας με την ικανότητα να εφαρμόσει κάποιες από τις λειτουργίες της εφαρμογής σας σε Python και όχι C ή C ++. Αυτό μπορεί να χρησιμοποιηθεί για πολλούς σκοπούς? ένα παράδειγμα θα ήταν να επιτρέψει στους χρήστες να προσαρμόζουν την εφαρμογή στις ανάγκες τους, γράφοντας κάποια σενάρια σε Python. Μπορείτε επίσης να χρησιμοποιήσετε τον εαυτό σας αν κάποια από τις λειτουργίες μπορεί να γραφτεί σε Python πιο εύκολα.
> 
> 
> 

 

Ή θα πρέπει να προσπαθήσετε να αποθηκεύσετε κανόνες ανάλυσης σας σε μια βάση δεδομένων, αντί να τους αφήνει σκληρό κωδικοποιούνται στο εσωτερικό κωδικό σας. Όπως [Ken Downs](http://database-programmer.blogspot.com) σωστά ανέφερε, [*ελαχιστοποίηση κώδικα, τη μεγιστοποίηση των δεδομένων*](http://database-programmer.blogspot.com/2008/05/minimize-code-maximize-data.html) . Με αυτό τον τρόπο δεν θα πρέπει να ξαναμεταγλωττίσετε κάθε φορά ένα μικροσκοπικό αλλαγές κανόνα.

 

Μισώ να το πω αυτό, αλλά στ θέλετε κάτι που οι εισερχόμενες προγραμματιστές σας θα είναι εξοικειωμένοι με, πάει με Java. Η Java είναι η γλώσσα που οι περισσότεροι νέοι πτυχιούχοι θα είναι πιο εξοικειωμένοι με. Μπορείτε ακόμα να καταρτίζουν, αλλά συγκεντρώνουν φορές θα είναι μικρότερη από C ++. Θα τρέχει σε Linux και λίγο πολύ οπουδήποτε αλλού. Έχει μια καλή συλλέκτη σκουπιδιών. Είναι αρκετά γρήγορο. Και εγώ αναφέρω προγραμματιστές σας θα είναι εξοικειωμένοι με αυτό; Όχι, δεν είναι «cool» όπως Python, αλλά είναι μια πολύ δοκιμασμένη και αληθινή γλώσσα.


Ειλικρινά, αμφιβάλλω ότι έχετε πολλά εισερχόμενων προγραμματιστές που πιπιλίζουν με C ++, αλλά θα ήταν φοβερό με την Python έτσι κι αλλιώς. Οι άνθρωποι που χρησιμοποιούν Python και τείνουν να είναι εντάξει με χειροκίνητη διαχείριση μνήμης. Οι άνθρωποι που είναι κακοί με τη διαχείριση της μνήμης στην πραγματικότητα τείνουν να είναι κακό με όλες τις γλώσσες.


Κάνω βρίσκουν ανησυχητικό ότι έχετε προγραμματιστές που είναι τόσο κακή με τη διαχείριση μνήμης που θέλετε να αλλάξετε γλώσσα. Αυτό είναι ένα σημάδι που δείχνει ένα πρόβλημα, αλλά δεν είμαι σίγουρος ότι το πρόβλημα είναι με τη γλώσσα.

 

Εάν μπορείτε να πάρετε μακριά με τη χρήση Python, Ruby, Groovy ή Perl εναντίον C ++ θα είναι καλύτερα να πηγαίνει με ένα από αυτά τα υψηλότερα γλώσσες επίπεδο. Η παραγωγικότητα θα αυξηθεί σημαντικά. Αν διαπιστώσετε ότι χρειάζεστε περισσότερο τις επιδόσεις τότε πάμε με Java. Ο καθένας πρέπει να ξέρει σε και να χρησιμοποιούν τουλάχιστον μία δυναμικά δακτυλογραφημένες γλώσσα.

 

θα πρέπει να κινηθεί σε python που Γλωσσας κάνουν όλα τα δυνατά στη δικτύωση, αν χρειάζεστε πιο γρήγορα προχωρήσουμε σε C / C ++

 

Θα ήθελα να προτείνω να δοκιμάσετε groovy. Η υποστήριξη XML είναι μια χαρά και την ανάλυση καθώς και την επικύρωση των δεδομένων θα πρέπει να είναι να μην δύσκολη.


Ωστόσο, μερικοί άνθρωποι τόνισε ότι η μεταναστευτική μπορεί να μην είναι το πιο λαμπρό ιδέα. Δεν μπορείτε να προσπαθήσετε να λάβετε υπόψη τα κοινά πράγματα σε «Macher αντικείμενα» και «επικύρωση αντικείμενα» έτσι ώστε οι νέοι προγραμματιστές χρησιμοποιούν το C ++ βιβλιοθήκη αντί να προσπαθεί να γράψει επιρρεπής σε λάθη νέο κωδικό που αναπαράγει μόνο τα υπάρχοντα τμήματα;


Επίσης ΑΜΚΕ είστε βέβαιος να χρησιμοποιήσει σύγχρονα αρχείο IO (iostreams) και όχι C όπως IO σε C ++, που θα πρέπει να βοηθήσει με τα προβλήματα μνήμης πολλά.


Επίσης ψάχνει για τις βιβλιοθήκες ώθηση μπορεί να είναι χρήσιμη.

 

Απόδοση σε Python μπορεί να είναι ένα πολύ μεγάλο θέμα. Μόλις είχα να δημιουργήσετε το πρόγραμμα περιλαμβάνει αλγόριθμο βελτιστοποίησης στον κατάλογο των καθηκόντων. Ξεκίνησα με την Python, δημιούργησε την πολύ γρήγορη και καθαρή, τότε είδε θα χρειαστεί πολλά χρόνια για να παρέχουν ένα αποτέλεσμα. Ξαναγράφοντας την γραμμή προς γραμμή σε C ++ είχε ως αποτέλεσμα πάνω από **100 φορές** τη βελτίωση της ταχύτητας ...


Έτσι, μερικές φορές δεν είναι θέμα της απώλειας απόδοσης 5-10%, όπως μπορείτε να δείτε. Θα πρέπει να το διερευνήσει στην περίπτωσή σας (ίσως λίγο τεστ;).

 

Αν είστε καλά με την διαμονή τους με ένα καταρτίζονται γλώσσα, θα ήθελα να μείνει με C ++ και προτείνουν την επιλογή ένα καλό σύνολο των βιβλιοθηκών και διδάσκουν αρχάριους για τη σωστή χρήση και την τήρηση των στερεών μοτίβα. 


Αν καταφέρετε να βρείτε ένα ευχάριστο σύνολο των βιβλιοθηκών, θα είναι εύκολο για αρχάριους να μάθουν γραφή στερεών κωδικό. Μου (τρέχουσα) προσωπική προτίμηση είναι η βιβλιοθήκη κατηγορίας Qt, διότι καθιστά το χειρισμό εύκολο και ασφαλή μνήμη και είναι ευχάριστο να εργαστεί με. Διαθέτει επίσης υποστήριξη για XML parsing και την παραγωγή, έχει ενσωματωμένο, τις δυνατότητες του δικτύου κανονικής έκφρασης του, είναι cross-platform, ... και είναι επίσης πολύ χρήσιμο για συστήματα μη-GUI.


Για μένα, αυτό είναι μια τεράστια διαφορά ανάμεσα σε συνεργασία με απλό ++, C, βιβλιοθήκη std και STL και την εργασία με ένα ισχυρό βιβλιοθήκη όπως η Qt. Πιθανώς, εξετάζοντας ώθηση καλούδια είναι επίσης πολύ αξιόλογες.

 

εάν η φύση του έργου που κάνετε σας επιτρέπει να εξετάσουμε ακόμη και μια τέτοια κίνηση, τότε κινούνται (με την προϋπόθεση ότι έχετε κάποια ιδέα). Σε πολλές C ++ έργα όμως, η μόνη επιλογή σας κινείται *κάτω από* ένα ή δύο επίπεδα αφαίρεσης (π.χ., σε C ή Συνέλευση).

 

Συμφωνώ με τους άλλους, θα πρέπει να κολλήσει με C ++. Η στροφή σε μια μη-μεταγλωττισμένα γλώσσα είναι ένα βήμα προς τα πίσω. Ενώ πολλοί προγραμματιστές μπορούν να έχουν το πρόβλημα που ασχολούνται με ορισμένες από τις ενοχλητικές πτυχές της γλώσσας (όπως δείκτες), τουλάχιστον οι περισσότεροι programers έχουν εκτεθεί σε κάποια C ++. Θα σας συνιστούσαμε να αφιερώσετε χρόνο και τα χρήματά σας βελτιώνοντας βάση κώδικα και προγραμματιστές μάλλον έπειτα εναλλαγή γλωσσών σας. 


Όσον αφορά τις άλλες γλώσσες, μπορεί να θέλετε να κρατήσετε τα μάτια σας στο GO lang. Ένας φίλος μου που χρησιμοποιείται αρκετά εκτενώς. Είναι μια σύγχρονη καταρτίζονται γλώσσα. Τείνει να είναι σαφής, περιεκτική και σύγχρονη. GO εφαρμογές συνήθως τρέχουν με ταχύτητες συγκρίσιμες με αυτές γραμμένο σε C ++ και διασυνδέεται και με το διαδίκτυο. Δεν είναι πολύ ώριμη σε αυτό το σημείο, αλλά φαίνεται πολλά υποσχόμενο. 


Καλή τύχη!

 