Haben Computer heutzutage zu viel Leistung?

Sind (handelsübliche) Computer (-ähnliche Geräte) heutzutage zu stark?

  • Ja, sie verleiten zu Nachlässigkeit und verbrauchen mehr Strom als eigentlich nötig

    Abstimmungen: 3 30,0%
  • Ja, aber das macht das Leben doch einfacher und fördert den Fortschritt

    Abstimmungen: 1 10,0%
  • Nein, die Möglichkeit, Leistungsspitzen abzufangen, ist höher zu gewichten als die anderen Argumente

    Abstimmungen: 0 0,0%
  • Nein, es fehlt noch viel Leistung, bis wir photorealistische Bilder in Echtzeit rendern können.

    Abstimmungen: 6 60,0%

  • Anzahl der Umfrageteilnehmer
    10

cwriter

Erfahrenes Mitglied
Hallo Welt

In einer schwachen philosophischen Stunde habe ich über die Welt, Computer und Programme sinniert.
Die Frage, die sich jedoch festbrannte, war die nach der Leistung. Immer mehr Prozessoren mit lächerlich viel Puste kommen auf den Markt, und selbst die künstlich hochgehaltenen Preise vermögen ein mehr oder weniger akzeptables P/L-Verhältnis nicht zu zerstören.

Nun habe ich einen alten Raspberry Pi Model B Rev 1 aus dem Jahr 2011 rumliegen gehabt und aus Jux und Dollerei begonnen, ein kleines OS dafür zu schreiben.
Wer die Hardware nicht kennt: Es ist ein bcm2385-Chip mit ARM1176-jzf-Architektur (j=Jazelle, java-bytecodefähig, f = hardware floating point unit) und einer Taktrate von niedlichen 700MHz - single core.
Die Architektur ist schwach (u.a. RISC-bedingt), das Wortfragment "Giga" sucht man vergeblich, und alleine schon die Tatsache, dass die GPU (Videocore IV) das OS in den Hauptspeicher lädt, zumindest kurios.

Und dennoch: Selbst ohne GPU-Unterstützung (Framebuffer wird mit CPU geschrieben, zumindest testweise) bauen sich Bilder schnell auf und selbst die Initialisierung geht einigermassen schnell, trotz vergleichsweise schnarchiger Class 4 SD-Karte.

Natürlich ist mein kleines OS noch recht roh, ohne richtige FS-Operationen (muss noch sehr viel FAT-Code schreiben. OT: FAT ist ein ziemliches Verbrechen) und ohne Userinputs (der USB-Standard ist noch mühsamer...), aber dennoch läuft dieses recht rohe OS schon stabiler, als ich mir das erhofft hatte.

Jedenfalls ist mir natürlich klar, dass Simulationen und komplexe Berechnungen sehr viel mehr Leistung erfordern als es eine popelige Bildausgabe tut.
Ich meine damit eher den Verbrauchermarkt. Es wird ja regelrecht mit hochgetakteten (~2.4GHz) Prozessoren um sich geschmissen, sei es in Bürorechnern, Laptops oder sogar Handies (Naja, nicht ganz. Aber fast :) ).

Warum? Und vor allem: Warum wird das gebraucht?
Ich denke da nicht an Games und Videoschnitt - das sind ja die Klassiker, und ja, dort ist diese Leistungsbolzerei auch erwünscht.
Ich meine da alltägliche Programme wie Browser, Textverarbeitung und Co. Warum kann ich auf einem alten Laptop von 2009 mit einem 1.4GHz Centrino 2 Duo kaum noch irgendwas machen; selbst Internetbrowser haben Probleme, die animierten Websites flüssig darzustellen und warum kann sich der Witz über die Speicherhamsterei des Chrome-Browsers so lange halten?

Als C-Fanatiker habe ich immer über dynamische Sprachen wie JS oder PHP geflucht. Warum mussten die statischen Typen weichen? Warum so eine Textsprache, die erst durch mehrere Optimierer gejagt werden muss, bis sie einigermassen performant ist (zumindest bei JS)?

Doch dann habe ich in einem kleinen Projekt den Framebuffer füllen müssen. Und getreu dem Motto "Code muss möglichst wiederverwendbar sein" habe ich eine schöne kleine Funktion geschrieben, die Pixel setzt. Einzeln. "Der Compiler wird das schon inlinen". Das Resultat: 2-3 Sekunden pro Bild.
Also händisch mit Assembly nachgeholfen, die Function Calls reduziert und generell möglichst wenig am Stack verändert, und siehe da: Es läuft schnell. Sehr schnell. Dann noch die Cache Einstellungen korrekt gesetzt, und es funktioniert bestens. Allerdings hinterliess diese Erfahrung eine tiefe Narbe: Der Compiler kann nicht so gut optimieren wie der Mensch - er macht es nur fehlerfreier.

