Gibt eigentlich was, das man mit C++ nicht kann?
-
Ich glaub ich lese nicht Recht
schrankwand schrieb:
Ein gutes Stichwort was schon in Hinsicht auf unser eigentliches Thema gefallen ist, ist "Assembler". Denn C++ ist nur so mächtig wie seine Klassenbibliotheken. Und wie funktioniert eine Klassebibliothek wie beispielsweise iostream (=Eine Klassenbibliothek, die Daten ein- und ausgibt)? Solche Klassenbibliotheken werden mit Assembler geschrieben. Des weiteren kann man wenn man ein Programm das man mit Assembler schreibt viel weitgehender optimieren als ein C++-Compiler das je könnte, was zu mehr Performance und weniger Speicherbedarf führen würde.
Fazit: C++ ist schon sehr mächtig, aber sobald du auf jedes Bisschen Performance und jedes Bit an Speicher was du rausholen kannst angewiesen bist oder du die Register des Prozessors direkt ansprechen willst, da dir die vorhandenen Klassenbibliotheken nicht ausreichen oder es keine Klassenbiliothek für deine Zwecke gibt, kommst du nicht um Assembler rum.
Ok für ein paar Bibliotheken lass ich mir das angehen, aber ich will sehen, wie jemand besser optimiert wie der Compiler. Falls das überhaupt funktioniert, braucht man dafür Jahre, falls man mal ein anständiges Programm das noch ein paar Quelltextzeilen hat, schreiben will.
LUZA schrieb:
ABER: wenn man keine pcs programmiert, sondern zum beispiel
für andere hardware ( gugg dir mal nen auto an, da is mehr software
drin als man für die ersten flüge zum mond gebraucht hat) schreibt,
nimmt man ja sowieso maschienen nahes zeugs, da wäres dann mit c++ viel zu umständlichSchonmal was von C-Compilern für Mikroprozessoren gehört? Macht garantiert jede Firma die irgentwelche Mikroprozessoren verwendet: Stecken 1000 Mannstunden in die Entwicklung der Firmware um dann festzustellen dass der Mikrocontroller weggestorben ist(passiert immer mal) sodass die Arbeit für den Eimer war. Wenn man C genommen hätte, hätte das sicher nicht passieren können. Dann nimmt man den nächst besten Mikroprozessor und kompilliert halt die Firmaware neu. Vielleicht muss man noch ein paar Veränderungen vornehmen, aber nix tragisches...
Und nebenbei: Wenn der Compiler etwas optimieren kann(muss er ja nicht mal so gut) dann, spart man auch viel Zeit denn es dauert ewig Software besser||gleich gut(mag bei Mikroprozessoren gehen) zu optimieren wie es der Compiler kann.
-
nd wie funktioniert eine Klassebibliothek wie beispielsweise iostream (=Eine Klassenbibliothek, die Daten ein- und ausgibt)? Solche Klassenbibliotheken werden mit Assembler geschrieben.
falsch, iostream und die meisten bibliotheken die du in die Hand bekommst sind in hochsprachen geschrieben. öffne ma die iostream.h und such dich dann mal durch, du wirst auf eine riesige Klassenkonstruktion stoßen.
Und ja, Assembler ist schnell, aber man braucht a) ein unglaubliches wissen über die materie(früher wurde der assembler code mittels takttabellen optimiert, um ja keinen takt zu verschenken) und b) auch unglaublich viel zeit, denn assembler ist sehr sehr viel code :). Mit assembler ist es wesentlich einfach speed zu verlieren als zu gewinnen, und man kommt in den meisten Fällen nicht gegen den Compiler an, weil er einfach viel schneller alle möglichkeiten durchgehen kann, und danach die schnellste auswählen. Natürlich kann man an einigen stellen 1-2 takte sparen, aber das bringts auf den heutigen Pcs nicht mehr.
-
otze, du hast Punkt c) vergessen:
c) man braucht auch unglaublich viel Geduld!
-
Wenn Assembler nichts mehr bringt, dann frage ich mich, warum PureBasic-Programme, wo der Code in Assembler generiert wird
a) Kleiner sind
b) schneller (als C/C++ sind)
c) weniger Speicher brauchenIst das was ihr da sagt wenigstens getestet worden?
Liebe Grüße
Real
-
Bitte kein Streit hier! Wir haben doch nun alle mitbekommen, dass Assembler-Programme...
a) schneller sind.
b) kleiner sind.
c) wesentlich aufwendiger sind.
d) wesentlich umfangreicher sind und.
e) viel mehr Zeit in Anspruch nehmen, um gleiches wie mit nem Compiler zu bewältigen.Daher lässt sich für mich einfach davon ableiten, dass es gut ist, kleinere (wirklich kleine, die aber auch leistungsfähig sein müssen, oder eine bestimmte hardwarenahe Aufgabe haben) Programme besser in Assembler programmiert werden sollten, falls das Wissen dazu vorhanden ist und großere Programme wie Games und so besser dann in C++ und Co. Dann könnten aber zu Verbesserung der Performance kleinere Optimierungen mit Assembler durchgeführt werden. Also regt euch wieder ab!
-
Lutz schrieb:
ich will sehen, wie jemand besser optimiert wie der Compiler. Falls das überhaupt funktioniert, braucht man dafür Jahre, falls man mal ein anständiges Programm das noch ein paar Quelltextzeilen hat, schreiben will.
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf
es ist leicht möglich mit ein wenig assembler code zu schreiben der um das mehrfache schneller ist als der compiler. egal ob gcc,vc++,borland,hlsl,cg... besonders wenn's ums vectorisieren geht versagen viele compiler. aber es gibt auch viele simple dinge bei denen dem compilern einfach die globale sicht fehlt und sie es nicht optimieren.
rapso->greets();
-
Wenn Assembler nichts mehr bringt, dann frage ich mich, warum PureBasic-Programme, wo der Code in Assembler generiert wird
purebasic? das is doch auch ne hochsprache oder? und beim compilen geht jede hochsprache über assembler.
-
schrankwand schrieb:
Des weiteren kann man wenn man ein Programm das man mit Assembler schreibt viel weitgehender optimieren als ein C++-Compiler das je könnte, was zu mehr Performance und weniger Speicherbedarf führen würde.
Du würdest dich wundern, zu welchen Sachen heutige Compiler in der lage sind. Natürlich noch lange nicht perfekt, aber richtig gut. Jemanden, der ein komplexes Programm in Assembler schreibt, kann man nicht als seriösen Programmierer betrachten, höchstens als Hobby-Enthusiasten.
. Früher hat man sowas mal gemacht, heute zählen aber andere Richtlinien, wie zB Usabiliy, Wiederverwendbarkeit, Wartbarkeit oder Realisierungsaufwand. Und Assembler ist in fast allen Punkten den meisten Sprachen unterlegen. Es macht lediglich Sinn, einige speziellen Sequenzen damit zu optimieren, um zB CPU-Erweiterungen zu nutzen.
Die beste Art der Optimierung ist immer noch den passenden Algorithmus zu finden, und nicht an den Opcodes zu basteln.schrankwand schrieb:
Bist du sicher das bei der heutigen Hardware genug Performance vorhanden ist? Dann frage ich mich warum auf meinem PC einige Spiele ordentlich ruckeln.
Sowas liegt auch oft an schlechten Treibern, 'ner alten Grafikkarte oder fragmentierten Festplatten (oder unfähigen Programmieren
).
-
Es geht hier nicht um Unterschied ASS oder c/c++. Das ASS schneller ist, ist in vielen Fällen sogra klar.
Hier geht es aber darum was in C++ nicht möglich ist.
Die Antwort ist: In c++ ist fast alles möglich. (bin zwar kein BS-Spezialist aber IMHO muss es eine Grund haben warum Bootloader in ASS sind) Aber ab dann kann durchwegs c++ eingesetzt werden.
Wenn jetzt jemand sagt das JAVA,PHP,oder was auch immer schneller als C ist dann sollte er mit die Antwort auf mein obige Frage geben (Ei oder Henne)
aber sich auch die Frage stellen womit JAVA,PHP,oder was auch immer geschrieben wurde.
-
das wichtigste werkzeug was über die geschwindigkeit entscheidet nennt sich: hirn.
und wenn dort genug wille, können und erfahrung drinne ist, dann kann man mit den meißten sprachen zufriedenstellende resultate erarbeiten die nur schwer mit anderen sprachen zu toppen wären, denn je mehr man an eigenem schweiss investiert, desto weniger hat die performance mit der sprache an sich zu tun.aber naja, zurück zum topic:
soweit ich sehe kann man mit c++ alles coden was man möchte. den komfor den man hat, wenn man etwas benutzt das andere sprachen als element ihrer sprache haben, bekommt man, sobald jemand einmal eine lib für c++ 'frei stellt'. Ich sehe grundsätzlich nichts, was c++ in irgendeine richtung limitieren würde, sodass man nicht weiter kommt.rapso->greets();