Warum sind die Programme so groß?


186

Wenn wir uns das alte Programm Netscape Navigator oder eine frühe Version von Microsoft Word ansehen, waren diese Programme weniger als 50 MB groß. Wenn ich jetzt Google Chrome installiere, sind es 200 MB und die Desktop-Version von Slack 300 MB. Ich habe über eine Regel gelesen, dass Programme den gesamten verfügbaren Speicher belegen, egal wie viel es ist, aber warum?

Warum sind die derzeitigen Programmgrößen im Vergleich zu vor 10 oder 15 Jahren so groß? Die Programme haben nicht wesentlich mehr Funktionen und sehen nicht sehr unterschiedlich aus. Was ist jetzt das Rohstoffschwein?


134
Nur 4 mal so groß ?! Das ist erstaunlich, wenn man bedenkt, wie viel mehr ein moderner Browser leistet
Richard Tingle

23
Als Randnotiz, ich glaube, "einige Regel, dass Programme den gesamten verfügbaren Speicher nehmen, egal wie viel es ist, aber warum?" bezieht sich wahrscheinlich eher auf Arbeitsspeicher als auf physischen Speicherplatz, zumindest würde dies meine Interpretation sein. Könnte falsch sein.
Trotski94,

103
Sie sagen also, dass ein Programm, das früher 10 US-Dollar Festplattenspeicher in Anspruch nahm, jetzt etwa 30 Cent Festplattenspeicher in Anspruch nimmt? Es fällt mir schwer, mir darüber Sorgen zu machen.
Eric Lippert

49
"Die Programme machen nicht wesentlich mehr Funktionen" - guter Herr Mann. Schauen Sie sich einfach die HTML 4-Spezifikation und die CSS 1-Spezifikation an (keine Sorge, ich werde warten - es wird nicht lange dauern, auch wenn Sie sie lesen). Netscape 4 hat es nicht einmal geschafft, diese richtig zu implementieren. Allein die Menge an neuem und verrücktem HTML und CSS, die Chrome unterstützt, ist beachtlich. Außerdem hat es Registerkarten. Und aktualisiert sich alle sechs Wochen.
Paul D. Waite

13
BTW. 50 MB in Netscape-Zeiten waren groß, aber für die Aufzeichnung beinhaltete es nicht nur einen Webbrowser, sondern auch einen Mail-Client und einen HTML-Editor und vielleicht sogar etwas anderes.
el.pescado

Antworten:


266

"Ganz anders aussehen" ist eine Frage der Wahrnehmung. Heutige Grafiken müssen bei völlig anderen Bildschirmauflösungen als früher gut aussehen, mit dem Ergebnis, dass ein 100x100-Bild, das früher mehr als gut genug für ein Logo war, jetzt fürchterlich klebrig aussieht. Es musste durch ein 1000x1000-Bild desselben ersetzt werden, was genau dort einen Faktor von 100 darstellt. (Ich weiß, dass Sie stattdessen Vektorgrafiken verwenden können, aber das unterstreicht nur den Punkt: Der Rendering-Code für Vektorgrafiken musste zu Systemen hinzugefügt werden, die ihn zuvor nicht benötigten. Dies ist also nur ein Kompromiss aus einer Art der Vergrößerung zum anderen.)

"Anders arbeiten" ist ebenfalls eine Frage der Wahrnehmung. Die heutige Browser hat massiv mehr Dinge , als ein aus dem Jahr 1995. (Versuchen Sie das Internet mit einem historischen Laptop an einem regnerischen Tag surfen -. Sie finden es fast unbrauchbar ist) Nicht viele von ihnen verwendet werden , sehr viel, und der Verwendung von 90 völlig unbekannt sein kann % von ihnen, aber sie sind da.

Hinzu kommt natürlich die allgemeine Tendenz, weniger Zeit für die Optimierung der räumlichen Gegebenheiten und mehr für die Einführung neuer Funktionen aufzuwenden. Dies ist eine natürliche Nebenwirkung größerer, schnellerer und billigerer Computer für jedermann. Ja, es wäre möglich, Programme zu schreiben, die so ressourcenschonend sind wie 1990, und das Ergebnis wäre erstaunlich schnell und glatt. Aber es wäre nicht mehr wirtschaftlich; Die Fertigstellung Ihres Browsers würde zehn Jahre dauern. Bis dahin hätten sich die Anforderungen vollständig geändert. Früher wurde bei der Programmierung größter Wert auf Effizienz gelegt, weil die langsamen kleinen Maschinen sie früher dazu gezwungen hatten, und alle anderen machten das auch. Sobald sich dies änderte, verlagerte sich der Engpass für den Programmerfolg von überhaupt lauffähig auf lauffähigImmer mehr glänzende Dinge , und dort sind wir jetzt.