Die Frage, die sich nun stellt ist: Verleitet dieser Überfluss an Leistung dazu, dass man nicht mehr optimieren muss? All diese Komfortfunktionen wie freie Typen bei JS und PHP oder Exceptions bei Java oder C#: Wie könnten diese Systeme effizienter als C++, geschweige denn gutes C oder gar Assembly sein?

Die Entwicklung der Sprachen ging Richtung Funktionalität (SQL, Haskell), Stabilität (Rust) und generell Features (C++11/14), aber keine Sprache ist so richtig eine Lowlevel-Sprache. C hat keine Bitfields bzw. keine brauchbaren mit einstellbarer Reihenfolge. Zudem ist die Logik/Unlogik von uint32_t* i; i++ doof. Man kann dadurch nicht einfach auf das nächste Byte zugreifen, sondern muss casten. Dass ein i[12] noch Sinn macht, ist klar. Und ebenso ist klar, dass das nur *(i + 12) ist. Es macht Sinn, aber es ist mühsam, immer zu casten. Ebenso: Alignment und Byte Order. Gibt es nicht im Standard. Warum? Warum nur?

Zusammenfassend:
Heute wird im Studium gelehrt: Nutze die Funktionen, die du bekommst. Der Compiler wird es schon richten. O(1000n) ist gleich O(n), da muss nix optimiert werden.
Es gibt unglaubliche Abstraktionen. Microsoft will Win32 kippen und pusht Metro bzw. Modern UI mit C# oder JS. Auch Ubuntu will in eine ähnliche Richtung gehen, soweit ich weiss. Es wird alles webbasiert realisiert. Tausende Animationen auf Websites (Vor allem diese Auto- und Smartphonewerbeseiten, aber auch z.B. die Star Citizen Homepage) machen sie auf schwachen Geräten träge, obwohl doch Animationen eingeführt worden waren, um Ladezeiten zu überdecken bzw. das Aufploppen zu verwischen. Überall, auch in C/C++ gibt es unüberschaubar viele Bibliotheken, die auf anderen aufbauen und die Programme aufblasen. Qt ist bspw. wirklich komfortabel, aber so viele .dlls müssen dabei sein. Für Dinge, die man unter dem eigentlichen OS / Runtime schon hat, nur nochmals anders (QThread etc.). Es wird nur einfacher, Applikationen für grössere Märkte zu entwickeln.
Sind wir (die Entwickler) schuld an den ewig grösser werdenden Programme, weil wir die bequemen Lösungen bevorzugen? Ist es einfach der Zeitgeist, dass etwas möglichst schnell möglichst cool auszusehen hat, ohne sich Gedanken um Optimierung zu machen (bspw. bei Portierungen von Videospielen von Konsolen auf die wesentlich stärkeren PCs)? Ist es die Gier der Gewinnmaximierung ("Funktioniert ja")?
Ist es eine Folge der Fragmentierung des Marktes, dass jeder eine andere Konfiguration hat und entsprechend allgemeine Lösungen gebraucht werden, die immer funktionieren, ungeachtet des Optimums?
Oder basiert alles heute noch auf altem Code, den zu kippen zu viel Arbeit erfordern würde?

Was sind eure Meinungen dazu?

Gruss
cwriter
 
Hi,

da will ich mitsinnieren :) (oder meinen Frust ablassen?)

Meine Stimme für "Ja, sie verleiten zu Nachlässigkeit", obwohl ich auch dankbar bin dass der Wettbewerb existiert (dH. wenn man wirklich etwas mehr Leistung braucht nicht gleich Millionär sein müssen).

Es wäre sehr schön, wenn die Entwickler und Firmen generell etwas mehr auf Leistung achten würden, statt "schlecht+billig" und/oder "so viele tolle neue Frameworks, verwenden wir sie alle".
Firefox ohne Werbeblocker ist auch auf Highend-Geräten oft kaum benutzbar; Firefox ist stellenweise sowieso nicht benutzbar (viele Lesezeichen löschen = Exponentielle Laufzeit); Eclipse schafft meine Tippgeschwindigkeit noch immer nicht (konnte es vor Kurzem wieder einmal ausprobieren); Gameboyspiele (original 4MHz) brauchen auf 2x2.4GHz 20% der Leistung (keine Sorge, legal), usw.usw. ...

