Umsteiger sucht Tutorials und Info's

Zu deinen Fragen zu C++:

1. Ja (naja, mal abgesehen von Assembler, aber da auch nur, wenn man richtig gut ist)
2. Hm, zumindest zukunftssicherer als c#, und es ist sicher nie falsch, c++ zu lernen
3. C ist im Grunde C++, nur ohne objektorientierung. (n paar kleine unterschiede gibts zwar, sind aber nich so wichtig). Ja klar kann man C unter Windows programmieren.
 
Hi,

also zu deinen C# Vermutungen kann ich eigentlich nichts sagen, da ich C# selber nicht wirklich kenne. Ich meide C# und .NET allerdings auch, und werde mich damit auch nicht auseinandersetzen, es sei denn ich sollte eines Tages mal wirklich dazu gezwungen werden (und dann wuerde ich erstmal reiflich ueber eine Kuendigung nachdenken).
Denn .NET wird schliesslich exklusiv fuer Windows entwickelt. Natuerlich weiss ich dass es Mono gibt, aber das aendert nichts daran dass das Original allein fuer Windows entwickelt wird. Und ich mag keine Sprachen die mich an eine Plattform binden.

Deine gegebenen Anforderungen geben keinen Grund zum Anlass dass du unbedingt C++ benutzen musst. Programm nr. 1 wuerde ich wahrscheinlich in Perl oder Python schreiben, Programm nr. 2 in Java, Perl oder Python. Was du konkret benutzt ist auch immer Geschmacksfrage. Wenn viel Textmanipulation noetig ist, nehme ich gerne Perl, aber ich habe noch nie mit GUIs in Perl gearbeitet.
Ich an deiner Stelle wuerde dafuer jedenfalls auf keinen Fall C++ benutzen, es sei denn du willst dir das Leben unnoetig schwer machen.

Ach ja, noch eine Anmerkung zur "guten Performance". "Gute Performance" erreichst du heutzutage mit so ziemlich jeder Sprache, selbst interpretierte Sprachen sind fuer die allermeisten Dinge schnell genug. Anders sieht die Sache aus, wenn du sehr viele spezielle Berechnungen durchfuehren musst, z.B. wenn du eine Simulation mit vielen grossen Matrizen schreibst. Da mag der Einsatz von C oder C++ sinnvoll sein, wobei ich dafuer vielleicht lieber Matlab nehmen wuerde. Matlab ist kompiliert auch ziemlich performant.

ncurses scheint Anbindungen zu den gaengigsten Sprachen zu haben, laut Wikipedia u.a. Python, Ruby, php, Lisp, ...

Stimmt es, dass die in C++ geschriebenen Programme die beste Performance haben?
C++ gibt es schon ziemlich lange und entsprechend gut sind die heutigen Compiler. Die meisten anderen populaeren Sprachen sind byte-kompiliert oder interpretiert, und auch wenn dort im Performance Bereich immer groessere Fortschritte gemacht werden, ist kompilierter Code immer noch einen Tick schneller, ja.

Ist es nicht sinnvoll, gleich C++ zu lernen, da es Zukunftsicher ist?
Jetzt wird es mystisch. ;)
Der Trend geht heutzutage eher dahin dem Programmierer die Arbeit zu erleichtern. Computer werden immer schneller und leistungsfaehiger, aber deswegen koennen Programmierer nicht ploetzlich schneller programmieren, d.h. Firmen steigern lieber die Produktivitaet der Programmierer, und nehmen dafuer minimale Leistungseinbussen bei der Programmgeschwindigkeit in Kauf. Monetaer ist das ein "no-brainer".
Dementsprechend wird C++ in Zukunft wahrscheinlich immer weiter an Bedeutung verlieren.

Allerdings glaube ich auch, dass C++ die naechsten 50 Jahre weiterhin einen festen Platz im Computerbereich haben wird. Erstens schon allein wegen dem ganzen legacy code. Zweitens weil C++ fuer maschinennahe Programmierung nach wie vor eine gute Wahl ist.
Deswegen kann ich eigentlich nur nochmal wiederholen was ich weiter oben schonmal gesagt habe: Fuer fast alle Anwendungsprogramme ist C++ die falsche Sprache, aber im maschinennahen Bereich ist es zusammen mit C immer noch die Nummer 1.

