Gibt es eine vergleichende Studie zum Speicherverbrauch von Programmiersprachen, die mit der Ausdruckskraft und den Produktionsfehlerquoten korreliert? [geschlossen]


10

Es gibt viele vergleichende Studien, die online verfügbar sind, wenn es um die Laufzeitleistung von Anwendungen geht, die mit der einen oder anderen Sprache erstellt wurden. Einige werden von Unternehmen angetrieben, andere von akademischen, andere nur von persönlichen Versuchsberichten.

Wir erhalten auch einen anständigen Anteil an vergleichenden Studien zu den Nebenwirkungen einer Programmiersprache und ihrer Werkzeuge, wie zum Beispiel:

  • Bauzeiten,
  • Wahrscheinlichkeit der Erkennung von Fehlern nach der Produktion,
  • Ausdruckskraft,
  • usw...

In letzter Zeit wurde ich jedoch mehr und mehr vom Speicherverbrauch meiner Programme überfordert. Dies könnte auf die Tatsache zurückzuführen sein, dass wir, während Moores Gesetz für rohe Leistung auf unserer Seite steht, erkannt haben, dass andere Engpässe wichtiger sind. Das, und ich neige nicht dazu, meine Hardware von Zeit zu Zeit zu aktualisieren, und ich habe einige "alte" (lesen Sie 2005-2006 3,6 GHz Pentium 4 mit 4 GB RAM), die heutzutage kaum für große Anwendungen ohne geeignet sind Ich muss mir große Mühe geben, um jeden Saft herauszuholen (Auswahl des Betriebssystems, der Benutzeroberfläche, Optimierung der Dienste und Dämonen, Auswahl der Anwendungen, die für eine oder andere Aufgaben verwendet werden sollen ...). Ganz ehrlich, manchmal schalte ich ein topoder procexpweine beim Anblick der Erinnerung, die von den unschuldigsten Programmen verwendet wird.

Ich kann dies angehen, indem ich mich weiter in die oben aufgeführte Richtung dränge und im Wesentlichen versuche, mich und die von mir verwendeten Programme einzuschränken (ich glaube, ich liebe Cli-Programme aus diesem Grund sehr), aber ich kann auch nicht anders, als nachzudenken dass wir es vielleicht falsch machen.

Moderne Werkzeuge für moderne Bedürfnisse

Natürlich sind übergeordnete Sprachen wohl besser und rechtfertigen ihren Wert an Eigengewicht. Einige Designentscheidungen wurden zu dieser Zeit in vielen Werkzeugketten aus guten (oder angeblich gut gemeinten) Gründen getroffen. Gemeinsame Bibliotheken, Speichermodelle, Vorprozessoren, Typsysteme usw. Aber einige sind mit unserer modernen Hardware möglicherweise rentabler als andere, und ich wäre gespannt darauf, einige ernsthafte Studien zu diesem Thema zu lesen.

Meine Frage ist also, gibt es einen Anhänger für das Benchmarks-Spiel und andere, die sich auf einen Vergleich des Basis-Laufzeit-Speicherverbrauchs der Sprachen konzentrieren?

Und noch weiter, gibt es einige Studien, die dies mit anderen Parametern vergleichen (ähnlich wie in diesem Artikel , zum Beispiel für andere Kriterien, die ebenfalls auf dem Benchmarks-Spiel basieren )?


3
Warum ist das Benchmark-Spiel nicht ausreichend? Es ist wahrscheinlich die beste Ressource, die es gibt, und es behandelt bereits den Speicherverbrauch im Detail.
Robert Harvey

@RobertHarvey: Es liefert zwar Speicherinformationen, ist jedoch nicht für die "Basis" -Laufzeit vorgesehen. Außerdem finde ich das Extrahieren von Informationen aus dem Benchmarks-Spiel ziemlich geheimnisvoll (umso mehr Anerkennung dafür, dass dieser Artikel mit seinen Daten einen erstaunlichen Job macht, obwohl es nicht der ist, den ich suche).
Haylem

1
Es könnte den Leuten helfen, die versuchen, Ihre Frage zu beantworten, wenn Sie Informationen darüber bereitstellen, welches Problem Sie lösen möchten, mit einigen Besonderheiten wie Ihrer Ausführungsumgebung und Ihrem gewünschten Speicherverbrauch. Die Antwort wird sich unterscheiden, wenn Sie Software für eine eingebettete Umgebung schreiben (in der die verwendete Speichermenge wichtig ist), im Vergleich zu einem Desktop-Computer auf dem neuesten Stand der Technik (bei dem der Speicherverbrauch im Wesentlichen keine Rolle spielt, es sei denn, das Softwaresystem ist dies sehr groß).
Robert Harvey

2
How much memory consumption makes you weep?30 MB für einen inaktiven Chrome-Tab ohne Erweiterungen, 100 MB für ATIs CCC, sogar 11 MB für ein inaktives Googletalk-Plugin oder 23 MB für einen inaktiven Druckertreiber. Diese Dinge und vieles mehr. Das Chrombeispiel ist etwas außerhalb des Parks, da es ein komplexeres Beispiel ist, aber die anderen überraschen mich schon ziemlich.
Haylem