Zum Glück gibts ja trotzdem noch genug Beispiele, wo Geschwindigkeit/Aufwand in sinnvolleren ordentlichen Verhältnis stehen. Der Raspi (ja, GPU-Loader sind kurios :D) macht ohne Probleme VPN, Webserver, DB, Java-Services, Fileserver und noch einiges alles in einem. Die passende Software passend zu tunen ist zwar etwas mehr Aufwand als "apt-get install", und das Schnellste ist es nicht, aber je nach Fall völlig ausreichend (zB. wenn man rund einmal monatlich unterwegs merkt, eine Datei von daheim "jetzt" zu brauchen, und sonst kaum was zu tun ist). Auf Eclipe-Art wäre das ein voller Rackschrank nur für den Idle-Betrieb :p


begonnen, ein kleines OS dafür zu schreiben.
Sehr schöne Beschäftigung :)

FAT ist ein ziemliches Verbrechen
Nicht den Teufel an die Wand malen; du willst NTFS nämlich nicht "kennenlernen" (wirklich nicht :().

warum kann sich der Witz über die Speicherhamsterei des Chrome-Browsers so lange halten?
Weil man dadurch prozentuell nur wenig User verliert... (mehr nicht). Die Masse ist an dem Punkt, wo alle paar Jahre alles neu kaufen normal ist, wo ein Facebook-Button alle Nachteile wieder gut macht, ...

Allerdings hinterliess diese Erfahrung eine tiefe Narbe: Der Compiler kann nicht so gut optimieren wie der Mensch - er macht es nur fehlerfreier.
Ja.
Nicht zur Narbe werden lassen, von dem Punkt wirds nur besser :p (Vielleicht bin ich ja auch einfach verrückt :D)

Und zum Glück gibts noch Menschen, die intelligenter als Maschinen sind :p

Fehlerfreier: Wirklich? UB=>Folgen.

Um kurz etwas auszuschweifen, lass das bloß niemanden auf Stackoverflow hören, da wird man gelyncht. "Nein, nein, nein, der Compiler ist perfekt, Amen, Gotteslästerung, willst was auf die Fresse", blabla. (Passend dazu sind die allgemeinen C-Hater, die am Verstehen von Pointer gescheitert sind und deshalb verbreiten, dass korrekte C-Programme prinzipiell unmöglich sind)
Der Kindergarten kann sich einfach nicht damit abfinden, dass es bessere Programmierer als sie gibt.

...
 
Hi

Meine Stimme für "Ja, sie verleiten zu Nachlässigkeit", obwohl ich auch dankbar bin dass der Wettbewerb existiert (dH. wenn man wirklich etwas mehr Leistung braucht nicht gleich Millionär sein müssen).
Ja, natürlich. Aber "wir" leben ja auch von und mit Computern. IDE, Virtuelle Maschinen, mehrere Browser für Webdevelopment, Kompilieren von grossen Programmen, Games - all das ist noch nicht an dem Punkt, wo der Computer schneller als der Mensch ist (der Mensch auf den Computer warten muss).
Meine Bedenken richten sich eher Richtung "Normalnutzung", also Mails, Web und Dokumentverarbeitung. Meine Mutter ist so eine "Lieschen Müller"*: Keine Last, die auch nur annähernd an die Leistung ihres Surface Pro 3 herankommt. Klar gibt es future proofing. Und ja, man muss nicht immer mit dem Minimum arbeiten. Aber warum muss jede neue Iteration von Programmen direkt mehr Leistung verschlingen? Denn sonst würde ein heutiger Computer noch laaaange reichen.

*) Ist das überhaupt noch politisch korrekt?


Es wäre sehr schön, wenn die Entwickler und Firmen generell etwas mehr auf Leistung achten würden, statt "schlecht+billig" und/oder "so viele tolle neue Frameworks, verwenden wir sie alle".
Ja. Aber leider ist es hier wie überall: Jeder will den Preis drücken. Und wie sollte eine Firma (oder ein selbstständiger Programmierer) alleine irgendwelche Preise setzen können, wenn die Konkurrenz es ja "viel billiger kann"?
Ist es eine Frage eines mangelnden Ethos unter Programmierern? Oder ist es die Macht des Auftraggebers, eine "Friss oder Stirb" Wirtschaft zu betreiben, also "mach es für den Preis, den ich dir nenne", worauf der Programmierer sagt "Ok, aber dann ist es auch nur so viel wert"?

