Sollte ich von C++ auf Python umsteigen?… Oder eine andere Sprache?[geschlossen]

StackOverflow https://stackoverflow.com/questions/8748

  •  08-06-2019
  •  | 
  •  

Frage

In dem Unternehmen, für das ich arbeite, führen wir viele dateibasierte Transaktionsverarbeitungen durch.Die Verarbeitung konzentriert sich auf die Konvertierung von Dateien zwischen zahlreichen Formaten, um sie an zahlreiche Systeme in zahlreichen Unternehmen anzupassen.

Bei der Verarbeitung handelt es sich fast immer um eine XML Phase und kann eine Menge Textanalyse, Datenbanksuche, Datenkonvertierung und Datenvalidierung umfassen.

Derzeit sind die Programme, die all diese Aufgaben ausführen, eingeschrieben C++ und sie arbeiten alle auf einem durchschnittlichen Server recht schnell.Ich untersuche die Möglichkeiten der Verwendung einer „moderneren“ Sprache, mit der Programmierer mit neueren Hochschulabschlüssen eher vertraut sind.(Korrekte Speicherzuordnung in C++ scheint heutzutage bei vielen neueren Programmierern Probleme zu verursachen)

Würde eine Sprache wie Python auf der Grundlage der bereitgestellten kurzen Informationen die erforderliche Funktionalität und Leistung bereitstellen und sich auch mit der Speicherzuweisung (und verschiedenen anderen Themen) befassen? C++ (verwandte) Probleme, die auftreten?

Mir gefällt die Idee, dass wir die Programme nicht jedes Mal neu kompilieren müssen, wenn wir eine Änderung vornehmen.Ich verstehe, dass die interpretierten Sprachen wahrscheinlich nicht die gleiche Leistung erbringen werden, die wir derzeit erreichen.

Unsere Systeme sind Linux basierend, was auch einige Optionen einschränkt.

Alle Kommentare zur Funktionalität und Leistung, die mit verfügbar sind Python oder Vorschläge für alternative Sprachen wären sehr dankbar.

War es hilfreich?

Lösung

Mir gefällt die Idee, dass wir die Programme nicht jedes Mal neu kompilieren müssen, wenn wir eine Änderung vornehmen.Ich verstehe, dass die interpretierten Sprachen wahrscheinlich nicht die gleiche Leistung erbringen werden, die wir derzeit erreichen.

Das ist das größte Problem;Kann man mit dem Leistungseinbruch leben?Sie könnten versuchen, Python und zu verwenden Erweitern Sie es mit Ihren aktuellen C++-Modulen für die leistungsschweren Teile.Dennoch scheint die Umstellung Ihres gesamten Systems ein großer Aufwand zu sein, wenn der einzige Grund darin besteht, dass es an C++-Talenten mangelt.Die Einstellung von Leuten, die sich mit C++ auskennen, scheint die günstigere Option zu sein.

Andere Tipps

Was ist wichtiger: die Programme schnell zum Laufen zu bringen oder die Programme schnell zum Laufen zu bringen?

Wenn Sie mit einer großen Anzahl großer Dateien zu tun haben, ist es möglicherweise besser, bei C++ zu bleiben und Ihren Programmierern beizubringen, was ein Zeiger ist (!)

Andernfalls würde ich Ihnen dringend raten, sich eine skriptbasierte Lösung anzusehen, da die Entwicklung bei diesen, wenn Sie erst einmal damit vertraut sind, viel schneller vonstatten geht.Und, wenn wir ehrlich sind, viel mehr Spaß, zumindest für die meisten Leute.

Wenn die Verarbeitungslast pro Datensatz nicht hoch ist, werden Sie überrascht sein, wie wenig Leistung Sie verlieren:Datei-E/A wird mit ziemlicher Sicherheit in einer kompilierten (C-)Bibliothek verarbeitet, sodass der Interpreter-Overhead relativ gering sein kann.Einen Versuch wert, würde ich vorschlagen.

Von den imperativen Sprachen ist Perl eine offensichtliche Option, Python ist beliebt und Ruby hat einen hohen Bekanntheitsgrad (und wahrscheinlich sauberere OO-Funktionen als die ersten beiden).Dann gibt es noch den etwas, äh, esoterischen Bereich der funktionalen Sprachen, aber ich bin nicht qualifiziert, dazu Stellung zu nehmen.