120
Konkrete Beispiele für Dinge, die ein moderner Browser beinhalten sollte, sind Kryptobibliotheken, die Unicode-Datenbank, eine JavaScript-Laufzeit und ein optimierter JIT-Compiler, Videocodecs, ein PDF-Renderer sowie eine komplizierte Rendering-Engine und Parser für alle unterstützten MIME-Typen. Das summiert sich, aber im Gegensatz zu Spielen benötigen Browser nicht viele hochauflösende Assets. Ein moderner Firefox-Download wiegt nur 40–50 MB komprimiert.
amon

23
"Das Ergebnis wäre erstaunlich schnell und glatt" - klingt nach Wunschdenken.
Doc Brown

16
@amon Vergiss nicht, dass Browser auch andere Arten von Ressourcen und eine komplette API für Plugins und so weiter enthalten. Sie verfügen sogar über Debugging-Tools (Profiler, Netzwerkanalysatoren, Elementinspektoren, eine voll funktionsfähige Konsole, Debugger und vieles mehr). Browser rücken näher an ein gesamtes Betriebssystem heran, als wir uns alle vorstellen können. Es gibt sogar eine laufende Diskussion zur Verwendung von Web Assembly! Das OP sollte erstaunt sein über die Menge Mist, die sie in einem Browser anhäufen können.
Ismael Miguel

10
@IsmaelMiguel Soweit Chrome OS angeht, Browser bereits sind ein ganzes Betriebssystem. ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space Diese. Wenn ich Code schreibe, optimiere ich nicht auf Speicherplatz oder Geschwindigkeit. Ich optimiere für die Wartung. Es ist wichtiger, dass die Codebasis leicht geändert werden kann, als schnell oder klein zu sein. Ich kann davon ausgehen, dass ich für jede Beschwerde über die Programmgeschwindigkeit zehn Anfragen nach neuen Funktionen und null Anfragen bekomme, um sie zu verkleinern.
user2023861

109

Wenn Sie Netscape Navigator auf einen modernen Browser vergleichen zu können , gibt es einen massiven Unterschied in der Funktionalität. Vergleichen Sie einfach die HTML 3.2- Spezifikation (51 Seiten, wenn ich eine Druckvorschau mache) mit der aktuellen HTML-Spezifikation (PDF-Version ist 1155 Seiten). Das ist eine 20-fache Vergrößerung.

Netscape Navigator hatte kein DOM und kein CSS! Es gab keine dynamischen Änderungen am Dokument, kein JavaScript, das das DOM oder die Stylesheets modifizierte. Keine Tabs. Kein Audio oder Video. Ein moderner Browser ist ein weitaus komplexeres Programm.


12
Ja, neuere Browser bieten Animationen, Verläufe, Bildfiltereffekte, JavaScript, 2D-Grafiken (Canvas), 3D-Grafiken mit WebGL, Audiogenerierung, Gamepad (!), Videodekodierung, erweiterte clientseitige Speicherung und Peer-to-Peer-Kommunikation (WebRTC), Geolocation, WebSocket, WebCryptography, MIDI, Zugriff auf Mikrofon / Webcam, Benachrichtigungen usw.
ysdx