Es gibt ja noch C. Was ist der Unterschied zwischen C und C++? Kann man auch unter Windows mit C programmieren?
Der Hauptunterschied ist, wie Supervisor schon sagte, dass C++ objektorientiertes Programmieren unterstuetzt, und C nicht. Syntaktisch sind sich beide Sprachen sehr aehnlich weil C++ auf C aufbaut, aber von der dahinterstehenden Logik her sind das zwei voellig verschiedene Welten.
Ja, die Win32 API ist reines C, aber ich kenne eigentlich niemanden der noch Programme fuer Windows in reinem C schreibt.


Edit:

2. Hm, zumindest zukunftssicherer als c#, und es ist sicher nie falsch, c++ zu lernen
Ah, Moment, da moechte ich doch nochmal kurz widersprechen. Meiner Meinung nach kann es falsch sein C++ zu lernen. Naemlich dann, wenn der Lernende vorher noch keine Erfahrung mit gutem OO Design hat.
Ich muss im Augenblick fuer die Uni ein Programm weiterentwickeln, das jemand anderes in Java geschrieben hat. Allerdings hatte der gute Mensch vorher nur in C++ programmiert und so sah dann auch sein Java Code aus. Ich habe ziemlich lange gebraucht um das Design zu begreifen, erst als ich mich mit dem urspruenglichen Entwickler getroffen hab und er sagte, dass er damals einige elementare Java Features noch nicht kannte, ging mir ein Licht auf. Da stehen zum Beispiel so tolle Sachen drin wie abstrakte Klassen ohne Implementierung, und andere voellig sinnfreie Dinge. Klar, so macht man das in C++, schliesslich kennt C++ keine Interfaces.

mfg,
bytepool
 
Zuletzt bearbeitet:
Erst mal Danke für dein vielen und nicht gerade wenige Info's. :)
Jedoch hab ich nochmal genau ein paar Fragen:
  1. Fast alle Programme für Windows (z.B. Spiele) und Linux sind in C++ geschrieben. Warum eigentlich, wenn es doch nicht nötig ist (Spiele und Hardware-Nahe???) ? Gibt es noch andere Gründe, die dafür sprechen?
  2. Was würdest du mir Empfehlen? Java scheidet aus versch. Gründen aus. Phyton oder Perl? Wie gesagt, es sollte Plattform unabhängig sein.
 
1. Naja, Spiele kann man auch mit Java oder C# entwickeln. Entsprechende Bindings fuer OpenGL oder auch D3D gibt es. Auch hat Microsoft das XNA Framework entwickelt, welches sich einfach in .Net eingliedert und mit jeder beliebigen .Net-Sprache benutzt werden kann (was ich persoenlich als grossen Vorteil an .Net sehe... aehnlich der GCC). Da in Spielen Performance aber wirklich alles ist, kommt es da wirklich auf jedes Bisschen an. Darum wurden Spiele bisher eben vor allem in maschinennahen Sprachen geschrieben. Ich las auch schon haeufig vom Einsatz von Assembler in besonders kritischen Bereichen; mit echten Hochsprachen wie Java oder C# undenkbar. Ob verschiedene Hintergrundgeschichten in einer Datenbankanwendung zunaechst mal ein paar Millisekunden laenger dauern, merkt man eher nicht. Wenn aber 30 Bilder pro Sekunde berechnet werden muessen, sieht das schon anders aus.

2. Sowohl von Python als auch Perl ist die Performance enorm schlechter. Das sind jedenfalls meine (nicht unbedingt repraesentativen) Erfahrungen. Allerdings ist das auch nur relativ. Wenn du auf eine Datenbank zugreifen musst und da nur ein wenig rumoperst, sollte das keine Rolle spielen. Ich persoenlich wuerde ja zu Perl raten; besonders auch aufgrund des CPAN. Aber das ist sehr subjektiv, der naechste Python-Juenger wird mich dafuer steinigen wollen (aber hier im Forum gibts zum Glueck einige Perl-Liebhaber :P).
 