Firefox ohne Werbeblocker ist auch auf Highend-Geräten oft kaum benutzbar; Firefox ist stellenweise sowieso nicht benutzbar (viele Lesezeichen löschen = Exponentielle Laufzeit); Eclipse schafft meine Tippgeschwindigkeit noch immer nicht (konnte es vor Kurzem wieder einmal ausprobieren);
Wobei es gerade bei Firefox schade ist - er war mal gut. Irgendwann (glaube so um Einführung der grossen Versionssprünge, also bei Firefox 4) wurde alles saulangsam und habe ich auf Chrome gewechselt.
Eclipse: Na versuch mal Eclipse unter GTK2.0. Da siehst du auf mässigen Auflösungen nix mehr vom Code, weil die Buttons so unfassbar gross sind...
Aber ja, Eclipse ist wohl auch so ein Kandidat von "kann alles, aber nichts wirklich gut". Allerdings finde ich die "Webbased Editors" Atom und VS Code fast noch schlimmer: Ich kann meinem Laptopakku fast beim Entladen zusehen (wobei das mit Nano verglichen fast ein bisschen unfair ist :p ). Ich mag Visual Studio eigentlich, allerdings frage ich mich bei jedem Start, was genau denn solange braucht, um geladen zu werden. Aber bei diesen mächtigen Tools kann ich das eher verzeihen.

Zum Glück gibts ja trotzdem noch genug Beispiele, wo Geschwindigkeit/Aufwand in sinnvolleren ordentlichen Verhältnis stehen. Der Raspi (ja, GPU-Loader sind kurios :D) macht ohne Probleme VPN, Webserver, DB, Java-Services, Fileserver und noch einiges alles in einem. Die passende Software passend zu tunen ist zwar etwas mehr Aufwand als "apt-get install", und das Schnellste ist es nicht, aber je nach Fall völlig ausreichend (zB. wenn man rund einmal monatlich unterwegs merkt, eine Datei von daheim "jetzt" zu brauchen, und sonst kaum was zu tun ist). Auf Eclipe-Art wäre das ein voller Rackschrank nur für den Idle-Betrieb :p
Fairerweise muss man dazu sagen, dass der RPi eine recht grosse Fanbase hat, die die Dinge auch dahingehend optimiert. Zudem kann der RPi das alles zumindest bei gelegentlicher Nutzung, aber so richtig unter Last würde ich damit auch nicht arbeiten wollen (so mit 10/100 Ethernet und 128MB nutzbarem Speicher (ausser, man modifiziert den bootloader.bin)). Aber "normale" Textverarbeitung geht damit wunderbar (Raspbian ist schon fast zu gross, vor allem mit graphischer Oberfläche).
Aber ja, dort scheint es zu gehen - warum anderswo nicht?

Weil man dadurch prozentuell nur wenig User verliert... (mehr nicht). Die Masse ist an dem Punkt, wo alle paar Jahre alles neu kaufen normal ist, wo ein Facebook-Button alle Nachteile wieder gut macht, ...
Ich denke, das ist das gerade das Problem. Ich würde sagen, dass 80% der Nutzer nicht einmal wissen, was Arbeitsspeicher ist (wirklich wissen, nicht nur das Wort kennen). Dass Chrome viel davon verbraucht, interessiert sie nicht, schon gar nicht, wenn sie entsprechend starke Computer haben, die die Auswirkungen gering bis unspürbar halten (8GB RAM ist ja mittlerweile Standard).
Und so zieht es sich ja durch - in 5 Jahren ist vielleicht 32GB Standard. Was dann? Ist dann 8GB zu wenig? 8GB ist immens viel, das wird und sollte bei Büroaufgaben niemals knapp werden. Klar ist mehr RAM nie schlecht, man kann schlussendlich auch einfach die gesamte Festplatte in den RAM laden, wenn man lustig ist, aber für den Normalgebrauch ist das unnötig.

Fehlerfreier: Wirklich? UB=>Folgen.
Naja, der Compiler kann Undefined Behaviour nicht korrekt optimieren. Aber diese Fälle sollten vorher schon ausgeschlossen worden sein.

(Passend dazu sind die allgemeinen C-Hater, die am Verstehen von Pointer gescheitert sind und deshalb verbreiten, dass korrekte C-Programme prinzipiell unmöglich sind)
Naja, ich verstehe das Argument schon: Void-Casts können schlecht optimiert werden. Aber ein guter Programmierer sollte wissen, wo optimiert werden kann und soll, und wo nicht. Gerade bei Callbacks (Closures/Delegates) kann Inlining aber sehr praktisch sein. Allerdings macht das das Programm auch wieder grösser, weil redundant.

Zum Prinzipiell Unmöglich: Viele haben ja auch vor dem Halteproblem grosse Angst, obwohl es eigentlich nicht so schlimm ist. Denn das Subset von Programmen, die nur streng monotone for-Loops haben und (idealerweise) keine Rekursion aufweisen, beendet sehr wohl in endlicher Zeit.
Hm. Man müsste mal eine entsprechende Programmiersprache mit Definitions- und Wertebereichen und voller statischer Analysierbarkeit erschaffen :)