Antworten:


7

Ich habe einige Teilinformationen gefunden, daher werde ich beginnen, meine Ergebnisse in meiner eigenen Antwort zusammenzufassen. Bitte lassen Sie sich dadurch nicht davon abhalten, Ihre eigenen Antworten beizutragen (oder diese zu bearbeiten).

Bestehende Literatur:

  • Ein empirischer Vergleich von 7 Programmiersprachen - Prechelt (2000) [ PDF ]

    Ein bisschen veraltet, deckt aber einen Teil des Materials ab, das mich interessiert, und gibt einen Überblick über die Verwendung und Ausdruckskraft des Laufzeitspeichers. Die Ergebnisse mögen jetzt sehr unterschiedlich sein, aber es ist ein interessanter Anfang.

  • Geschwindigkeit, Größe und Zuverlässigkeit der Programmiersprachen - Marceau (2009) [ Blog ]

  • Verwendeter Code, Verwendete Zeit Formen aus dem Benchmark-Spiel [ u32 , u32q , u64 , u64q ]

    Obwohl es sich nicht um den Speicherbedarf zur Laufzeit handelt, ist Marceaus Arbeit mehr oder weniger die Art von Referenz oder empirischer Studie, die ich in Bezug auf Inhalt und Qualität für diese Kriterien finden würde. Ein gutes Beispiel für das, wonach ich suche, nur für verschiedene Metriken. Der zweite Artikel ist ein Follow-up auf der Benchmarks Game-Website und wurde kurz nach Marceaus Arbeit veröffentlicht (und verweist darauf), mit neueren Bildschirmen und mehr Sprachen, jedoch immer noch ohne Details zum Laufzeitspeicher. Jedes Diagramm auf diesen Seiten führt dann zu einem Vergleich von Sprache zu Sprache, die jedoch Speicherinformationen auf hoher Ebene liefern.


Marceaus Arbeit ist eine Übung zum Geschichtenerzählen, und einige der Geschichten machen keinen Sinn - "Tötet die Einführung von Funktionsmerkmalen die Leistung?" ignoriert die einfache Tatsache, dass einige dieser "funktionalen Sprach" -Programme möglicherweise keine funktionalen Merkmale verwenden. Die Daten stammen aus einer früheren Inkarnation des Benchmark-Spiels. und wurde ursprünglich ohne Verständnis verwendet, so dass es nach der Veröffentlichung mehrere Korrekturzyklen gab (siehe Kommentare).
Igouy

Für Ihren "Basislaufzeit-Speicherverbrauch" ist ein einfacher Vergleich von "Hallo Welt" -Programmen möglicherweise so gut, wie Sie es benötigen.
Igouy

@igouy: ja. Daran habe ich nicht gezweifelt, aber ich hatte gehofft, dass ich das nicht selbst experimentieren und dokumentieren / pflegen muss :) Tatsächlich wäre sogar weniger als eine Hallo-Welt in Ordnung, da in einigen Fällen nicht einmal eine Verknüpfung zu (oder) erforderlich wäre Laden) zum Beispiel Druckroutinen. (Deaktivieren von Compiler-Optimierungen und anderen Dingen könnte ebenfalls ratsam sein)
Haylem

@igouy: In Bezug auf Marceaus Arbeit habe ich die Seite, die Kommentare, die aktualisierten Benchmark-Spieleseiten gelesen und war mit ihm in Kontakt. Der Artikel ist meiner Meinung nach immer noch eine gute Referenz. Die Tatsache, dass es unvollkommen ist, nimmt seinen Wert nicht weg und es geht immer noch in die Richtung, die ich finden (oder neu erschaffen) möchte.
Haylem

"aber ich hatte gehofft, das nicht selbst experimentieren und dokumentieren / pflegen zu müssen" - schauen Sie sich die Messungen im InternetArchiv an . Unglücklicherweise für Sie entschied ich, dass die Speichermessungen für Hello World völlig irreführend waren und hörte nach 2005 auf, sie anzuzeigen.
igouy

1

Dies beantwortet die Frage nicht per say, ändert aber möglicherweise die Perspektive ein wenig. Ich denke an das Protokoll aus dem Chat, um den Ton für diesen Antwortkommentar festzulegen, der sicherlich Gegenstand vieler Abstimmungen sein wird.

Es gibt Menschen, Hardwareanbieter, Werkzeuganbieter und Programmierer, die sich Sorgen um die Effizienz machen. Vorerst wird es für sie und uns alle ein wachsendes Problem sein. Diese Bedenken wurzeln in mobilen Geräten, insbesondere in den leistungsstarken Monstern mit Batteriefressern, den größten Bildschirmen und den stärksten Radios.

Um noch einen Schritt zurückzutreten, ein Teil des Grundes, warum wir uns in der heutigen Situation befinden, mit vergleichsweise massiven Frameworks und einer leichten Missachtung der allgemeinen Effizienz, die über die Hardwareverbesserungen hinausgeht, ist das Erbe. Die Kompatibilität mit Legacy-Systemen verankert uns neben der Kompatibilität auch die Kompatibilität. Es ist nicht so sehr die Schuld einer Laufzeit auf oberster Ebene, da sie im Wesentlichen dieselbe Laufzeit haben, die in einer anderen Betriebsumgebung (z. B. Xbox, Windows Mobile Pre 7/8 / Surface, Java Micro Framework) recht effizient und performant wirkt , usw).

