Lohnt es sich noch C++ zu lernen?
-
kartoffelsack schrieb:
Hab keine Lust selber nachzumessen aber ich vertrau Dir und gehe fast jede Wette ein, dass Du das mit Java nicht so schnell hinkriegst wie mit C++
#include <iostream> int main() { for( int i(0); i < 100000; ++i) { std::cout << "Das ist der "<<i<<"te Schleifendurchlauf"; } }
PS: außerdem ist es unfair, wenn man Bibs von drittanbietern weglassen muss, weil Du genau weißt, dass es keine C++-Standard-GUI-Bib gibt. So kann man dann schwer ein C++-GUI-Prog mit der Java-Swing-GUI vergleichen.
1. Bibliotheken, wie Qt oder GTK habe ich explizit erlaubt. OpenGL ist ein anderes Kaliber.
2.Otaku@linux:~/TestProjects> cat TestIO.cpp #include <iostream> int main() { for( int i(0); i < 100000; ++i) { std::cout << "Das ist der "<<i<<"te Schleifendurchlauf"; } } Otaku@linux:~/TestProjects> cat TestIO.java import java.io.*; public class TestIO { public static void main (String [] args) { blah(); } public static void blah () { PrintWriter out = new PrintWriter (new BufferedOutputStream (System.out)); for (int i = 0 ; i < 100000 ; ++i) { out.print ("Das ist der "); out.print (i); out.print ("te Schleifendurchlauf"); } out.close(); } } Otaku@linux:~/TestProjects> g++ -o TestIO TestIO.cpp -O3 Otaku@linux:~/TestProjects> javac TestIO.java Otaku@linux:~/TestProjects> time ./TestIO [...] real 0m7.306s user 0m1.900s sys 0m0.090s Otaku@linux:~/TestProjects> time java TestIO [...] real 0m5.827s user 0m0.640s sys 0m0.090s
EDIT: Bevor ich es vergesse:
Otaku@linux:~/TestProjects> g++ --version g++ (GCC) 3.3 20030226 (prerelease) (SuSE Linux) Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Otaku@linux:~/TestProjects> java -version java version "1.4.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06) Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)
-
MaSTaH schrieb:
Wenn ich die Zeit dazu hätte würde ich den Wettbewerb antreten. Aber 1000-2000 Zeilen nur um zu zeigen das Java langsamer ist bedarf es nicht, da es doch auf der Hand liegt, dass eine Interpretersprache langsamer ist als Maschinencode.
Wenn du Java immernoch als reine Interpretesprache bezeichnest, dann hast du das Prinzip von Java offensichtlich nicht verstanden.
-
\aleph_0 schrieb:
Gregor: Ich habe da ein Programm, bei dem ich wirklich überzeugt bin, dass Java schlechter abschneiden würde. Es ist reines Standard-C++, plattformunabhängig und ich habe es erfolgreich unter Linux und Windows kompiliert. Interesse?
Ja, wenn es nicht zu sehr aus dem Rahmen 1000-2000 Zeilen fällt.
-
Gregor schrieb:
\aleph_0 schrieb:
Gregor: Ich habe da ein Programm, bei dem ich wirklich überzeugt bin, dass Java schlechter abschneiden würde. Es ist reines Standard-C++, plattformunabhängig und ich habe es erfolgreich unter Linux und Windows kompiliert. Interesse?
Ja, wenn es nicht zu sehr aus dem Rahmen 1000-2000 Zeilen fällt.
3000? Es profitiert übrigens sehr von Templates und Operatorenüberladung...
-
\aleph_0 schrieb:
3000? Es profitiert übrigens sehr von Templates und Operatorenüberladung...
Hmmm... in welche Richtung geht es denn? Prinzipiell würde ich das machen, das kann aber ne ganze Zeit dauern, zumal ich demnächst eine Prüfung habe und deshalb momentan nicht soviel Zeit habe.
-
Otaku@linux:~/TestProjects> g++ -o TestIO TestIO.cpp -O3 Otaku@linux:~/TestProjects> javac TestIO.java Otaku@linux:~/TestProjects> time ./TestIO [...] real 0m7.306s user 0m1.900s sys 0m0.090s Otaku@linux:~/TestProjects> time java TestIO [...] real 0m5.827s user 0m0.640s sys 0m0.090s
Tja. Jetzt steh ich da
Helft mir Jungs!
-
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!