1
Fügen Sie das Ausführen von mehr Aufgaben (DOM, CSS, Javascript) hinzu, um auch mehr Immobilien zu haben (Mehrere Monitore, massive Auflösungssteigerung: Computerbildschirme werden größer: 1999 bis 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k und mehr ... 1080 bis 4k vervierfachen die Auflösung ... 8k vervierfachen sich erneut.
WernerCD

7
@WernerCD Einfach einen größeren Bildschirm zu haben, erfordert keine größere Binärdatei. Ein 64 mal 64 Pixel großes 32-Bit-Symbol benötigt den gleichen Speicherplatz auf der Festplatte, unabhängig davon, ob es auf einem 800x600- oder einem 2560x1440-Monitor angezeigt wird. Durch Ändern der Fenstergröße wird die Größe der Binärdatei nicht geändert. Was bei Displays wichtig ist, ist, wenn Sie anfangen, Dinge wie Pixelverdopplung zu tun, dann benötigen Sie größere Ressourcen, um weiterhin scharf (äh) auszusehen.
8bittree,

1
@ 8bittree, es kann eine höhere Anforderung an die Software-Performance stellen. Und performanterer Code kann komplexer sein (z. B. benötigt eine Website mit Canvas wahrscheinlich mehr Komplexität und Code als eine mit SVGs). Aber ja, du hast größtenteils recht.
Paul Draper

1
Zwar ist es sicher richtig, dass aktuelles HTML viel mehr leistet als HTML 3.2, aber die Spezifikation selbst ist auch viel detaillierter, was der Spezifikation eine erhebliche Menge an Inhalt hinzufügt. Vergleichen Sie die Länge der HTML 3.2-Beschreibung des EMElements - acht oder neun Wörter - mit der Länge derselben in der HTML 5-Spezifikation - für mich mehr als ein Bildschirm mit umgebendem Material, das das Element beschreibt, wo es ist anwendbar und wie es verwendet werden soll.
ein Lebenslauf vom

79

Ein Grund dafür ist, dass die in Anwendungen gepackten Daten größer sind, da sie eine höhere Auflösung und Qualität aufweisen. Ein Symbol in den Tagen von Netscape war höchstens 32 x 32 Pixel groß, mit höchstens 8 Bit Tiefe (möglicherweise nur 4), während es jetzt wahrscheinlich 64 x 64 Pixel groß ist und in Echtfarben mit Transparenz, dh 32 Bit Tiefe, angezeigt wird. Das ist 16 mal größer. Und der Speicherplatz ist so günstig, dass sich die Leute oft nicht einmal die Mühe machen, die Option "Komprimiert" zu aktivieren, wenn sie ein PNG generieren.

Ein weiterer Grund ist, dass Anwendungen heutzutage eine umwerfende Datenmenge mit sich führen, die ältere Anwendungen nicht hatten. Heutzutage gibt es Anwendungen, die zusammen mit einer Präsentation "Erste Schritte" in Videos ausgeliefert werden .

Ein weiterer Grund ist, dass Programmiersprachen heutzutage in der Regel mit umfangreichen Laufzeitumgebungen mit jeweils 100 MB zusammenarbeiten. Auch wenn Sie nicht alle Funktionen Ihrer Laufzeitumgebung nutzen, müssen Sie das Ganze mit Ihrer App packen.

Der Hauptgrund ist jedoch, dass es heutzutage Unmengen von Bibliotheken gibt, die wir in unseren Anwendungen verwenden können, und wir haben eine Kultur der Bibliotheksnutzung entwickelt, um die ständige Neuerfindung des Rads zu vermeiden. Wenn Sie mit der Nutzung von Bibliotheken beginnen, tauchen natürlich mehrere Fragen auf, und wir haben die Gewohnheit, die liberalsten Antworten darauf zu geben:

  • Lohnt es sich, noch eine Bibliothek hinzuzufügen, wenn sie nur von einer meiner Funktionen verwendet wird? - ja.

  • Lohnt es sich, noch eine weitere Bibliothek einzubeziehen, wenn ich nur einen winzigen Teil des gesamten Funktionsumfangs dieser Bibliothek benötige? - ja.

  • Lohnt es sich, noch eine weitere Bibliothek einzubeziehen, wenn ich durch die Einbindung nur 2 Arbeitstage Zeit habe? - ja.

  • Lohnt es sich, mehrere Bibliotheken einzubeziehen, die mehr oder weniger denselben Zweck erfüllen, nur weil verschiedene Programmierer auf meiner Gehaltsliste bereits mit verschiedenen Bibliotheken vertraut sind? - ja.

    (Bitte beachten Sie, dass ich nur diese Tendenzen beobachte und keine Aussage darüber mache, ob ich ihnen zustimme oder nicht.)

Ein weiterer erwähnenswerter Grund ist, dass einige Benutzer bei der Entscheidung, welche Anwendung sie unter mehreren Optionen verwenden möchten, der Ansicht sind, dass die Anwendung, die mehr Platz einnimmt, mehr Funktionen bietet, schickere Grafiken usw. (was natürlich völliger Unsinn ist) .)

Verhält sich Software also wie Gas? Nimmt es tendenziell den gesamten verfügbaren Platz ein? In gewissem Sinne ja, aber nicht in alarmierendem Ausmaß. Wenn wir uns ansehen, was den meisten Speicherplatz auf unseren Laufwerken einnimmt, ist die Antwort für die meisten von uns, dass es sich bei weitem nicht um Anwendungen handelt, sondern um Medien wie Filme und Musik . Software hat sich nicht mit der Geschwindigkeit aufgebläht, mit der sich die Speicherkapazität vergrößert hat, und es ist unwahrscheinlich, dass dies jemals der Fall sein wird. In Zukunft dürften Anwendungen daher einen vernachlässigbaren Teil des für Benutzer verfügbaren Speicherplatzes ausmachen.