...der Compiler ist perfekt...
Da ich GCC verwende, bin ich ziemlich sicher, dass zumindest jemand mit "Have you tried LLVM Clang?" um die Ecke kommen würde :p

Vielleicht könnte noch jemand erläutern, der die Option 4 gewählt hat, wie das gemeint ist. Ist das für den persönlichen Gebrauch? Oder wäre es "cool", photorealistische Bilder in Echtzeit rendern zu können? Welches Interesse besteht an so viel Leistung? Könnte ein Mensch mit so viel Leistung überhaupt umgehen (die Idee muss ja vom Mensch noch irgendwie eingelesen werden)? Oder ist es eine Gegenaussage zu "Mehr als 64KB RAM braucht man ja eh nie"?

Gruss
cwriter
 
Jeder will den Preis drücken
...wobei es in manchen groben Fällen ja nicht einmal einen Unterschied machen würde, oder sogar für den Preis positiv wäre.
EInmal qsort aufrufen VS = eigene Sortierfunktion programmieren, ohne Hirn und Verstand. Gibts oft genug.

Zu Firefox, ich weigere mich ja nach wie vor, auf irgendwas zu wechseln. Langsam und immer mehr mit sinnlosen Features vollgestopft ja, aber auch so viele angenehme Features und Plugins wie sonst nirgends (zumindest für meine Anwendungen). Auch Chrome kann da nicht mal annähernd mithalten (auch wenn der Abstand schon mal größer war).

Zum Raspi: Fairerweise muss ich sagen, dass ich außer der OS-Basis nichts spezifisch von der Raspi-Community verwendet habe :p Die Anwendungssoftware ist 100% ohne Raspi-Anpassungen/Kompilierungen/etc. Geht sogar so.

Zu den C-Hatern: Vielleicht hab ich das nicht ganz korrekt vermittelt:
Ich meinte, es es gibt genug User, die zB. Pointer nie wirklich verstanden haben und/oder einfach nicht mögen und deshalb
a) jedem erzählen, dass es ein Naturgesetz ist, dass jeder beim Benutzen von Pointern Fehler macht, die auch nie gefunden werden
b) jeden, der Pointer anscheinend besser versteht, persönlich angreifen und herumtrollen
und/oder c) seltsame Argumente vorbringen, dass Pointer in der CPU oder sonstwo generell nicht richtig verarbeitbar sind oÄ.
Darunter auch genug User mit >10K Rep, und auch >100K
Ähnliche Gruppen für andere Themen gibts genug, zB. Unicode (zB. behaupten, dass Combiners+Normalisierung drogenverursachte Halluzinationen sind, und allen die nicht zustimmen einen Arzt empfehlen), oder das Thema, dass (gutes) C schneller ist als Java, oder ...
Solche Sachen kann man auch schön beweisen, aber egal, es wird weitergetrollt. Bis einer der Mods dann den "Fragesteller" sperrt weil seine Frage zu so einem Unsinn geführt hat. Stackoverflow eben.
...sorry, hier gehts um Computerleistung :D
 
Da dies gerade ein bisschen passt (und ich nicht das gesamte Subforum mit ähnlichen Themen zupflastern will):
http://www.anandtech.com/show/10889/microsoft-and-qualcomm-bring-windows-10-to-snapdragon-processors

Kurzfassung: Microsoft emuliert x86-Programme auf ARM (Qualcomm) Prozessoren, vor allem, um Windows Continuum ("Das Smartphone ist der Computer") zu pushen.

Viele freuen sich über diese Entwicklung, u.a. mit der Begründung, dass ARM ja stromsparender als x86 sei.
Aber wie soll das gehen? Schon alleine die physikalischen Gesetze lassen "dasselbe" nicht mit weniger Energie machen. Dazu sind RISC-Prozessoren ja eben weniger gut ausgestattet als die CISC-Dinger (CISC sind haben "mehr" Hardware).

Vor allem aber heisst das ja tatsächlich, dass wir zu starke Geräte haben; denn wer so viel Leistung einfach verschenken kann, muss ja genug davon haben.
Im Video beim Link sieht man zudem die Caches. 224KB L1 and 1.5MB L2 mögen ja schon nicht schlecht sein, es sind aber niemals die Grössenordnungen heutiger Intel-Prozessoren -> mehr Arbeitsspeicherzugriffe.