Hi,

Fast alle Programme für Windows (z.B. Spiele) und Linux sind in C++ geschrieben. Warum eigentlich, wenn es doch nicht nötig ist (Spiele und Hardware-Nahe???) ? Gibt es noch andere Gründe, die dafür sprechen?

also ich denke dass es gerade fuer Linux eine wachsende Zahl von Anwendungsprogrammen gibt die eben nicht in C++ geschrieben sind. Aber ich glaube dass ein gewisser Teil der vielen C++ Programme ihr Dasein vor allem der guten alten Gewohnheit verdanken. C++ ist nach wie vor eine sehr populaere Sprache, und wieso sollte man eine neue Sprache lernen wenn es die alte doch immer getan hat? Zumindest habe ich das so auch schon von 1, 2 Freunden gehoert die schonmal fuer mittelgrosse Software Firmen gearbeitet haben.
Andererseits macht es bei einigen Programmen wegen dem Performance Gewinn eben doch Sinn. Ich kann mir z.B. nicht vorstellen, dass es moeglich waere KDE oder Gnome nach Java oder Python zu portieren. ;)

Allerdings gehoeren fuer mich Spiele auch nicht zu den standard Anwendungsprogrammen, sondern haben ihre eigene Nische. Spiele haben meistens nochmal voellig andere Anforderungen, insbesondere Spiele mit 3D Grafik. Denn gerade im 3D Bereich ist Geschwindigkeit eben doch alles.

Was würdest du mir Empfehlen? Java scheidet aus versch. Gründen aus. Phyton oder Perl? Wie gesagt, es sollte Plattform unabhängig sein.
Joa, wie gesagt, das ist immer Geschmacksache. Python und Perl sind beides interpretierte Sprachen, d.h. sie laufen beide auf Linux und Windows. Die Syntax von Perl ist jedoch teilweise recht chaotisch, die Syntax von Python dagegen ist sehr sauber. Man sagt manchmal, dass man seine eigenen Perl Programme schon nach ein paar Monaten nicht mehr lesen kann, wohingegen man Python Programme haeufig selbst Jahre danach noch auf Anhieb versteht. Das ist natuerlich stark uebertrieben, deckt sich aber grob mit meinen eigenen Erfahrungen.
Deswegen nehme ich Perl gerne fuer kleine Projekte wo es hauptsaechlich um Textmanipulation geht, denn was das angeht ist Perl IMHO das non-plus-ultra und auch in Sachen Datenbank Anbindung hat Perl einen guten Ruf. Doch wenn ich denke dass das Projekt etwas groesser wird bevorzuge ich persoenlich Python.

Aber letztendlich haben alle Programmiersprachen Vor- und Nachteile. Ich bin ein Anhaenger der "die richtige Sprache fuer den richtigen Job" Philosophie. ;)

2. Sowohl von Python als auch Perl ist die Performance enorm schlechter. Das sind jedenfalls meine (nicht unbedingt repraesentativen) Erfahrungen.

Soweit ich weiss ist byte-kompilierter Java Code nicht wesentlich schneller als byte-kompilierter Python Code. Bei uns in der Firma wird fast alles in Python geschrieben, nur einige wenige Dinge im Backend sind aus performance Gruenden in C geschrieben. Allerdings geht es dabei auch um ein Netzwerkframework, der Flaschenhals ist meistens die Bandbreite.

Edit:
Mhh, interessant, ich hatte mich vorher noch nie nach Performance Vergleichen umgeschaut, aber das was sich so ergooglen laesst widerlegt meine Behauptung. Scheinbar ist Java wirklich einiges schneller.
Hier einige interessante links zum Thema (wobei nur der erste link halbwegs aktuell ist):

http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
http://www.twistedmatrix.com/~glyph/rant/python-vs-java.html
http://www.timestretch.com/FractalBenchmark.html

