So sehe ich das.
Es gibt Maschinencode und alles, was Computer brauchen, um etwas auszuführen. Computer interessieren sich nicht für Programmiersprachen. Es ist ihnen egal, ob der Maschinencode von Perl, Python oder PHP stammt. Programmiersprachen bedienen keine Computer. Sie dienen Programmierern.
Einige Programmiersprachen laufen langsamer als andere, aber das muss nicht unbedingt so sein, weil mit ihnen etwas nicht stimmt. In vielen Fällen liegt es daran, dass sie mehr Dinge tun, die Programmierer sonst tun müssten (dh Speicherverwaltung), und wenn sie diese Dinge tun, sind sie besser in dem, was sie tun sollen - sie dienen Programmierern.
Ist eine langsamere Leistung der Programmiersprachen wirklich eine schlechte Sache?
programming-languages
language-agnostic
performance
Emanuil Rusev
quelle
quelle
Antworten:
Ich denke nicht, dass es automatisch schlecht ist. Python ist langsamer als C ++, aber wenn beide schnell genug sind , ist Python möglicherweise die beste Wahl für das jeweilige Problem, auch wenn es langsamer ist .
Es ist immer ein Kompromiss. Für kleine einmalige Aufgaben ist es viel schneller, ein Python-Skript zu schreiben als für eine C ++ - App, die dasselbe tut (das typische Beispiel für mich wäre eine Art Batch-Textverarbeitung oder das Durchgehen eines Verzeichnisbaums und das Bearbeiten der Dateien). und es ist mir egal, ob es 10 ms oder 1000 ms dauert, obwohl es 100x langsamer ist, weil ich die Hälfte der Zeit zum Schreiben und Testen brauche.
Natürlich wäre es schön, wenn Python so schnell wie C ++ wäre. In diesem Sinne stimme ich Ihrer Aussage zu, dass "slow = bad". Aber dann habe ich lieber eine mächtige Sprache, die so schnell läuft, wie ich will, indem ich einige Dinge nicht tue (z. B. die Überprüfung der Array-Grenzen auf unformatierte Arrays), solange ich entscheiden kann, wann ich diesen Kompromiss eingehen soll (z. B. mit std: :Vektor).
quelle
Ziemlich einfach - langsam zu sein ist eine schlechte Sache
wenn das Programm ein bestimmtes Leistungsniveau erfordert
denn ohne diese leistung erfüllen sie nicht die anforderungen.
Dies kann alles sein, von einer Geschäftsanwendung, die Abfragen in akzeptabler Zeit verarbeiten muss, bis hin zu einem Spiel, das zu jedem Zeitpunkt viele Informationen auf dem Bildschirm anzeigen muss. Wenn das Programm nicht schnell genug ist, funktioniert es einfach nicht .
quelle
Betrachten Sie es so: Computer sind dumm . Sie folgen trampelnd den Anweisungen, denen jeder Idiot mit einem Triggertisch folgen könnte. Sie bestehen hartnäckig darauf, das zu tun, was Sie gesagt haben, anstatt das, was Sie gemeint haben. Keine Spur von Selbststeuerung oder Intuition. Es ist schrecklich.
Das Eine, was ein Computer braucht, ist, dass er schnell ist. Ja wirklich! Ein Kopf mit einem Aktenschrank könnte die gleiche Aufgabe wie eine Datenbank übernehmen. Ein Typ, der eine Druckmaschine ankurbelt, könnte das tun, was Apache tut. Ernst! Und sie HABEN es tatsächlich Hunderte und Hunderte von Jahren lang getan. Warum ein Computer für ALLES gut ist, ist seine Geschwindigkeit.
Eine Programmiersprache, die (im Vergleich zu anderen Sprachen) nicht ausgenutzt wird, hat also nicht den EINZIGEN Vorteil, Computer zu verwenden.
quelle
Eine Programmiersprache kann sehr hoch sein, "viel tun", aber trotzdem sehr schnell. OCaml ist eine höhere Programmiersprache als PHP, erzeugt jedoch einen Code, der fast so schnell wie C ist. Javascript ist so dynamisch wie PHP, kann jedoch sehr schnell ausgeführt werden. Es geht also hauptsächlich um eine Sprachimplementierung, nicht um ein Design. Dynamische Sprachen sind schwerer zu implementieren, aber nicht unmöglich.
quelle
Die Geschwindigkeit kann in Bezug auf Laufzeit, anfängliche Entwicklungszeit und Wartungszeit (Zeit, die benötigt wird, um Probleme / Fehler zu beheben und neuen Code zu erstellen und bereitzustellen) gemessen werden.
Skriptsprachen haben im Allgemeinen eine langsamere Laufzeit, aber eine schnellere Wartungszeit, da Sie häufig eine schnelle Änderung vornehmen und bereitstellen können, ohne ein gesamtes System neu erstellen zu müssen, und manchmal sogar, ohne anzuhalten und neu zu starten.
Daher ist viel eine Balance, die von der Geschwindigkeit abhängt, die Sie benötigen.
Der Kontext ist auch wichtig. Das Laden Ihrer Erstkonfiguration in 0,5 Sekunden anstelle von 0,1 Sekunden ist keine große Sache, aber zur Laufzeit kann die Ausführung einer Abfrage in 0,5 Sekunden anstelle von 0,1 Sekunden eine große Sache sein, wenn 100 Abfragen verarbeitet werden müssen, und somit in 50 Sekunden statt 10.
quelle
Einfach - Kunden lieben schnelle Software. Tatsächlich besteht der gesamte Zweck von Computern darin, schnell zu rechnen.
quelle
Langsam ist relativ. Wenn ich einen Port 10-mal pro Sekunde lesen muss, ist eine Sprache, die keine Binärdatei erstellen kann, zu langsam. Wenn ich eine Webanwendung schreibe, bei der die Anforderungs- / Antwortsequenz zwischen Server und Browser / Client in Sekunden gemessen wird und der Benutzer wahrscheinlich Minuten auf einem Bildschirm verbringt, bevor er auf eine Schaltfläche klickt, eine Programmiersprache, die die Anforderungsverarbeitung übernimmt in 1 Sekunde ist wahrscheinlich schnell genug (die meisten sind natürlich viel schneller).
Natürlich kann die Programmiersprache einen Einfluss auf die Ausführungsgeschwindigkeit haben, aber das ist nicht die Sprache selbst, sondern die Compiler und / oder Laufzeiten, die damit einhergehen. Dies zeigt deutlich die Entwicklung von Java, bei der die Leistung von JVMs (auch auf identischen Hardwareumgebungen) im Laufe der Jahre radikal gestiegen ist. Und natürlich ist es in jeder beliebigen Umgebung immer möglich, extrem langsamen Code zu schreiben. Solche Behauptungen wie "C ++ ist zehnmal schneller als Java" sind automatisch falsch, es sei denn, sie wurden qualifiziert und quantifiziert, um genau zu wissen, welche Bedingungen wie getestet wurden. Ebenso ist es möglich, einen Test zu erstellen, bei dem Java schneller als C ++ ist. Dies hängt davon ab, was Sie als Testcode verwenden und wie Sie ihn ausführen.
quelle
Da es keine Programmiersprachen für Programmierer gibt, können mit ihnen Programme für Benutzer erstellt werden.
Wenn Sie nur ein einfaches kleines persönliches Werkzeug benötigen, um etwas einmal zu tun, kann es so langsam sein, wie Sie möchten. Sobald Sie jedoch mit der Bereitstellung für Benutzer beginnen, kümmern sich diese um Geschwindigkeit und Skalierung, insbesondere wenn sie diese wiederholt verwenden. (Zum Beispiel kann ein Installationsprogramm langsam sein; das Programm, das es installiert, sollte es nicht sein.) Und es ist nicht nur die Sprache; Es ist das Programm insgesamt. Wenn Ihr Programm langsam ist, wird es den Benutzern nicht gefallen. Und wenn Sie Konkurrenz haben, ist es eine sehr schlechte Sache, wenn Benutzer Ihr Programm nicht mögen. Eine Sprache, die dazu beiträgt, dass Benutzer Ihr Programm nicht mögen (indem sie es langsam machen), ist schlecht.
Ich bin Teil eines Teams, das Steuerungssoftware für Rundfunkmedien schreibt. Wenn Sie in den USA sind, läuft wahrscheinlich Ihr Lieblingsfernseh- oder Radiosender darauf. Leistung ist eines der Dinge, über die wir am häufigsten von Kunden hören. Es wurde ursprünglich für den Betrieb von kleinen Einzelstationen geschrieben, aber jetzt unterzeichnen wir große Rundfunk- und Kabelnetzwerke mit Hunderten von Kanälen, und die Skalierung wird zu einem Problem. Wenn es nicht gelingt, die Dinge für sie schnell laufen zu lassen, bringen sie ihre millionenschweren Verträge zu Leuten, die es können, und wir haben keine Arbeit mehr. Deshalb verwenden wir eine schnelle, kompilierte Sprache und optimieren die Ausnutzung unserer Datenbanken.
quelle
Weil schneller besser ist. Zeit ist Geld. Wenn Sie Serversoftware schreiben und eine langsamere Programmiersprache verwenden, kaufen Sie mehr Server. Wenn Sie eine eingeschweißte Software schreiben, verlieren Sie Kunden an Konkurrenten, die schneller sind.
Für jede Art von dauerhafter Software, die von Menschen verwendet wird, möchten wir sie normalerweise so schnell wie möglich. Auf Baugruppenebene verkürzt sich die Markteinführungszeit zu stark, als dass dies rentabel wäre. Es sind alles Kompromisse. Aus geschäftlicher Sicht könnte es rentabler sein, die schlechten Programmierer Speicherfehler in C ++ mehrere Monate lang debuggen zu lassen, wenn dies bedeutet, dass das Produkt schneller ist als Ihre Konkurrenten.
Daher ist Geschwindigkeit in vielen Programmen wichtig . Langsame Sprachen gelten heutzutage als "schlecht", weil sie wirklich zu langsam sind (Python kann leicht 50x - 100x langsamer sein, und das ist zu viel).
quelle
Ich weiß nicht, wie Sie zu diesem Schluss gekommen sind. Ich würde sagen: Softwareentwickler verwenden Programmiersprachen für ihre Bedürfnisse.
Dies ist auch eine flockige Aussage. Definieren Sie, was Sie meinen, indem Sie hier das Wort "langsamer" verwenden. Langsamer könnte bedeuten:
Diese beiden Aspekte sind auch eng miteinander verknüpft, wenn es um einen Kompromiss zwischen Entwicklungsaufwand und Leistung geht.
quelle
Wie bei jeder Software kann Langsamkeit ein Zeichen für zugrunde liegende Probleme / schlechtes Design sein. Design ist zugegebenermaßen ein bisschen zeitgeistig, aber das beeinträchtigt nicht die Tatsache, dass die Designprinzipien, auf denen es jetzt basiert, veraltet sind und als „schlecht“ gelten.
Nehmen Sie zum Beispiel Classic ASP und ASP.net.
quelle
Jemand bemerkte, dass "Kunden Software lieben, die den Anforderungen und dem Budget entspricht". Nun, das ist wahr - aber es hat einen erheblichen Einfluss auf langsame Software, und das bedeutet per Definition langsamere Programmiersprachen (und Frameworks) und Algorithmen sowie langsamere Konfiguration. Eine langsame Programmiersprache ist möglicherweise der wichtigste Teil des oben Genannten, einfach weil es eine Grundlage ist, an der es für Sie am schwierigsten ist, Änderungen vorzunehmen. Wenn Sie eine Oracle-Datenbank verwenden und mehr Leistung benötigen, können Sie die Tabellen / den Index / usw. optimieren. Einfach. Wenn Ihr Code einen schlechten Algorithmus enthält, können Sie einen anderen Code schreiben. Wenn Ihr Framework langsam ist, können Sie es ersetzen - das ist nicht so einfach, aber es ist möglich, ohne alles neu zu schreiben. Wenn Ihre Sprache zu langsam ist, müssen Sie praktisch neu beginnen.
Besuchen Sie Facebook für den Aufwand, mit dem PHP schnell genug funktioniert, wenn es skaliert werden muss.
Für den Rest von uns werden "nicht funktionale Leistungsanforderungen" häufig in Spezifikationen festgehalten, insbesondere für skalierbare Web-Apps. Wenn die Seite nicht erfüllt wird, muss sie dem Benutzer innerhalb von 2 Sekunden nach Aufforderung angezeigt werden "und Sie verlieren den Vertrag (oder zahlen Strafen). Ja, Kunden lieben Software, die die Anforderungen erfüllt - und diese Anforderungen sagen, dass sie schnell sein muss (Es ist Ihnen vielleicht egal, wie lange die Benutzer auf die Sanduhr starren, aber der Kunde tut es auf jeden Fall - es ist ein enormer Preis).
Zum Beispiel wurde mir in einem großen Callcenter mitgeteilt, dass sie festgestellt hätten, dass für jede Sekunde, die Sie beim Annehmen von Anrufen sparen könnten, 1 Anrufbeantworter "verkleinert" werden könnte. Das ist plötzlich echtes Geld und ein enormer Anreiz für die Chefs, schneller, effizienter und benutzerfreundlicher zu werden.
Es wird viel Zeit damit verbracht, sich darum zu kümmern, dass Programmierer Code so schnell wie möglich ausgeben (und dann die ganze Zeit Unit-Tests und Refactoring durchführen, lol). Ich habe festgestellt, dass dies nicht so wichtig ist, wie die Leute glauben. Wenn Sie ein Experte in Ihrer Sprache sind, können Sie es viel schneller codieren, als wenn Sie unerfahren sind. Ein erfahrener C ++ - Entwickler kann also Code schneller und genauer schreiben als ein unerfahrener PHP-Entwickler. Ich denke, ein Experte zu werden ist wichtiger als eine "einfache" Sprache zu wählen, und deshalb mag ich den Kult des "Umschreibens in den coolen, neuen Sachen" nicht, der heute überall zu sein scheint.
quelle
Ich werde darauf hinweisen, dass die meisten Leistungsprobleme bestehen, weil der Programmierer einen schlechten Job gemacht hat, nicht weil die Sprache zu langsam war. Wirklich, es gibt viel mehr relevante Dinge, über die Sie sich Sorgen machen müssen, als über die Sprache, die Sie wählen. Das wäre ungefähr die Nummer 1.203.407 auf meiner Liste.
quelle
Wenn alles andere gleich ist, ist es gut, schneller zu werden. Schließlich möchte niemand wirklich länger auf einige Ergebnisse warten, und sobald dieses Ergebnis fertig ist, können Ressourcen für andere Dinge freigesetzt werden.
Aber nicht alles andere ist gleich. Für den Anfang ist es auch wichtig, das richtige Ergebnis zu erzielen oder zumindest das Richtige. (Wenn völlig falsche Ergebnisse zulässig sind, können Sie diese in der Tat sehr schnell erstellen, und sie haben für jeden den Wert Null.) Wenn eine Änderung in eine etwas langsamere Sprache die Wahrscheinlichkeit erhöht, dass das richtige Ergebnis erzielt wird, ist dies in der Regel a Toller Kompromiss. Sprachen auf höherer Ebene haben hier einen Vorteil gegenüber Sprachen auf niedrigerer Ebene, da ihre reichhaltigeren Modelle es in der Regel einfacher machen, ein komplexes Problem ohne zu viele explizite Details auszudrücken.
In der Regel ist es auch wichtig, die Kosten für die erstmalige Erstellung der Software, das Hinzufügen neuer Funktionen und die Beibehaltung der Funktionsfähigkeit zu verwalten, wenn sich die zugrunde liegenden Systeme ändern. Höhere Programmiersprachen ermöglichen normalerweise einen schnelleren Programmier-Turnaround, und es ist sehr wertvoll, die Programmierkosten innerhalb des Budgets zu halten. Wenn die Kosten dort niedrig gehalten werden, können insgesamt mehr verschiedene Dinge erreicht werden, was im Allgemeinen gut ist.
Der letzte wichtige Punkt ist, dass nicht nur eine Sprache verwendet werden muss und dass bei vielen Softwaresystemen die Mehrheit ihrer Komponenten nicht leistungskritisch ist. Die Verwendung einer Sprache auf niedriger Ebene zur Herstellung von Hochleistungskomponenten für die kritischen Bits ist sinnvoll, während es äußerst sinnvoll ist, die weniger kritischen Teile einer Sprache auf hoher Ebene zu überlassen (um die Herstellungskosten zu minimieren). Darüber hinaus sind die Merkmale, die eine gute Sprache auf niedriger Ebene ausmachen (die Fähigkeit, genau zu steuern, was die Maschine tut), nicht die Merkmale, die eine gute Sprache auf hoher Ebene ausmachen (die Fähigkeit, Details aus viel kleineren Beschreibungen abzuleiten): Sie diametral entgegengesetzt sind, also in der Lage zu sein, sie zu verbinden und sie für ihre Stärken zu nutzen und ihre Schwächen zu vermeiden, das ist in der Tat eine großartige Sache.
Welche Komponenten sollen einer Hochleistungsbehandlung unterzogen werden? Die Optimierung? Messen Sie sie. Profiliere sie. Finde die Wahrheit, anstatt zu raten. Konzentrieren Sie sich dort, wo es am besten tut.
quelle