In der Mikrocontrollerebene gibt es das Wortkonstrukt "bit banging", also mit einem Word-basierten Prozessor bit-Operationen auszuführen, z.B., um Daten zu serialisieren. Dies wird nicht gerne gesehen, denn es gibt dafür optimierte ICs. Und wie auch bei Bitcoin Mining ist das softwarebasierte Verfahren vergleichsweise ineffizient. Die Begründung dafür ist oft: "Es ist billiger, alles softwarebasiert zu halten". Bei FPGAs ginge das ja noch, da ASICs viel zu teuer sind, aber Emulatoren...? Und dann noch "offiziell" und nicht als Hack?


Solche Sachen kann man auch schön beweisen, aber egal, es wird weitergetrollt. Bis einer der Mods dann den "Fragesteller" sperrt weil seine Frage zu so einem Unsinn geführt hat. Stackoverflow eben.
Ich fand mal einen Thread, wo jemand fragte, warum C++ so kompliziert sei (Direct Init. vs Copy Init. / Reference vs Pointer etc.). Java sei ja einfacher und schneller. Jemand hat dann die Tatsachen mit Assembly erklärt - die Antwort? "I don't know assembly".
Ich denke, gerade durch die Sprachvielfalt wissen viele nicht, wie CPUs eigentlich funktionieren. Alleine schon die Parameter bei C-Funktionen. Wann ändern sie sich, wie, und kann man die Änderung auch im Caller sehen? All diese Fragen sind leicht mit Assembly zu beantworten. Aber in C selbst ist das schwierig.

Gruss
cwriter
 
Die Frage, die sich nun stellt ist: Verleitet dieser Überfluss an Leistung dazu, dass man nicht mehr optimieren muss? All diese Komfortfunktionen wie freie Typen bei JS und PHP oder Exceptions bei Java oder C#: Wie könnten diese Systeme effizienter als C++, geschweige denn gutes C oder gar Assembly sein?

Ja. Sicherlich, mit mehr Komfort und Abstraktionsgraden fügst du neuen Overhead hinzu. Aber wenn ich mich einmal auf einer solch hohen Anwendungsebene befinde, möchte ich mich auch nicht um die ganz kleinen Details kümmern. Und das ist meiner Meinung nach auch gut so :).
Man darf es mit theoretischen Äquivalenzen von O(n) und O(10000n) natürlich nicht übertreiben.
Auf niedrigeren Ebenen (OS, Gerätetreiber) wirst du immer noch optimieren müssen, und zwar händisch.

Manchmal muss leider die Abstraktion auch gebrochen werden, was dann relativ unschön wird. Beispielsweise habe ich das klassische Pong mal als Windows 8-App in JS implementiert - mit einer grottenschlechten Bildrate! Damals habe ich nicht genau analysiert, aber bis heute vermute ich, dass es an einer zu hohen Objekterzeugung / Garbage Collector lag. An den Vektoradditionen wird es wohl nicht gelegen haben ;)

"Es ist billiger, alles softwarebasiert zu halten".
Erset letztens drüber gestolpert: Flipflops in Software! Wer braucht denn schon die Transistoren, wenn es in 4 Zeilen Java-Code geht? http://softwareengineering.stackexchange.com/a/337706/53812
 
Ja. Sicherlich, mit mehr Komfort und Abstraktionsgraden fügst du neuen Overhead hinzu. Aber wenn ich mich einmal auf einer solch hohen Anwendungsebene befinde, möchte ich mich auch nicht um die ganz kleinen Details kümmern. Und das ist meiner Meinung nach auch gut so :).
Nur, damit wir uns richtig verstehen: Für blosse Human Interfaces sind Websprachen schon nicht schlecht - nur finde ich, dass man die eigentliche "Arbeit" nicht in JS o.ä. machen sollte. Passend dazu "[Something].js":
operating_systems.png


Ich möchte auch nicht jeden Webdienst durch eine eigene WinAPI-exe oder das GTK/Cocoa-Äquivalent ersetzen. Der Mensch ist ja ohnehin zu langsam, den (Performance-)Unterschied gross zu bemerken.
(Wobei man auch sagen muss, dass die eigentliche Idee der Websprachen, nämlich universell überall einsetzbar zu sein, auch nicht wirklich funktioniert hat: Besonders MS, aber auch andere Hersteller sehen das mit dem Standard ja eher locker...)