Aber solche Tests sind ja auch nur grobe Indikatoren.

mfg,
bytepool
 
Zuletzt bearbeitet:
So, ich hab jetzt einfach mal einen Performance Test mit C# gemacht. Hier mal die Ergebnisse:

Ubuntu Hardy:
ArrayList strings test.............1801 ms
StringBuilder test.................2209 ms
Integer & Floating ADD.............10301 ms
Exception test.....................437 ms
Reflection and recursion...........9359 ms

Windows XP SP3:
ArrayList strings test.............609 ms
StringBuilder test.................834 ms
Integer & Floating ADD.............1906 ms
Exception test.....................3781 ms
Reflection and recursion...........8281 ms

Code:
Code:
using System.Collections;
using System.Collections.Generic;

 public class TestClass

      {

            static long ticks = 0;

 

            public static void InitTicks()

            {

                  TestClass.ticks = DateTime.Now.Ticks;

            }

 

            public static void ShowTime(string str)

            {

                  long newTicks = DateTime.Now.Ticks;

                  //milliseconds, not Microsoft :)

                  double ms = (newTicks - TestClass.ticks) / TimeSpan.TicksPerMillisecond;

                  Console.WriteLine("{0}{1} ms", str.PadRight(35, '.'), ms);

                  TestClass.ticks = DateTime.Now.Ticks;

            }

 

 

            public static void Test1()

            {

                  ArrayList a = new ArrayList();

                  for(int i=0;i<1000000;i++)

                  {

                        string str = i.ToString();

                        a.Add(str);

                  }

 

                  ShowTime("ArrayList strings test");

 

                  System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();

 

                  Random rnd = new Random();

 

                  foreach(object strObj in a)

                  {

                        strBuilder.Append(strObj as string);

                        strBuilder.Append(rnd.Next().ToString());

                  }

 

                  string s = strBuilder.ToString();

 

                  if(s == "Dsadasdasdsa")

                  {

                        throw(new Exception("no way..."));

                  }

 

                  ShowTime("StringBuilder test");

            }

 

            public static void Test2()

            {

                  int i = 0;

                  double d = 0.0;

                  for(i=0; i<1000000000; i++)

                  {

                        d += i;

                  }

 

                  double d2 = d/2;

 

                  ShowTime("Integer & Floating ADD");

            }

            public static void Test3()

            {

                  int i = 0;

                  int sum = 0;

 

                  for(i=0;i<100000;i++)

                  {

                        try

                        {

                              if(i is int)

                              {

                                    throw(new Exception("the i integer is an integer.. oh no..."));

                              }

                        }

                        catch(Exception ex)

                        {

                              if(ex is NotImplementedException)

                              {

                                    Console.Write("who's responsable for this ?");

                              }

                        }

                  }

 

                  int res = sum/2;

                  if(res == -321)

                        throw(new Exception("this is odd"));

 

                  ShowTime("Exception test");

            }

            public static void Recursive(string str)

            {

                  string name = System.Reflection.MethodBase.GetCurrentMethod().Name;

 

                  if(str.Substring(0, name.Length) == name)

                  {

                        int i = Convert.ToInt32(str.Substring(name.Length));

                        if(i < 1000)

                        {

                  //          Console.Write(i.ToString()+"\n");

                              Recursive(name + (i+1).ToString());

                        }

                  }

           

            }

 

            public static void Test4()

            {

                  for(int i=0;i<1000;i++)

                  {

                        Recursive("Recursive0");

                  }

 

                  ShowTime("Reflection and recursion");

            }

            public static void Main()

            {

                  InitTicks();

 

                  Test1();

                  Test2();

                  Test3();

                  Test4();

            }
}

Damit scheidet schon mal C# aus.

Ich hab mich jetzt auch entschieden:
Programm 1 werde ich doch in C++ schreiben, da es da einfach auf Performance ankommt (Berechnungen laufen alle 0,5 Sek).
Programm 2 fange ich als an, in Python zu schreiben.
 
Beschreib doch mal, was Dein "Programm 1" schwerpunktmäßig tut:

