Lohnt es sich noch C++ zu lernen?
-
Naja, solche Mikrobenchmarks haben ja bekanntlicherweise keine Aussagekraft. Da kann man eigentlich nur rausfinden, dass man eine bestimmte Sache mit einer bestimmten Sprache lieber anders lösen sollte, weil die "Standardmethode" einfach nicht performant ist. Ich bin davon überzeugt, dass das mit C++ auch schneller geht.
Mich interessiert eher ein größerer Benchmark. Von diesen Mikrobenchmarks haben wir hier schon genug gemacht. ...und wenn du etwas im Forum gesucht hättest, hättest du glatt feststellen können, dass das hier das absolute Negativbeispiel für C++-Performance ist.
-
Gregor schrieb:
Hmmm... in welche Richtung geht es denn?
Es besteht
a) aus einer Bibliothek wie der GMP für natürliche, ganze und rationale Zahlen (automatische dynamische Speicherallozierung) + einige einfache Funktionen wie ggT... (da kommen noch mehr hinzu)
b) einem einfachen Parser als Benutzerschnittstelle
c) TestfunktionenBeispiel:
546656/58656 17083/1833 7 mod 3 1 a = 6896745 a = 6896745 b = 58966895 b = 58966895 a = b + 1589758945 a = 1648725840 (a div b)*b + (a mod b) ')' erwartet: "mod b)" r = a mod b r = 56619675 (a div b)*b + r 1648725840 1/5 mod 7 3 1/5 mod 10 Arithmos::InversionNotPossible 1/(a/a - 1) Arithmos::DivisionByZero 8^8096 260[...]056 ggt(384, 72) 24 ggtx(384,72) 384 = 5*72 + 24 72 = 3*24 + 0 ggT(384, 72) = 24 24 xggt(384,72) 384 = 5*72 + 24 t1 = 1 - 5*0 = 1 u = 0 v1 = 1 72 = 3*24 + 0 t1 = 0 - 3*1 = -3 u = 1 v1 = -3 1*384 + -5*72 = 24 24 p=8947467598679584; q=8767589678596794; p = 8947467598679584 q = 8767589678596794 46854895*859768956 mod (p*q) 40284384157639620
EDIT: c) und vielleicht auch b) kann man ja weglassen und einen Benchmark für 10000!, einige Divisionen und Potenzieren in Z/nZ durchführen.
-
Das sieht sehr interessant aus. Schick doch mal den Quellcode und eine lauffähige Linux-Variante an @.*.
Wird aber, wie schon gesagt, ne ganze Zeit dauern. Meine Prüfung ist am 13.10. und ich werde vermutlich erst danach dazu kommen, mich intensiver damit zu beschäftigen.
EDIT: Adresse wegeditiert.
-
Ich schicke es dir morgen Abend. Bis zum 13.10. kann ich vielleicht noch ein paar mehr Funktionen einbauen; aber wenn man um 17:30 von der Schule heimkommt, hat man auch nicht so viel Zeit...
-
\aleph_0 schrieb:
Ich schicke es dir morgen Abend. Bis zum 13.10. kann ich vielleicht noch ein paar mehr Funktionen einbauen; aber wenn man um 17:30 von der Schule heimkommt, hat man auch nicht so viel Zeit...
Lass dir ruhig Zeit. Reicht auch, wenn du es erst am 13. schickst.
-
Ich möchte noch einmal auf die Ausgangsfrage zurück kommen. Wer sich auf C/C++ einlässt, hat ein weites Land vor sich und wird sich oft verheddern. C/C++ deckt die maschinennahe Programmierung (auch im Wechselspiel mit Assembler), die klassische Programmierung (Strukturen, Prozeduren), OOP und generische Programmierung ab. Gerade im Rahmen der OOP ist es extrem schwer, alles richtig zu machen. Da wimmelt es nur so von Stolperfallen und komplizierten Ratgebern. C++ ist daher insbesondere für diejenigen interessant, die auf den Gipfel wollen. Die Lernkurve kann man nur in Jahren beziffern, in wenigen Wochen ist da nichts möglich. Das muss man wissen, wenn man sich auf diese Sprache einlässt. Hier gilt wirklich: "Der Weg ist das Ziel."
-
Gregor schrieb:
Wenn du Java immernoch als reine Interpretesprache bezeichnest, dann hast du das Prinzip von Java offensichtlich nicht verstanden.
Lies doch bitte nochmal genau nach. Ich habe Java nirgendwo als reine Interpretersprache bezeichnet. Aber das Java kein richtiger Maschinencode ist, ist dir wohl hoffentlich klar...
-
Warum so viel umstaende mit dem Testprogramm ....
Die Aufgabenstellung kann ganz einfach sein !
Irgendein DialogFeld mit nem Listview mit 3 SPalten (ReportView), oder was aehnlichem ... weiss ned wie es in Swing heisst ... oder ne QlistView ....
Dzu nen startbutton.
Wenn man den Startbutton drueckt, soll die Listbox mit 100000 Eementen Befuellt werden. Dabei sollen die SPallten nach volgenden Musster befuellt werden :
A00000 B00000 C00000
A00001 B00001 C00001
A00002 B00002 C00002
...die gebrauchte zeit zum einfuegen wird gemessen .... !!!
Koennen ja nen Wettbewerb machen.
Ich wuerde auf folgendes Ergebnis bei dem Vergleich der Programmiersprachen / Technicken tippen ...1. C und reiner WinAPI
2. VC++ mit MFC
3. C unter X mit ner Biblo ... also Motif oder ähnliches. (ham die Listviews ???)
4. Visual Basic
5. C++ mit QT
...
ne ganze weile nix
...
XXX. Java !!! Unter allen Plattformen ...Problem waere das plattformuebergreifend zu messen ...
wobei bei den ersten kanditaten die unterschiede bestimmt in den Rahmen der messungenauigkeit fallen wuerden ... aber nen signifikanter Unterschied zu Java wuerd ich schon erwarten ....Jemand andere Tipps ???
Ciao ...
-
wirklich sehr dummer Vorschlag....
-
100000 Elemente? Sehr realistisch
-
Mir viel nix besseres ein
ob realismus hin oder her ...
Gut, koennte ja auch ne listbox mit 10 eintraegen nehmen, und die 100000 mal leeren und wieder neu befuellen ???Zielt zumindest genau in die Richtig ab, wo ich die schwaechen von java sehe ....
Ciao ...
-
Um mal zur Ursprungsfrage zurückzukommen:
Natürlich lohnt es sich nicht mehr C++ lernen. Die Sprache ist veraltet.
-
So ein Quatasch. Latein spricht man seit hunderten von Jahren nicht mehr und trotzdem geistert es noch herum. So wird das auch mit Basic und C++ sein. Bei Java bin ich mir nicht sicher.
Ich stell mir nur die C64-Situation für den PC in 20 Jahren vor: ein PC-Emulator ist da, aber wer kann noch eine Java-Umgebung irgendwoher bekommen? Und wer will in 20 Jahren den Sinn begreifen?
-
Naja, ein bisschen Lebendiger als Latein ist C++ aber wohl doch!
-
..
-
Erhard Henkes schrieb:
C++ ist die Vorlage für Javascript
Sicher? Die Objektmodelle von C++ und Javascript unterscheiden sich drastisch, das eine ist klassenbasierend und das andere prototypbasierend. Oder machst du das an Oberflächlichkeiten wie der Syntax fest?
-
Erhard Henkes schrieb:
Ich halte nach wie vor folgenden Weg für sinnvoll:
(C ->) C++ -> C/C++/WinAPI -> C++/MFC -> Java (-> C#)
Um es mal genauer zu Formulieren: "Von hinten durch die Brust ins Auge."
-
Gregor schrieb:
Beispiele für Programme, die mit Java gemacht sind:
Spiele (100% Java):
Magicosm : www.magicosm.net
Arkanae : http://arkanae.tuxfamily.org/en/index.html
Law And Order : http://www.gamerankings.com/htmlpages2/531108.asp
Law And Order 2
Alien Flux : http://www.puppygames.net/info.php?game=Alien_FluxBist Du Dir sicher daß die 100% (!!) Java sind?!?!
Auf jeden Fall laß ich eben DAS hier:
The Chrome game uses Java language developed by Sun. the whole logics of the game
and the engine is based on Java language. It is a very convenient solution that enables easy to
extend the game itself (so called mods). Java language is fairly easy to learn and there is a
vast selection of documentation. If you are going to modify the Chrome game there’s no
better choice then using Java language.[EDIT] Naja, die Logik meines Schachspiels ist ja auch in Java, während die GUI in C++ & OpenGL gemacht wurde...
[/EDIT]
-
Sgt. Nukem schrieb:
Bist Du Dir sicher daß die 100% (!!) Java sind?!?!
Wenn man davon absieht, dass einige dieser Spiele Bibliotheken nutzen, mit denen man OpenGL oder Direct3D von Java aus nutzen kann (LWJGL, JOGL, Gl4Java, Java3D,...), dann sind diese Spiele nach meinen Informationen zu 100% aus Java.
Naja, ist Definitionssache, ob das 100% Java ist. Nach Sun kann ein Programm, welches Java3D nutzt durchaus als 100% Java gelten. Andere sehen das enger.
BTW: Was sagt ihr eigentlich zum aktuellen Benchmark von C#, C++, Java und Delphi in c't 21/2003 S.222? Da sieht C++ ja eigentlich garnicht so gut aus. Hat sich schon jemand die Mühe gemacht, sich den Quellcode der C++-Programme anzugucken und zu analysieren, welche "Performance-Fehler" gemacht wurden? ...oder wurden keine gemacht und C++ ist tatsächlich so unperformant?
-
welche "Performance-Fehler" gemacht wurden
Hehe, beim ersten mal grob ueberblaettern, dacht ich auch mich trifft der Schlag!
Meine Vermutung ist, die Performance Bremse ist das CObject, von dem alle Elemente abgeleitet sind. Strittig ist die Frage, ob das, wie im Text behauptet, uebliches Vorgehen ist !
Also ich leite meine Datenobjecte nie von CObject ab .... ! (arbeite auch kaum mit der MFC). Weiterhin fehlt auch die aussage, ob die MFC statisch oder dynamisch zugelinkt wurde ...Naja, kritik ueber den Artikel wird in der naechsten C't sicher ned lange auf sich warten lassen.
Ciao ...