Man darf es mit theoretischen Äquivalenzen von O(n) und O(10000n) natürlich nicht übertreiben.
Auf niedrigeren Ebenen (OS, Gerätetreiber) wirst du immer noch optimieren müssen, und zwar händisch.
Ja, aber Algorithmiker lieben ja z.B. auch Bäume und Listen im Allgemeinen. Aber unsere Computer sind für Listen ja überhaupt nicht ausgelegt, sondern funktionieren besser mit Arrays. (Genauer: Mit einfach cachebaren Strukturen).
Ab und zu muss man immer noch Listen verwenden, z.B. wenn die Anzahl der Elemente nicht im Vorherein bekannt ist, aber das sind ja eigentlich die seltensten Fälle.
Generell würde ich sagen, dass Listen zu prominent als grosses Programmierkonzept vermittelt werden.

Manchmal muss leider die Abstraktion auch gebrochen werden, was dann relativ unschön wird. Beispielsweise habe ich das klassische Pong mal als Windows 8-App in JS implementiert - mit einer grottenschlechten Bildrate! Damals habe ich nicht genau analysiert, aber bis heute vermute ich, dass es an einer zu hohen Objekterzeugung / Garbage Collector lag. An den Vektoradditionen wird es wohl nicht gelegen haben ;)
Kleine Anekdote dazu: KSP hatte (weiss nicht, ob es mittlerweile gefixt wurde) mal ein GC-Problem: Es gibt in KSP Stromlieferanten (Batterien/Solarzellen/etc.) und Verbraucher (Antennen&Co.). Die Verteilung der Energie wurde jeweils pro Frame berechnet, was an sich schon Blödsinn ist, und dann generierte es auch noch so viel Garbage, dass der GC durchdrehte und die Framerate selbst auf High-End-Rechnern in die 10er-Knie zwang.

Oder der Klassiker: Java-Version von Minecraft (zumindest damals(TM)), wo man im Debug-Screen sehen konnte, wie der Speicherverbrauch innert Sekunden auf 500MB stieg, bis der GC wieder einsprang und die Zahl wieder runterholte.

In diesem Sinne: Ja, Abstraktionen können praktisch sein, aber die Mentalität, die dadurch mitgegeben wird ("Der GC wird es schon richten", "Der Compiler macht das schon", "Ich muss mir keine grosse Mühe geben; wenn es zu langsam wird, setze ich das Memory-Limit für den GC höher") finde ich sehr bedenklich.

Erset letztens drüber gestolpert: Flipflops in Software! Wer braucht denn schon die Transistoren, wenn es in 4 Zeilen Java-Code geht? http://softwareengineering.stackexchange.com/a/337706/53812
Wobei das (hoffentlich) eher für Emulatoren und Simulatoren denn MCUs gedacht ist :)
Aber selbst da: Emulatoren in Java gehören sich nicht, eben gerade wegen des GC.
Ein Professor erzählte mal eine Schauergeschichte von einem Roboter-Ping-Pong-Wettbewerb, wo im Final beide Roboter schon mehrere Minuten gut spielten, bis der eine plötzlich für mehrere Sekunden einfror und deshalb gar nichts mehr machte. Grund? Das GC-Limit wurde sehr hoch gesetzt, damit in kürzeren Duellen keine wertvollen Hundertstelsekunden verloren gingen. Aber als es zu lange ging, ging halt auch das Aufräumen lange.
Es sind diese Geschichten (ob sie nun wahr sind oder nicht: Sie sind zumindest möglich), was mir ein wenig Angst macht: Warum schreibt man solche Echtzeitprogramme überhaupt in instabilen (für zeitkritische Applikationen ungeeignete) Sprachen? Selbst von C++ wird für diese Bereiche abgeraten, da Exceptions und RTTI zu langsam sind. Klar ist es schneller gemacht, und klar habe ich gewisses Verständnis für die Angst vor Memory Leaks, aber was macht man dann bei Software, an der Menschenleben hängen?
Der einzige Vorteil, den ich bei "neuen" Sprachen sehe, ist die kürzere Entwicklungszeit von Programmen oder eine erhöhte "Sicherheit":
http://www.golem.de/news/redox-os-wer-nicht-rustet-rostet-1612-124867.html
RedoxOS, in Rust (extra für sichere Pointer entwickelt) geschrieben, um zu beweisen, dass ein Betriebssystem sicher / ohne Speicherfehler sein kann.
golem.de hat gesagt.:
In der Programmsammlung befinden sich auch eine Reihe konsolenbasierter Unterhaltungsprogramme, wie etwa eine Implementation von Tetris (Reblox), Snake und ein der Website Hackertyper nachempfundener Programmiersimulator (H4xx3r). Leider sind nicht alle diese Programme stabil. So stürzt etwa Snake zuverlässig ab, falls man das Spiel verliert, und reißt gleich das ganze System mit sich.