- Fließkommaarithmetik?
- Viele Plattenzugriffe?
- Viel Netzwerktraffic/DB- Zugriffe?
- Viele "gleichartige" Threads/Jobs?

Tu Dir einen Gefallen und suche vernünftige libraries vor dem Programmierbeginn...
 
Programm 1 hat viel Netzwerk-Traffic und muss viel Rechnen (Truppen-Standort, Liefer-Standort, Produktion, etc.).
Evtl. werden auch mehrere Thread's gleichzeitig laufen.

Jedoch hab ich jetzt über etliche Verwandschaftlichen Ecken einen C++-Progger gefunden. Der würde mit helfen und Tipps geben.
 
Auch wenn Du dich schon entschieden hast, würde ich gerne wissen, warum Du dich so gegen Java sträubst.
Ich hab auch mal mit C# angefangen. Als ich dann privat von Windows auf Linux umgestiegen bin, habe ich geschaut, wie plattformunabhängig C# wirklich ist. Da ich auch meistens Anwendungen mit GUI erstelle, habe ich schnell gemerkt, dass man schon Hand anlegen muss, wenn die Anwendung unter Windows und Linux laufen soll. Visual Studio nutzt ja das.NET-Framework. Der MonoDeveloper nutzt GTK. Das war mir einfach zu blöd, vor allem, wenn die Anwendung nicht besonders groß ist. Der Aufwand loht sich nicht.
Mit Java habe ich solche Probleme nicht. Ich kann meine Projekte sowohl auf Windows- wie auch Linux-Maschinen editieren, kompilieren, und sie laufen auf beiden Plattformen, ohne dass ich etwas dazu tun muss.

Und Du sagtest ja, dass Du von C# kommst. C# ist nicht unähnlich zu Java, sollte für dich also weniger Umstellung sein, als von C# zu C++.
 
Ausserdem der quatsch das die JVM so lahm ist, ist einfach schwachsinn. In simplen applications was du da machen willst, wirst du keinen unterschied merken.
Hatte zuletzt ne studie in der hand von nem mitkomulitonen von mir, der hat das als diplom gemacht, war sehr interessant :P
Also wenn man Java richtig programmiert, wirst du keinen utnerschied merken
 
Jop, Programm 1 wird der Server des Spiels, der alle Spielzüge berechnet (und wie ihr euch denken könnt, kann man sowas ganz schlecht in php schreiben).

Und da es hier einfach auf Performance ankommt, hab ich mich für C++ entschieden (auch da ich jetzt einen kennen, der dass richtig gut beherrscht :D).

Ich hab auch schon angefangen und muss sagen, so schlimm ist es nun doch nicht. Wenn man ein paar Tricks draus hat, kein Problem. Das schlimmste wird sein, plattformunabhängige Bibliotheken (XML und MySQL) zu finden.
 
[mein senf]
meiner meinung sollte man probleme mit den werkzeugen lösen die den wenigsten aufwand bieten. ich habe jetzt nicht alles genau durchgelesen. aber warum so kompliziert mit c#, qt,... deine problemstellung sich imho am besten mit java lösen. (vorallem wegen der plattformunabhängkeit).
und performance technisch würd ich mich mit der aussage das c++ schneller ist, nicht so weit aus dem fenster lehnen (stichwort garbage collection).
[/mein senf]
 
Nunja, mit JAVA hab ich absolut keine Erfahrungen. Und da ich jetzt einen kenne, der C++-Profi ist (was ich vorher nicht wusste), werde ich das jetzt in C++ proggen. Sollte ich nämlich Probleme/Fragen habe, weiß ich, an wen ich mich wenden kann. Von daher hab ich mich jetzt für C++ entschieden, da ich keinen kenne, der JAVA beherrscht.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Da sich hier auch ein paar JAVA-Fanatiker gemeldet haben, poste ich das einfach mal hier:

1.) JAVA wird ja kommerziell vertrieben. Wenn ich jetzt mein in JAVA programmiertes Programm auch kommerziell vertreibe, muss ich dann eine Gebühr an Sun zahlen?

