Zukunft von C++



  • Welchen Thread meinst du?



  • Den hier:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1783288.html#1783288

    (am Ende)

    Von hier "gestartet":
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-250760.html

    Finde es zwar blöde, dass er da angefügt wurde, weil es ja nicht mehr direkt mit dem Thema zu tun hat..



  • Naja, ich wollte jetzt eigentlich nicht wissen, ob C++ für große Projekte sinvoll ist oder nicht. Sondern ob ihr denkt, das Java oder C#, C++ durch wachsende Rechnerleistung immer mehr den Rang in der Desktop Anwendungsentwicklung abläuft. Oder was heute, wen man ein neues Projekt beginnt, noch für C++ und gegen Java/C# spricht.



  • Also bitte, dazu gibt es wirklich schon genügend Threads hier. 🙄

    • Warum lassen C/C++ Compiler soviel Müll zu?
    • Alternative zu C,C++
    • Verleitet C++ zum komplizierteren denken?
    • Ich habe gehört, C++ stirbt aus, weil die Sprache den Trend hin zu prall gefüllten STDLIBS verpasst hat...
    • Ist es sinnvoll heute noch C++ anzufangen?
    • Grml...C++ wird sterben? 😣
    • Von C++ umsatteln, nur auf was?


  • ++ ist eh out.

    Java sind 4 Buchstaben, C nur einer. Wenn man knappen und effizienten Code sucht 🕶



  • P.S.: Sachliche, objektive Diskussionen wirst du hier nicht finden. Nie.

    Wenn du deinen Verstand einsetzt, findest du mit der Zeit heraus, welchen Benutzern eher Glauben zu schenken ist. Auf deren Argumenten aufbauend kannst du dir eine halbwegs sinnvolle Meinung bilden. Viel Glück.



  • Bei dem Thema schon gar nicht. Wie auch. Jeder nimmt das was ihm liegt und das ist ok.



  • shizzo schrieb:

    Naja, ich wollte jetzt eigentlich nicht wissen, ob C++ für große Projekte sinvoll ist oder nicht. Sondern ob ihr denkt, das Java oder C#, C++ durch wachsende Rechnerleistung immer mehr den Rang in der Desktop Anwendungsentwicklung abläuft. Oder was heute, wen man ein neues Projekt beginnt, noch für C++ und gegen Java/C# spricht.

    IMHO gibt es einiges, was dafür spricht. Und das ist bei weitem nicht nur die ansteigende Rechenleistung.

    Du kannst ja mal in die Hochschulen gucken. Dort lernen die Studenten Java, vielleicht inzwischen auch C#. C++ ist dort eher bestimmten Anwendungsgebieten vorbehalten, da es eben eine wesentlich komplexere Sprache ist. Naja, zumindest führt die Lehre an den Hochschulen dazu, dass das Know-How bezüglich Java und C# bei wesentlich mehr Absolventen vorhanden ist, als vergleichbares C++ Know-How.

    Dann kannst Du Dir die Werkzeuge angucken. Vergleich zum Beispiel mal eine gute Java-IDE mit einer entsprechenden C++ IDE. Du wirst feststellen, dass die Java-IDE wesentlich mehr leistet und den Entwickler in deutlich mehr Punkten unterstützt.

    Natürlich haben Sprachen wie Java und C# auch Nachteile. Eine geringere Ausführungsgeschwindigkeit der Programme zum Beispiel. Dieser Nachteil ist in den letzten Jahren allerdings stark abgeschwächt worden, weil es zum einen Fortschritte bei den Virtuellen Maschinen gab, zum anderen eine Zunahme der Rechenleistung die Relevanz dieses Nachteil vermindert hat. Trotz allem ist dieser Nachteil aber weiterhin vorhanden: Wenn man also ein Anwendungsgebiet hat, bei dem die Geschwindigkeit absolut wichtig ist, wird sich C++ durchsetzen. Zum Beispiel die Spieleprogrammierung. Oder HPC, obwohl da auch weiterhin Fortran sehr sehr stark ist.

    Dann kann man die Ausdrucksmöglichkeiten in den verschiedenen Sprachen betrachten. C++ bietet einem da wesentlich mehr Möglichkeiten, die es einem erlauben, für bestimmte Dinge wesentlich eleganteren Code zu schreiben. Das kann Vorteile haben, wenn der Code dadurch zum Beispiel wesentlich kleiner und wartbarer wird. Allerdings sehe ich derartige Vorteile nicht bei 08/15-Anwendungsentwicklung für den Desktop. In so einem Anwendungsgebiet ist es eher wichtig, eine entsprechende Unterstützung durch Bibliotheken zu haben. Java und C# decken diesen Bereich sehr gut mit ihren Standardbibliotheken ab, die jeder kennt, der sich halbwegs mit der Sprache auseinandersetzt. Für C++ gibt es natürlich auch entsprechende Bibliotheken, aber die Betonung liegt hier auf der Mehrzahl. Es gibt keine, die klar dominiert und entsprechend verteilt sich das vorhandene Know-How. Es ist als Arbeitgeber vermutlich wesentlich einfacher, einen Javaentwickler zu finden, der sich mit der Standardbibliothek auskennt, als einen C++Entwickler, der die Bibliotheken abc, xyz und uvw beherrscht.

    Als Vorteil für C++ kann man den vorhandenen Code ansehen. Geschichtlich gesehen wurden viele große Desktop-Projekte mit C++ gemacht. Entsprechende Programme schreibt man dann natürlich nicht ohne wirklich starke Gründe in einer anderen Sprache neu. Stattdessen verwendet man weiter C++, um die Programme weiterzuentwickeln.

    Das da oben sind natürlich nur ein paar Aspekte, die sich auf den Einsatz der verschiedenen Sprachen für die Desktop-Anwendungsentwicklung auswirken. Es wird noch viele weitere geben.



  • Desktop-Anwendungen für Windows dürften wohl verstärkt in C# oder VB.net gemacht werden. Aber wenn man portable Desktopanwendungen schreiben will, dann wird man zur Zeit wohl kaum an C++ vorbeikommen und mit steigender Popularität von nicht-Windows-Desktops wird das Thema ja auch immer wichtiger. Java scheint hier nicht so verbreitet zu sein, da sich Java-GUI-Anwendungen auf jedem System fremd anfühlen (ich weiß, es gibt auch Qt-Bindings und native bindings). Bis auf Spezialanwendungen, wie Matlab, und vielleicht Firmen-/Uniinterne Sachen fällt mir da auch nichts ein. Von irgend wem habe ich mal den Spruch gehört, dass Programmiersprachen wie Abwasserwerke sind. Sie sind wichtig und sie müssen da sein. Aber sobald man als Anwender etwas von ihnen mitbekommt, ist etwas komplett falsch gelaufen. Und gegen das Prinzip verstößt Java nach meiner Erfahrung.

    Aber ganz ehrlich denke ich auch, dass Desktop-Anwendungen immer mehr an Bedeutung verlieren und Webanwendungen immer wichtiger werden. Und da scheinen ja derzeit vor allem Sprachen wie Python, Ruby und Javascript sehr erfolgreich zu sein.



  • rüdiger schrieb:

    Aber ganz ehrlich denke ich auch, dass Desktop-Anwendungen immer mehr an Bedeutung verlieren und Webanwendungen immer wichtiger werden. Und da scheinen ja derzeit vor allem Sprachen wie Python, Ruby und Javascript sehr erfolgreich zu sein.

    den absoluten renner seit jahren, PHP, haste aber vergessen. das hier z.b. ist auch in PHP entwickelt worden: http://eyeos.org/
    🙂



  • Ja, Java, C# und PHP sind schon ziemlich gefragt, zur Zeit, wobei man, gerade bei Stellenangeboten, auch einige C++-Gesuche findet. C++ hat Vorteile gegenüber anderer Sprachen und nimmt zweifellos eine wichtige Schlüsselrolle in der Programmiersprachenwelt ein. Java, C#, PHP - alle sind sie mittlerweile auf "Enterprise" getrimmt. XML, Webservices, Managed - Schlagwörter der letzten Jahre. Und die drei Großen haben sich jedem Hype angepasst. Gerade C# ändert sich teilweise so schnell, dass man kaum noch mit dem Lernen neuer Programmierfeatures nachkommt. Seit Version 3 ist die Sprache ein überfrachteter Misthaufen.

    C++ hingegen verkörpert eine gewisse Beständigkeit - lauffähig auf nahezu jeder Plattform und sinnvoll einsetzbar für jeden Zweck und überhaupt nicht an irgendeinen Konzern gebunden. Darum können noch viele Javas, Rubys und Basics kommen, C++ wird nicht aussterben.

    Allgemein empfehle ich dir aber, die Sache einfach nüchterner zu betrachten. Die Sprache ist ein Werkzeug, mehr nicht. Das Programmieren findet im Kopf statt.



  • Ich denke, daß C++ erstmal bleibt, weil die Java-Sprachen Performancestrafen für Abstraktion (insesondere Objektorientierung!) aussprechen.



  • volkard schrieb:

    Ich denke, daß C++ erstmal bleibt, weil die Java-Sprachen Performancestrafen für Abstraktion (insesondere Objektorientierung!) aussprechen.

    Ohne jetzt nen Flamewar lostreten zu wollen, ich arbeite recht viel mit beiden Sprachen (C++ und Java) und würde darüber gerne mehr erfahren (was macht die jvm intern bei bestimmten Konstruktionen und wie/warum wirkt sich das auf die Performance aus)... hast du da Quellen oder Links die das näher erläutern?



  • @ Gregor:
    Doch noch jemand, der nicht nur rumtrollt, sondern sinnvoll argumentieren kann. 👍

    @ eXistence:
    volkard spielt wahrscheinlich auf den Umstand an, dass in Java das Prinzip "zahle nichts, was du nicht brauchst" viel weniger strikt durchgezogen wird. Beispiel sind Methoden, die standardmässig virtuell sind. Oder überprüfte Downcasts, bei denen man sich in C++ sicher ist und static_cast verwenden kann. Das macht Java aber deswegen nicht schlecht, schliesslich kann die Fehleranfälligkeit durch den zusätzlichen Overhead eingedämmt werden.



  • Nexus schrieb:

    volkard spielt wahrscheinlich auf den Umstand an, dass in Java das Prinzip "zahle nichts, was du nicht brauchst" viel weniger strikt durchgezogen wird. Beispiel sind Methoden, die standardmässig virtuell sind. Oder überprüfte Downcasts, bei denen man sich in C++ sicher ist und static_cast verwenden kann.

    stimmt.

    Nexus schrieb:

    Das macht Java aber deswegen nicht schlecht, schliesslich kann die Fehleranfälligkeit durch den zusätzlichen Overhead eingedämmt werden.

    stimmt.

    Deswegen wird C++ auch in kleine Nischen abgedrängt wie Gamecoding und so Sachen halt, wo man noch performanceorientiert programmiert.



  • Kann man C# Programme eigentlich auch so einfach erkennen wie Java Programme? Oder könnte man ein C# Programm auch mit nem C++ Programm verwechseln? Gibts eigentlich irgendwo ne Liste darüber, welche Programme mit welcher Sprache geschrieben sind?



  • xyzet schrieb:

    Kann man C# Programme eigentlich auch so einfach erkennen wie Java Programme? Oder könnte man ein C# Programm auch mit nem C++ Programm verwechseln? Gibts eigentlich irgendwo ne Liste darüber, welche Programme mit welcher Sprache geschrieben sind?

    Lässt sich mit file und ldd recht leicht feststellen. Ersteres sagt einem etwas über das Dateiformat und letzteres welche dynamische Bibliotheken eine "Executable" benötigt. Dadurch lässt sich sehr viel über die verwendete Sprache herausfinden. Für ein C++ Programm kann das so aussehen:

    linux-gate.so.1 => (0xb80af000)
    libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/libstdc++.so.6 (0xb7fa9000)
    libm.so.6 => /lib/libm.so.6 (0xb7f83000)
    libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/libgcc_s.so.1 (0xb7f75000)
    libc.so.6 => /lib/libc.so.6 (0xb7e32000)
    /lib/ld-linux.so.2 (0xb80b0000)

    Ein Programm das nicht in C oder C++ geschrieben worden ist kann ich gerade nicht auf meinem System finden.



  • Nein, Bibliotheken sind nur Indizien! Fangfrage: Mit welcher Sprache wurde folgendes Programm geschrieben:

    linux-gate.so.1 =>  (0x002ff000)
    	librt.so.1 => /lib/librt.so.1 (0x0041f000)
    	libutil.so.1 => /lib/libutil.so.1 (0x05c89000)
    	libdl.so.2 => /lib/libdl.so.2 (0x003c6000)
    	libm.so.6 => /lib/libm.so.6 (0x0039c000)
    	libgmp.so.3 => /usr/lib/sse2/libgmp.so.3 (0x03bb5000)
    	libc.so.6 => /lib/libc.so.6 (0x00428000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0x003cd000)
    	/lib/ld-linux.so.2 (0x00205000)
    


  • Mit Scheme



  • Gregor schrieb:

    Natürlich haben Sprachen wie Java und C# auch Nachteile. Eine geringere Ausführungsgeschwindigkeit der Programme zum Beispiel. [...]

    Ein Nachteil bei der Ausführungsgeschwindigkeit merkt IMHO eh keiner mehr. Mehr aber die Startgeschwindigkeit. In Java muss ja immernoch leider die gesammte JVM und JRE geladen werden. Es werden ja jetzt mehr Schritte unternommen um das ganze modularisierter zu machen.

    Gregor schrieb:

    Dann kann man die Ausdrucksmöglichkeiten in den verschiedenen Sprachen betrachten. C++ bietet einem da wesentlich mehr Möglichkeiten, die es einem erlauben, für bestimmte Dinge wesentlich eleganteren Code zu schreiben. Das kann Vorteile haben, wenn der Code dadurch zum Beispiel wesentlich kleiner und wartbarer wird. [...]

    Kleinerer Code ist nicht automatisch eleganter oder wartbarer. Ein MVC Model z.B. kann ziemlich viel Code haben, trotzdem ist es einem kompakterem Model vorzuziehen, da eleganter und wartbarer.

    rüdiger schrieb:

    Desktop-Anwendungen für Windows dürften wohl verstärkt in C# oder VB.net gemacht werden. Aber wenn man portable Desktopanwendungen schreiben will, dann wird man zur Zeit wohl kaum an C++ vorbeikommen und mit steigender Popularität von nicht-Windows-Desktops wird das Thema ja auch immer wichtiger. Java scheint hier nicht so verbreitet zu sein, da sich Java-GUI-Anwendungen auf jedem System fremd anfühlen (ich weiß, es gibt auch Qt-Bindings und native bindings). Bis auf Spezialanwendungen, wie Matlab, und vielleicht Firmen-/Uniinterne Sachen fällt mir da auch nichts ein. Von irgend wem habe ich mal den Spruch gehört, dass Programmiersprachen wie Abwasserwerke sind. Sie sind wichtig und sie müssen da sein. Aber sobald man als Anwender etwas von ihnen mitbekommt, ist etwas komplett falsch gelaufen. Und gegen das Prinzip verstößt Java nach meiner Erfahrung.

    Aber ganz ehrlich denke ich auch, dass Desktop-Anwendungen immer mehr an Bedeutung verlieren und Webanwendungen immer wichtiger werden. Und da scheinen ja derzeit vor allem Sprachen wie Python, Ruby und Javascript sehr erfolgreich zu sein.

    Es gibt genuegend andere Sprachen, die du ja anscheinend nur fuer "Webanwendungen" angebracht siehst. Mit PyQT, oder fuer KDE die Javascript Bindings mit denen du die Applets schreiben kannst. Auch fuer Ruby und Perl gibt es genug GUI-Frameworks.

    Und das Argument, dass sich Java immer fremd anfuehlt, naja. Was ist mit z.B. Winamp, oder mit den Ribbons von Office 2007? Oder jede x beliebige andere Anwendung, die irgendwas neues erfinden muss, um sich von den anderen Anwendungen hevorheben zu muessen? IMHO alleine fuer den Mac gibt es sowas wie ein konistentes Aussehen, aber grade auf Windows sehen zwei Anwendungen nie gleich aus. Java muesste einfach ein moderneres Look&Feel bekommen. Das aktuelle fuer Swing sieht wieder altmodisch aus.

    Aber ein Vorteil muessten die ganzen andere Programmiersprachen noch aufholen. Mit einer Java app kann ich einfach die .Jar runterladen und es laeuft. Ich kann es auch direkt aus dem Webbrowser starten lassen. Allein Python und Perl sind genauso elegant, aber ich denke das die JRE auf mehr Computer vorinstalliert ist, als ein Python oder Perl Interpreter.

    Mit einem C/C++ Programm muss ich mich mit meinem System auskennen. Ist es Windows, Linux, Mac, ist es x86 oder amd_64 oder powerPC? Was wenn ich einen amd_64 habe, aber die Executable ist nur fuer x86? Wie steht das mit deinem "Programmiersprachen [sind] wie Abwasserwerke" Prinzip?


Anmelden zum Antworten