golem.de hat gesagt.:
Um den so geschriebenen Unsafe-Code minimal zu halten, wird in Redox OS nach dem Motto "Race to safety" gearbeitet. Das bedeutet, dass nur der minimal mögliche Teil in Unsafe Rust geschrieben und versucht wird, so schnell wie möglich die Kontrolle über Speicherzugriffe an den Compiler zurückzugeben.

Auch bei der Speicherzuweisung wird viel Wert auf Sicherheit und Zuverlässigkeit gelegt, nicht nur in Ralloc selbst, sondern auch für darauf aufbauende Programme. So bietet Ralloc beispielsweise Debug-Optionen, um häufige Fehler in der Speicherverwaltung von Programmen aufzuzeigen wie Double-Free, Speicherlecks oder eine falsche Speicherausrichtung.

golem.de hat gesagt.:
Redox OS ist ganz eindeutig ein Projekt, das noch ganz am Anfang steht. Es zeigt allerdings schon jetzt eindrucksvoll die Möglichkeiten der ebenfalls noch jungen Programmiersprache Rust auf. Denn obwohl Redox OS erst etwas älter als ein Jahr alt ist, wurde bereits alles vom Kernel bis zur grafischen Oberfläche in Rust neu entwickelt. Dass in dieser kurzen Zeit kein komplett neues Betriebssystem entstehen kann, das mit den etablierten Größen wie Linux, Mac OS und Windows mithalten kann, dürfte die wenigsten verwundern. So muss man Redox OS einfach als Demonstration der Programmiersprache Rust und Experiment in der Betriebssystementwicklung sehen, was eigentlich sehr gut gelungen ist.

Ich habe nichts gegen Rust als Anwendungsprache in Firefox o.ä., aber hier sieht man wieder: "Es kann gar nicht sicher sein, wenn es der Compiler nicht macht" und man schmeisst lieber Ressourcen weg, um Debugoptionen zu implementieren.
Dass dennoch eine Applikation das ganze OS mitreissen kann, obwohl angeblich alles sicher sein soll, und der Autor des Artikels das im Fazit geflissentlich übergeht, ist da nur das Tüpfelchen auf dem 'i'.
Ich verstehe die Abneigung nicht, die man C entgegenbringt. Ja, es hat seine Schwächen, und ja, man hat mehr Arbeit damit. Aber genauso, wie ich lieber einmal ein bisschen mehr ausgebe, um Qualität zu bekommen ("Wer billig kauft, kauft zwei Mal"), so sollte es doch auch möglich sein, sich für OS, Treiber und Co. einfach mal Zeit zu nehmen, um danach Strom, Zeit und Nerven zu sparen. Aber es muss ja alles schnell gehen, jedes Update muss mit tausend neuen, unausgegorenen Features kommen, und vor allem bei Smartphone-Betriebssystemen macht jede neue OS-Version das System wieder langsamer.
Ah, ich weiss auch nicht so recht. Ich töne ja schon wie eine klassische, verbitterte Spassbremse. Auf der anderen Seite weiss ich nicht, ob nicht auch die Programmierer in die Pflicht genommen werden sollten, die Lebensdauer (Nutzungsdauer) von Geräten zu erhöhen und damit die (imho) dekadente 2-Jahres-Obsoleszenz von heutigen Geräten zu vertreiben und den exorbitanten Energieverbrauch der Menschheit zu senken (Was pro Computer nur ein paar Taktzyklen sind, können weltweit schon ein paar Megawatt sein).

Gruss
cwriter
 
Wollte mal auf deine Anfangsfrage eingehen, 70% der Computernutzer machen mit den Computern genau das selbe wie Ende der 90er.
Und um die Zeit hatte ich einen Intel Pentium 2 MMX mit 400Mhz, und hab damals mit Bildbearbeitung etc. angefangen.
Also mir kann keiner erzählen dass wir heute das zusätzliche Potential, welches sich aus den schnelleren Prozessoren ergibt, wirklich ausnutzen.
Das ist wie bei den Autos, die Potenziale die sich aus der besseren Technik ergeben werden nicht in die Optimierung des Verbrauchs zu investiert sondern einfach in mehr Leistung bei geringeren Kosten. Das dumme ist nur das mehr Leistung nicht auch mehr Effizienz bedeutet, sondern meistens nur man hat mehr was man verbrauchen kann ohne auf den Output zu achten.

Also ein Word mit den selben Funktionen von damals in neuem Kleid wird nicht mehr auf den alten Rechnern laufen. Das muss einem erstmal einer Erklären.
Also ich glaube das sich Softwareentwickler einfach gehen lassen und sich keine Mühe mehr machen. Weils einfach nicht mehr notwendig ist.
Das mehr an Stromverbrauch interessiert natürlich auch keinen.
 
Zurück