2.) Wie sehen mit JAVA erstellte Programme am Ende aus? (Übersetzt in Windows: Erhält man am Ende eine .exe?)

3.) Wenn bei 2.) eine .exe herauskommt, muss auf dem Ziel-PC dann auch JAVA installiert sein?

Wäre über Antworten dankbar, da ich mir dass dann nochmal (und das letzte mal) überlege.
 
Zuletzt bearbeitet:
2.) Wie sehen mit JAVA erstellte Programme am Ende aus? (Übersetzt in Windows: Erhält man am Ende eine .exe?)

An sich hast Du am Ende eine.jar-Datei (exe funktioniert ja nur unter Windows). Kannst aber eine exe drumerhum packen.

3.) Wenn bei 2.) eine .exe herauskommt, muss auf dem Ziel-PC dann auch JAVA installiert sein?

Du must auf dem Rechner, wo es laufen soll, das java runtime environment installieren. Wie bei C# das .NET-Framework.
 
1.) JAVA wird ja kommerziell vertrieben. Wenn ich jetzt mein in JAVA programmiertes Programm auch kommerziell vertreibe, muss ich dann eine Gebühr an Sun zahlen?

Hae? Was wird da kommerziell vertrieben? (Also die Antwort lautet nein.)
 
Es handelt sich hier ausschließlich um Leute, die versuchen, Dir zu helfen. Das würde ich nicht als Fanatismus bezeichnen.
1.) JAVA wird ja kommerziell vertrieben.
Vor Urzeiten gab es eine VM namens Hotspot (von IBM meine ich), die Geld kostete. Sun kaufte diese und gab sie zum JRE dazu. Man konnte Java von SUN schon immer kostenlos runterladen und kommerziell verwenden. Ist mittlerweile OpenSource.
Wenn ich jetzt mein in JAVA programmiertes Programm auch kommerziell vertreibe, muss ich dann eine Gebühr an Sun zahlen?
War nie der Fall und wird auch nicht so sein.

2.) Wie sehen mit JAVA erstellte Programme am Ende aus?
Üblicherweise werden Java-Programme als .jar-Datei (Java ARchive ausgeliefert, die im Wesentlichen eine ZIP Dateien ist.
(Übersetzt in Windows: Erhält man am Ende eine .exe?)
Wenn unter Windows ein Runtime-Environment installiert ist, kann man korrekt aufgebaute JAR-Dateien einfach doppelklicken. Einige Entwickler schreiben auch eine kleine EXE, die aber nichts anderes tut, als Java mit dem Jar-File als Argument aufzurufen.

3.) Wenn bei 2.) eine .exe herauskommt, muss auf dem Ziel-PC dann auch JAVA installiert sein?
Ja. Wenn nicht, kann man ein JRE-Installationspaket problemlos in den Installer dazupacken und es installieren, wenn keine passende JRE installiert ist. Die 8MB zusätzlich machen den Kohl auch nicht fett.
Wäre über Antworten dankbar, da ich mir dass dann nochmal (und das letzte mal) überlege.
Aus Machbarkeitsgründen würde ich Dir auch zu Java raten. Dort sind Netzwerk-, Multithreading/Synchronisations- und Datenbankanbindung deutlich komfortabler und portabel realisiert sind. Ausserdem ist die Arbeit nicht umsonst: Du könntest einen Prototypen in Java realisieren, zeitkritische Bereiche identifizieren und die Klassen dann native über das Java Native Interface nach und nach in C/C++ implementieren.
 
Zuletzt bearbeitet:
Ich meinte das Runtime Environment. Download ist um die 7MB für die Online- und 15MB für die Offline Installation.
 
Zuletzt bearbeitet:
Nagut, das wird bei mir auch durch die Bibliothek definiert, aber das ist sicher Definitionssache.
 

Ähnliche Themen

Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

Systemadministrator Linux (m/w) in Nürnberg

Einstieg in die QT-Programmierung

Tool zum Streamen von Video-Podcasts

g++ Shared Libraries

Zurück
Oben