17
Das ist die richtige Antwort. Die (derzeit) höher bewerteten Kommentare erwähnen mehr Funktionalität, aber das erklärt die vergrößerte Größe nicht vollständig. Die Größe ergibt sich aus den enthaltenen Bibliotheken , die diese Funktionen bereitstellen.
user1936

5
@ IsmaelMiguel Nun, ich sprach über regelmäßige Benutzer. Spiele sind auch ein Sonderfall, da es sich bei diesen 35 GB hauptsächlich um Medien, keinen Code oder Bibliotheken handelt. Zufällig handelt es sich um Medien, die Sie nur über eine spezielle Anwendung anzeigen können, nämlich das Spiel. Aber selbst für einen Spieler sind 35 GB nichts auf den heutigen Multi-Terabyte-Laufwerken. Angenommen, wenn Sie ein Spieler sind, der darauf besteht, ein kleines Laufwerk zu besitzen, sind Sie bei weitem nicht der Repräsentant der Benutzer da draußen.
Mike Nakis

2
@MikeNakis Nicht jeder Spieler hat ein 1-TB-Laufwerk oder das Geld, um eine 256-GB-SSD zu kaufen. Einige, wie ich, haben eine 128-GB-SSD oder einen Laptop mit weniger als 500 GB. Vor einiger Zeit waren 80% meines SSD-Speicherplatzes einfach Spiele. Es waren einfach 3-4 Spiele, die den Raum fraßen. Und im Spiel selbst hat fast jeder einen Laptop und spielt darauf.
Ismael Miguel

5
@Mike oh, das macht nichts. Wenn wir von der Größe einer Anwendung sprechen, meinen wir entweder die Größe der herunterladbaren Installationsdatei oder den gesamten Speicherplatz, den die Anwendung nach der Installation auf der Festplatte belegt. Dies schließt Bibliotheken, Medien, Daten und alles ein. Und um Inkompatibilitätsprobleme zu vermeiden, werden Anwendungen heutzutage in der Regel zusammen mit den meisten benötigten Bibliotheken ausgeliefert, anstatt zu hoffen, dass die Bibliotheken bereits installiert sind und die richtige Version usw. haben. Die Größe der ausführbaren Hauptdatei Nicht wirklich von Interesse, noch von irgendeiner Konsequenz.
Mike Nakis

3
@IsmaelMiguel Für einen Programmierer sind es wahrscheinlich die verschiedenen virtuellen Maschinen, Docker-Container und dergleichen. Es gibt kein besseres Aufblähen als das Multiplizieren ganzer aufgeblähter Systeme ;-)
cmaster

16

Zusätzlich zu den anderen Ansern hätte es vor 10 Jahren typischerweise separate Versionen für lokalisierte / internationalisierte Versionen gegeben. Nun ist es im Allgemeinen so, dass Programme die vollständige Lokalisierungsunterstützung in jeder veröffentlichten Version bündeln, die die Programmgröße auffüllt.


5
Ich kann mich irren, aber ich arbeite unter der Illusion, dass Saiten der kleinste Teil dieses Problems sind. Es gibt zwar viele Sprachen, aber die Anzahl der Zeichenfolgen, die ein Benutzer jemals sieht, ist sehr begrenzt. Schließlich besteht eine der sichersten Möglichkeiten für ein Fehlschlagen Ihrer Benutzeroberfläche darin, zu viel Text einzufügen.
25.

5
Zusätzlich zu , was gesagt @cmaster, hat Firefox speziell nicht bündelt vollständige Lokalisierung (und während ich denke darüber nach , ebenso wenig wie Openoffice.)
BenjiWiebe

2
@cmaster Strings, nein. Aber lokalisiertes Video und Audio, besonders im Zusammenhang mit Spielen? IIRC gab es ein 60 GB Spiel (GTA V?), Bei dem> 10 GB ausschließlich lokalisiertes Audio waren. Das ist ein bedeutender Teil.
Bob,

@ Bob Richtig, ich habe nicht über Spiele nachgedacht, sie scheinen die einzige große Ausnahme zu dem zu sein, was ich geschrieben habe.
cmaster

Für jede Sprache kann sich die Zeichenfolgentabelle auf einige zusätzliche KBytes summieren. Lediglich die Anwendungssymbole stellen normalerweise die Gesamtgröße aller Zeichenfolgeninhalte in den
Schatten