Vergleichen Sie den Grad der Kompatibilität eines Desktops mit seiner Legacy-Software mit dem Grad der Kompatibilität eines Mobilgeräts.

Bei den Mobilgeräten bemühen sich die Gerätehersteller um eine gewisse Kompatibilität, haben die Kompatibilität jedoch nicht zu einem zentralen Fundament gemacht. Wenn Sie die Wahl haben, weiterhin Kompatibilität bereitzustellen und das Design des mobilen Systems voranzutreiben, bewegt sich das mobile System vorwärts.

Für Desktops scheint das Gegenteil der Fall zu sein. Wenn eine signifikante bahnbrechende Änderung die Vermarkter oder Early Adopters fälschlicherweise trifft, werden die erforderlichen Funktionen und das erforderliche Redesign um ein Vielfaches in den Hinterraum verschoben. Irgendwann erinnere ich mich an Gerüchte, wonach wir als Windows-Benutzer ein völlig und dramatisch neues Dateisystem mit Windows XP finden würden, dann in Vista, später das gleiche für Seven und schließlich wieder in Eight, aber nein, seitdem nur schrittweise verbessert haben wir es zum ersten Mal unter Windows 2000 gesehen? Das neue Dateisystem hat lange rumgesessen, wurde verschrottet, und wie auch immer Gerüchte die Geschichte danach bestimmen, kann ich nicht sagen. Das ist wahrscheinlich der größte bekannte Fall, aber ich bin mir sicher, dass dies nicht der einzige große Fall ist.

Selbst mit den neuesten Tablets und mobilen Betriebssystemen ist Microsoft, das einst den Markt geprägt hat, jetzt in einem Death Match nicht nur mit Verbrauchern, sondern auch mit einem Schatten seiner selbst aus der Desktop-Abteilung verflochten. Das Tablet musste eine signifikante Interoperabilität mit dem Desktop-Gegenstück aufweisen. Nein, es konnte aufgrund von Architekturunterschieden nicht perfekt damit spielen, aber auch aufgrund der archaischen Natur der Desktop-Grundlagen hat es erhebliche Opfer gebracht.

Windows ist sicherlich das leichte Ziel für jede Art von Kritik in dieser Situation, aber andere Plattformen sind alles andere als "sündenfrei". Im Linux-Ökosystem lauern viele Relikte, von denen ich sicher bin, dass sie große Bestürzung für systematische Verbesserungen hervorrufen.

Die Wirtschaft spielt eine große Rolle in dieser Gleichung; Wie wir unsere Computer und Anwendungen auf der einen Seite finanzieren und wie sie auf der anderen Seite finanziert werden, folgt erstaunlich unterschiedlichen Mustern. Während Wintel einst die Veralterung stark beeinflusste, haben Apple und Google daraus einen nahezu strengen Zeitplan gemacht. Dies ist weiter vom Kurs entfernt, als ich beabsichtigt hatte, also werde ich gehen, wie es sitzt, und die Leser es von dort nehmen lassen.

Wenn große Anbieter ihre Veralterungs- und Preismodelle ändern, können sie beginnen, größere Änderungen mit einer gleichmäßigeren Geschwindigkeit vorzunehmen. Die Frameworks der obersten Ebene, die von den Sprachen höchster Ordnung gesteuert werden, werden in gewisser Weise schrumpfen, da sie ihre Aufgabe auf hoher Ebene mit einer geringeren Effizienz wie auf niedrigerer Ebene erfüllen können, da die ineffiziente Zwischenkompatibilität und die Ebenen auf niedriger Ebene dies tun drastisch reduziert werden, wenn nicht beseitigt.


Antwortet in der Tat nicht wirklich, es ist eher so, als würden Freiformgedanken den Hintergrund der Frage ergänzen :) Danke und +1 für den Einblick. (Außerdem möchte ich klarstellen, dass ich niemals beabsichtigte, Microsoft-Systeme als Teil der Schuldigen herauszustellen. Jedes Betriebssystem als das gleiche Problem, wenn das Speichermodell des Systems und das ausführbare Format dies zulassen).
Haylem

Es ist sicherlich nicht meine Absicht, Microsoft anzustupsen, aber sie sind für die meisten in dieser Hinsicht der einfachste Fall. Andere große Namen, traditionelle Anbieter, sitzen im selben Boot, wenn auch in etwas anderer Hinsicht (z. B. Datenbanken und Netzwerkgeräte in Industriequalität; wie viele Kompromisse gehen sie vor, die ansonsten eine signifikante Verbesserung ihrer zugrunde liegenden Produktinnovation und ihres Werts behindern). . Noch näher an der Heimat der Produkte, die jeder von uns unterstützt, tragen wir dieses sprichwörtliche Kreuz bis zu dem einen oder anderen Grad.
JustinC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.