Python würde wahrscheinlich die meisten Low-Level-Inhalte entfernen, die Sie in Ihrer Anwendung verwenden.Die Speicherzuweisung wäre kein Problem mehr.Außerdem scheint zumindest meine Universität Python als Programmiersprache zu akzeptieren, da die Studenten nicht all diese formalen Dinge schreiben müssen, um loszulegen.Ihr einziges Problem wäre der Leistungsteil, da Python wahrscheinlich nie so schnell sein wird wie ein kompiliertes C++-Programm.

Ich würde Ihnen raten, sich ein paar Wochen Zeit zu nehmen, um sich mit den Programmiersprachen vertraut zu machen, die Sie in Betracht ziehen.Ich würde mir auch Ruby ansehen.Vielleicht ein bisschen mit Haskell herumspielen?

Soweit ich weiß, scheint Python für alles, worüber Sie sprechen, gut gerüstet zu sein.XML, Datenbanksuche, Validierung, Analyse.Es ist normalerweise eine sichere Wahl, nicht nur wegen der einfachen und unterhaltsamen Programmiererfahrung, sondern wenn Sie nicht weiterkommen, gibt es eine großartige Community rund um die Sprache, die Ihnen gerne weiterhilft.

Eine weitere Alternative besteht darin, Python in Ihr C++-Programm einzubetten.Sie könnten einen Großteil Ihrer Anwendung unverändert lassen und für die Teile, die sich häufig ändern oder die Flexibilität benötigen, die eine Skriptsprache bietet, Python aufrufen.

Von dem Python-Dokumente

In den vorherigen Kapiteln wurde erläutert, wie Python erweitert werden soll, dh wie man die Funktionalität von Python erweitert, indem eine Bibliothek von C -Funktionen anfängt.Es ist auch möglich, es umgekehrt zu tun:Bereicherung Ihrer C/C ++ -Anwendung, indem Sie Python einbetten.Die Einbettung bietet Ihrer Anwendung die Möglichkeit, einen Teil der Funktionen Ihrer Anwendung in Python und nicht in C oder C ++ zu implementieren.Dies kann für viele Zwecke verwendet werden;Ein Beispiel wäre, dass Benutzer die Anwendung auf ihre Bedürfnisse anpassen können, indem einige Skripte in Python geschrieben werden.Sie können es auch selbst verwenden, wenn einige der Funktionen in Python leichter geschrieben werden können.

Ich hasse es, das zu sagen, aber wenn Sie etwas wollen, mit dem Ihre neuen Entwickler vertraut sind, entscheiden Sie sich für Java.Java ist die Sprache, mit der die meisten Absolventen am besten vertraut sind.Sie müssen noch kompilieren, aber die Kompilierungszeiten sind kürzer als bei C++.Es läuft unter Linux und praktisch überall sonst.Es hat einen guten Müllsammler.Es ist ziemlich schnell.Und habe ich schon erwähnt, dass Ihre Entwickler damit vertraut sein werden?Nein, es ist nicht „cool“ wie Python, aber es ist eine sehr bewährte Sprache.

Ehrlich gesagt bezweifle ich, dass es viele neue Entwickler gibt, die mit C++ scheiße sind, mit Python aber trotzdem großartig wären.Die Leute, die Python gut nutzen, kommen mit der manuellen Speicherverwaltung in der Regel gut zurecht.Die Leute, die schlecht in der Speicherverwaltung sind, neigen dazu, in allen Sprachen schlecht zu sein.

Ich finde es besorgniserregend, dass Sie Entwickler haben, die so schlecht mit der Speicherverwaltung umgehen, dass Sie die Sprache wechseln möchten.Das ist ein Zeichen dafür, dass ein Problem vorliegt, aber ich bin mir nicht sicher, ob das Problem an der Sprache liegt.

Wenn Sie damit einverstanden sind, bei einer kompilierten Sprache zu bleiben, würde ich bei C++ bleiben und vorschlagen, einen guten Satz an Bibliotheken auszuwählen und Neulingen die richtige Verwendung und Einhaltung solider Muster beizubringen.

Wenn es Ihnen gelingt, einen angenehmen Satz an Bibliotheken zu finden, wird es für Neulinge leicht sein, das Schreiben von solidem Code zu erlernen.Meine (aktuelle) persönliche Präferenz ist die Qt-Klassenbibliothek, weil sie die Speicherverwaltung einfach und sicher macht und die Arbeit angenehm ist.Es bietet außerdem Unterstützung für XML-Parsing und -Generierung, verfügt über integrierte Regexp-Funktionen, Netzwerkfunktionen, ist plattformübergreifend, ...und ist auch für Nicht-GUI-Systeme sehr nützlich.