13

Ein Grund sind Abhängigkeiten. Ein Programm mit vielen Funktionen und einem guten Aussehen muss noch viele Dinge erledigt werden - Verschlüsselung, Rechtschreibprüfung, Arbeiten mit XML und JSON, Textbearbeitung und viele andere Dinge. Woher würden sie kommen? Vielleicht rollst du deine eigenen und hältst sie so klein wie möglich. Höchstwahrscheinlich verwenden Sie Komponenten von Drittanbietern (möglicherweise MIT-lizenziertes Open Source), die viele Funktionen haben, die Sie eigentlich nie benötigen. Wenn Sie jedoch eine einzelne Funktion von einer Drittanbieterkomponente benötigen, müssen Sie häufig die gesamte Komponente mit sich herumtragen. Sie fügen also immer mehr Abhängigkeiten hinzu und während sie sich entwickeln und erweitern, wächst auch Ihr Programm, das von ihnen abhängt.


Ich bin ein bisschen neugierig, warum das über Nacht zwei Abstimmungen gekostet hat.
Sharptooth

6
Ich habe es nicht getan, aber ich glaube nicht, dass dies die Frage wirklich tief genug beantwortet. Es heißt so ziemlich nur "Software wird größer, weil sie mehr Zeug macht", und Sie werden anhand der anderen Antworten erkennen, dass es wirklich mehr als das gibt.
Leichtigkeitsrennen im Orbit

1
Ein verwandter Faktor ist, dass in Systemen, die statische Verknüpfungen verwenden, ein Linker möglicherweise nur den tatsächlich verwendeten Code einlesen muss (einige Linker würden immer alles einlesen, aber bessere versuchen, selektiv zu sein). Wenn Sie dynamische Verknüpfungen verwenden, insbesondere wenn Module gemeinsam genutzt werden können, ist es unmöglich zu wissen, welche Funktionen von anderem Code benötigt werden, der das Modul gemeinsam nutzen möchte, selbst wenn der erste Code, der ein Modul installiert, nur eine Funktion benötigt.
Supercat

@sharptooth Ich wundere mich nicht einmal mehr. Während in den meisten Fällen das System funktioniert, sehe ich auch, dass furchtbar falsche Antworten wie verrückt hochgestuft und akzeptiert werden, während die richtigen nur allzu oft in Vergessenheit geraten ...
Brian Knoblauch

10

Während die Grafik / Benutzerfreundlichkeit in der Tat Faktoren sind, gibt es eine Menge davon, die Bibliothek / überschüssigen kompilierten Code.

Ein Beispiel dafür, wie klein Code noch sein kann: MenuetOS, ein vollständiges 64-Bit-Betriebssystem mit leistungsstarken Apps, das auf eine einzelne Diskette passt.

Ein Beispiel dafür, wie groß Code ohne ersichtlichen Grund sein kann: Ich habe eine einfache Textausgabe "Hallo, Welt!" in Ada vor kurzem. Die kompilierte ausführbare Datei war über 1 MiB !. Dieselbe ausführbare Datei in der Assembly ist nur ein KiB oder 2 (und der größte Teil davon ist übermäßig ausführbar, der aktuelle Ausführungscode besteht aus mehreren zehn Bytes).


3
Was ist eine Diskette? ;)
500 - Interner Server Fehler

@ 500-InternalServerError Was ist Ada? : D
BenjiWiebe

3
Für Neueinsteiger beträgt die Diskette etwa 1,4 MiB
Sarge Borsch

3
Ich habe moderne Ada-Executables unter 200 Bytes gesehen. Wenn Ihr Compiler jedoch standardmäßig eine vollständige Tasking-Laufzeit einbindet, unabhängig davon, ob Sie Tasks verwenden oder nicht, ist mit etwa 1 MB zu rechnen. Und es ist normalerweise nicht die Mühe wert, es auszuziehen.
Brian Drummond

@BrianDrummond, klingt wie eine wirklich beschissene Laufzeit oder eine beschissene Laufzeit und Bibliothek und Linker. In einem Schulungsvideo, das ich vor vielen Jahren gesehen habe, haben Jean Ichbiah und andere erwähnt, dass eine typische Ada-Laufzeit (für die Originalversion der Sprache) etwa 4 KB beträgt. Aus Neugier überprüfte ich dies mit dem Laufzeitpaket TI 320C30, das wir verwendeten. Er hatte Recht mit dem Geld.
John R. Strohm

7

Es ist trivial, dass Software so gebaut werden muss, dass sie zwei Dinge erfüllt: Die Benutzer und die verfügbare Hardware. Ein Programm ist für seinen Zweck geeignet, wenn es mit der dem Benutzer zur Verfügung stehenden Hardware rechtzeitig das tut, was der Benutzer wünscht. Na duh. Da sich die Hardware in praktisch allen messbaren Dimensionen verbessert, nimmt die Anzahl der diskreten Programme zu, die von "nicht fit" zu "fit" wechseln.

  • Höhere Sprachen ermöglichen es, Ideen in weniger Code und Zeit als zuvor auszudrücken. Diese geringere Komplexität ermöglicht es umgekehrt, immer komplexere Ideen auszudrücken.
  • Wenn Sie mehr Daten mit der Anwendung bündeln, können Sie sie sofort besser nutzen. Zum Beispiel wird es wahrscheinlich nicht lange dauern, bis Rechtschreibprüfungsanwendungen mit jeder der Menschheit bekannten Sprache gebündelt werden - schließlich sind es nur ein paar Gigabyte.
  • Hardware-Kompromisse ermöglichen Entwicklern und Benutzern eine größere Auswahl an Ressourcen, die sie interessieren. Siehe zum Beispiel FLAC / OGG gegen WAV, SVG gegen PNG, Datenbankindizes.
  • Humane Interfaces tauschen häufig das aus, was früher für die Benutzerfreundlichkeit eine enorme Menge an Hardware bedeutet. Anti-Aliasing, hohe Auflösungen, schnelles Auffrischen und Wischen zwischen einzelnen Bedienfeldern sorgen für ein realistischeres und damit intuitiveres und verlässlicheres Erlebnis.

6

Dies gilt definitiv für Android-Anwendungen. Vor vier Jahren nahm eine einfache App etwa 2-5 Megabyte Platz ein. Heutzutage benötigt eine einfache App etwa 10-20 Megabyte Speicherplatz.

Je mehr Speicherplatz verfügbar ist, desto größer ist die App.

Ich denke, dass es bei Android zwei Hauptgründe gibt:

  • Google hat das Android-Framework erweitert und viele neue Funktionen hinzugefügt.

  • Entwickler interessieren sich nicht mehr. Bilder sind in einer viel höheren Auflösung enthalten (natürlich sind die Bildschirmauflösungen des Smartphones erhöht), Bibliotheken von Drittanbietern sind gedankenlos enthalten.


1
Dieser letzte Punkt ist genau richtig.
Leichtigkeitsrennen im Orbit

3
Ich habe insgesamt eine Android-App erstellt und die APK beträgt 0,05 MB. Andererseits macht es nicht so viel. Ich frage mich immer noch, warum eine Stoppuhr-App (mit einem ähnlichen Funktionsumfang wie meine, wenn auch völlig anderen) mehrere MB benötigt.
immibis

5
Der letzte Punkt ist falsch, die Entwickler kümmern sich darum. Wir müssen nur verschiedene Prioritäten aufeinander abstimmen, und es macht Sinn, diese App ein wenig größer zu machen.
NPSF3000,

Es hat auch nicht geholfen, dass das SDK (zu der Zeit) darauf bestand, meiner 0,05-MB-App eine Bibliothek von mehr als 5 MB hinzuzufügen, die ich nicht brauchte, und ich musste daran denken, sie vor einem Release-Build zu entfernen.
immibis

4

Ein Großteil davon hängt von der Entwicklerzeit und den Kosten dieser Zeit ab. In den Tagen, in denen Visual Basic zum ersten Mal auf den Markt kam, konkurrierte es mit C / C ++ und das große Problem war, dass man in ANSI C für Windows 'Hello World' in vielleicht 15K schreiben konnte. Das Problem mit VB war, dass Sie immer den Albatros der 300K-Laufzeitbibliothek hatten.

Jetzt könnten Sie das 10-fache der Größe Ihres VB-Programms erreichen und es wären immer noch nur ein paar K mehr, aber das 10-fache der Größe Ihres C / C ++ - Programms und Sie sehen ein paar Monate mehr Entwicklung.

Am Ende ist das Aufblähen Ihrer Anwendungen ein geringer Preis für die enormen Sprünge in der Entwicklungsproduktion, die Preissenkung und die enormen Fähigkeiten, die in den alten Tagen der handgefertigten Entwicklung niemals möglich gewesen wären. Wenn Programme klein und schnell, aber auch schwach waren, inkompatibel miteinander, unterdurchschnittlich und teuer in der Entwicklung.