Für mich ist es ein großer Unterschied zwischen der Arbeit mit einfachem C++, der Standardbibliothek und STL und der Arbeit mit einer leistungsstarken Bibliothek wie Qt.Wahrscheinlich lohnt es sich auch sehr, nach Boost-Goodies zu suchen.

Ich würde vorschlagen, es mit Groovy zu versuchen.Die XML-Unterstützung ist in Ordnung und das Parsen sowie die Datenvalidierung sollten nicht allzu schwierig sein.

Einige Leute wiesen jedoch darauf hin, dass eine Migration möglicherweise nicht die beste Idee sei.Können Sie nicht versuchen, allgemeine Dinge in „Macher-Objekte“ und „Validierungsobjekte“ herauszugliedern, damit neue Programmierer Ihre C++-Bibliothek verwenden, anstatt zu versuchen, fehleranfälligen neuen Code zu schreiben, der nur vorhandene Fragmente dupliziert?

Stellen Sie außerdem sicher, dass Sie moderne Datei-IO (Iostreams) und nicht C wie IO in C++ verwenden, das sollte bei Speicherproblemen sehr hilfreich sein.

Auch ein Blick auf die Boost-Bibliotheken könnte hilfreich sein.

Die Leistung in Python kann ein sehr großes Problem sein.Einmal musste ich ein Programm erstellen, das einen Optimierungsalgorithmus in die Aufgabenliste einbezog.Ich habe mit Python angefangen, es superschnell und sauber erstellt und dann festgestellt, dass es ewig dauern wird, bis ich ein Ergebnis bekomme.Das zeilenweise Umschreiben in C++ führte zu over 100x Geschwindigkeitsverbesserung...

Wie Sie sehen, handelt es sich also manchmal nicht um einen Leistungsverlust von 5–10 %.Sie sollten es in Ihrem Fall untersuchen (vielleicht kleiner Test?).

Oder Sie sollten versuchen, Ihre Parsing-Regeln in einer Datenbank zu speichern, anstatt sie fest in Ihrem Code zu codieren.Als Ken Downs richtig zitiert, Code minimieren, Daten maximieren.Auf diese Weise müssten Sie nicht jedes Mal eine Neukompilierung durchführen, wenn sich eine kleine Regel ändert.

Wenn Sie mit der Verwendung von Python, Ruby, Groovy oder Perl durchkommen, vs.Wenn Sie C++ verwenden, sollten Sie sich besser für eine dieser höheren Programmiersprachen entscheiden.Die Produktivität wird deutlich steigen.Wenn Sie feststellen, dass Sie mehr Leistung benötigen, entscheiden Sie sich für Java.Jeder sollte mindestens eine dynamisch typisierte Sprache beherrschen und verwenden.

Wenn Sie einen schnelleren Wechsel zu C/C++ benötigen, sollten Sie auf Python umsteigen, diese Sprache ermöglicht alles im Netzwerk

Wenn die Art des von Ihnen durchgeführten Projekts es Ihnen erlaubt, einen solchen Schritt überhaupt in Betracht zu ziehen, dann ziehen Sie um (vorausgesetzt, Sie haben Ahnung).In vielen C++-Projekten bleibt Ihnen jedoch nur das Verschieben runter eine oder zwei Abstraktionsebenen (z. B. nach C oder Assembly).

Ich stimme mit anderen überein, Sie sollten bei C++ bleiben.Der Wechsel zu einer nicht kompilierten Sprache ist ein Rückschritt.Während viele Programmierer möglicherweise Schwierigkeiten haben, mit einigen problematischen Aspekten der Sprache (z. B. Zeigern) umzugehen, waren zumindest die meisten Programmierer mit etwas C++ vertraut.Ich empfehle Ihnen, Ihre Zeit und Ihr Geld in die Verbesserung Ihrer Codebasis und Ihrer Programmierer zu investieren, anstatt die Sprache zu wechseln.

Was andere Sprachen betrifft, sollten Sie GO lang im Auge behalten.Ein Freund von mir hat es ziemlich häufig genutzt.Es ist eine moderne kompilierte Sprache.Es tendiert dazu, klar, prägnant und modern zu sein.GO-Anwendungen laufen normalerweise mit einer Geschwindigkeit, die mit denen in C++ geschriebener Anwendungen vergleichbar ist, und lassen sich gut mit dem Web verbinden.Zu diesem Zeitpunkt ist es noch nicht sehr ausgereift, sieht aber vielversprechend aus.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top