2
Dieser Beitrag ist ziemlich schwer zu lesen (Textwand). Hätten Sie etwas dagegen bearbeiten sie in eine bessere Form ing?
gnat

1
"10x die Größe" von Hello World erfordert "Monate mehr Entwicklung"? Zehnmaliges Zähneputzen bedeutet, einen Monat lang ohne Unterbrechung vor einem Spiegel zu stehen?
bcrist

Das x-fache Zähneputzen ist eine lineare Funktion von x, aber das Programmieren ist im Allgemeinen keine lineare Funktion. Wenn Sie jede Codezeile mit den niedrigsten Sprachfunktionen bearbeiten, erhalten Sie schnellen und kleinen Code, der jedoch mit höheren Kosten pro Komplexitätsstufe verbunden ist. Höhere Sprachniveaus haben zwar mehr Schwung, aber die Kosten bleiben näher an einer linearen Funktion der Komplexität.
Andy

2

Mit der Zeit entwickeln sich die Bedürfnisse der Benutzer und werden immer anspruchsvoller, so dass Anbieter / Autoren verschiedener Software gezwungen sind, diese Bedürfnisse im Namen des Wettbewerbs zu befriedigen.

Um einen neuen Bedarf zu befriedigen, muss häufig neuer Code hinzugefügt werden. Neuer Code bedeutet, dass neue Sicherheitslücken behoben werden müssen. Das Beheben neuer Sicherheitsanfälligkeiten kann Code hinzufügen oder Türen für neue Sicherheitsanfälligkeiten öffnen.

Jede hinzugefügte Funktion, um die Bedürfnisse eines Benutzers zu befriedigen, benötigt möglicherweise mehr Prozessorleistung für die Geschwindigkeit (wir alle beschweren uns über die Geschwindigkeit dieses oder jenes Browsers), neue grafische Ressourcen für bessere visuelle Effekte usw.

All dies bedeutet, neue Schichten von Anwendungen (Code), Sicherheit und manchmal Hardware hinzuzufügen.


0

Ein Großteil der Größe stammt aus eingebauten Bibliotheken. Viele Anwendungen werden heutzutage mit Elektronen erstellt, die eine große Menge mit der Anwendung bündeln. Wenn Sie Anwendungen unter Linux installieren, sind sie normalerweise viel kleiner, da ein Großteil der Anwendung bereits über gemeinsam genutzte Bibliotheken installiert ist, die auch andere Programme verwenden.


-1

Wenn Sie beim Erstellen von Software die Funktion A benötigen, importieren Sie ein Modul A *. A * kann A lösen, aber A * kann Probleme mehr als A lösen, und A * könnte groß sein. Alle großen Module ergeben die große Software.

Möglicherweise nicht der gleiche Fall, aber so ähnlich: Wenn Sie nur "Hallo Welt" auf der Konsole mit Java drucken möchten, müssen Sie JRE (> 60 MB) installiert haben.

Wenn das Java-Beispiel nicht gut ist, probieren Sie Folgendes aus: Wenn die Software in einer Datei protokollieren muss, verwendet sie möglicherweise ein Protokollierungsmodul, mit dem tatsächlich Protokolle in der Datenbank, über das Netzwerk und einige andere Funktionen erstellt werden können. Die Funktionen werden jedoch nie in verwendet das Projekt.


Warum genau gibt es 5 Abwertungen und keinen einzigen Kommentar, der erklärt, warum?
Kromster

1
@KromStern Der erste Abschnitt gibt einen Überblick über die Funktionsweise von Bibliotheken, und zwar auf sehr unklare Weise bei inkonsistenter Verwendung von code. Ich würde behaupten, dass es die Frage überhaupt nicht wirklich beantwortet. Der zweite Abschnitt verwendet Java als Beispiel (obwohl versucht wird, zu behaupten, dass die JRE als Teil des Wachstums der Anwendungsgröße betrachtet werden sollte - was wiederum den Punkt der Frage verfehlt und überhaupt kein faires Beispiel darstellt und das weiter fortführt) Missverständnisse von Java). Alles in allem ist es entweder falsch oder wiederholt Punkte in früheren, besser geschriebenen Antworten.

1
Ihr Beispiel der Protokollierung an dem Netzwerk oder die Datei ist nicht gut - entweder , weil aus Sicht des Code, sind beide Dateien und behandeln genau die gleiche Art und Weise (die Unterscheidung zwischen Datei und Netzwerk wird vom Betriebssystem behandelt). Ich habe noch kein Protokollierungsframework gefunden, das als Teil seiner Kernfunktionalität "In der Datenbank protokollieren" hat, da dies durch Oracle vs. MySQL vs. SQL Server vs. Postgres vs. ... Treiber und dialektische Unterschiede erschwert würde.

@ user40980 Die Unterscheidung zwischen der Datei und dem Netzwerk wird vom Betriebssystem nicht behandelt. Sie benötigen unterschiedliche Betriebssystemaufrufe, um eine Verbindung herzustellen und darauf zu schreiben. Der Datenbankzugriff erfolgt über eine Datenbankunabhängigkeitsschicht wie JDBC oder libdbi. (Was wiederum Treiber für die verschiedenen unterstützten Datenbanken
einziehen kann

-2

Ich habe über eine Regel gelesen, dass Programme den gesamten verfügbaren Speicher belegen, egal wie viel es ist, aber warum?

Das stimmt nicht ganz. Systeme geben den verbrauchten Speicher erst frei, wenn das Betriebssystem unter Speicherdruck gerät. Dies ist eine Leistungsverbesserung. Wenn Sie auf einer Seite mit Bildern navigiert haben, navigieren Sie weg. Möglicherweise navigieren Sie zurück und benötigen das Bild erneut. Wenn das Betriebssystem über RAM verfügt, kann der Speicher erst gelöscht werden, wenn Sie sicher sind, dass Sie ihn nicht mehr benötigen.

Das sofortige Löschen des Speichers würde dem Benutzer die CPU-Zyklen und die Speicherbandbreite rauben, wenn höchstwahrscheinlich reaktionsschnelle Webseiten auf dem Bildschirm angezeigt werden sollen.

Das Betriebssystem belegt den gesamten verfügbaren Nicht-Anwendungsspeicher, von dem der Großteil für den Dateisystem-Cache bestimmt ist.

Die Speicherverwaltung ist ein schwieriges Problem, aber es gibt sehr clevere Leute, die die ganze Zeit daran arbeiten. Nichts wird absichtlich verschwendet und das Hauptziel ist es, Ihnen einen sehr reaktionsschnellen Computer zur Verfügung zu stellen.


3
Darum geht es in diesem Sprichwort überhaupt nicht. Virtueller Speicher und Speicherbereinigung waren gerade erfunden worden, als dieses Zitat geschrieben wurde, und sie waren nicht weit verbreitet.
Jörg W Mittag

-2

Es kann sein, dass Programme dazu neigen, den verfügbaren Speicherplatz zu erweitern, ähnlich den Vorortphänomenen, bei denen Sie einer verriegelten Autobahn neue Fahrspuren hinzufügen und innerhalb weniger Jahre der Verkehr wieder gesichert wird.

Aber wenn Sie sich das ansehen, werden Sie vielleicht feststellen, dass die Programme tatsächlich mehr tun. Browser, die zum Beispiel schickere Grafiken ausführen, verfügen über ausgefeilte Entwicklertools, die es vor einigen Jahren noch nicht gab. Sie sind auch mit vielen Bibliotheken verknüpft und verwenden manchmal nur einen kleinen Teil des Codes. Während sich die Größe von Programmen erhöhen kann, um den verfügbaren Speicher zu füllen, kann dies aus legitimen Gründen geschehen.


2
Dies scheint nichts Wesentliches zu bieten über die Punkte, die in den vorherigen 13 Antworten gemacht und erklärt wurden
Mücke

-3

Bibliotheken, die auf nicht optimierten Objekten basieren, benötigen mehr Speicher zum Laden, Installieren und mehr Rechenzyklen. Der Objektcode ist größtenteils aufgedunsen.

Führen Sie einfach den Standard-C ++ - Code aus, um alle assert () - Objektaufrufe anzuzeigen und sicherzustellen, dass es sich um gültige Objekte handelt. Wenn Sie eine Ebene über eine Ebene von Objekten entwerfen, die Objekte einkapseln, werden die Unterebenen aufgebläht und undurchsichtig. Programmierer werden faul und nehmen mehr Objekte an, weil es schneller ist als das Neugestalten, was auf die benötigte Funktionalität beschränkt ist. Es ist wirklich so einfach.

Betrachten Sie die Größe des Linux C-Kernels, nur den Kernel, im Vergleich zur Größe der maßgeschneiderten Anwendungen. Der Kernel kann die gesamte Maschine ausführen. Aber es war nicht so schnell wie Anwendungen, es braucht Zeit, um die beste Funktionalität zu erzielen.

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.