Zukunft von C++
-
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 undstatic_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?
-
DEvent schrieb:
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?
Und die sind ale zu 90% ein Usability desaster.
-
@DEvent
Also auf meinem Rechner war anfangs kein Java drauf. Ich musste zumindest das JRE ganz normal installieren und genausovile über meinen Rechner wissen. Kein Wunder die JRE ist ja auch in C++ geschrieben. Was eigentlich gemeint war, am Look and Feel sollte man die Sprache nicht erkennen und das erfüllt Java nicht.
-
Tyrdal schrieb:
@DEvent
Also auf meinem Rechner war anfangs kein Java drauf. Ich musste zumindest das JRE ganz normal installieren und genausovile über meinen Rechner wissen. Kein Wunder die JRE ist ja auch in C++ geschrieben. Was eigentlich gemeint war, am Look and Feel sollte man die Sprache nicht erkennen und das erfüllt Java nicht.Dann nimm halt SWT und nicht Swing. Kannst auch gerne die QT Bindings nehmen. Oder nimm ein anderes Look&Feel, als eine profisionelle Firma kannst du auch gerne dein eigenes entwickeln.
-
DEvent schrieb:
Java muesste einfach ein moderneres Look&Feel bekommen. Das aktuelle fuer Swing sieht wieder altmodisch aus.
Meinst du damit schon das Nimbus Look and Feel? Das sieht doch ganz ordentlich aus. Ansonsten soll Substance auch nen ganz gutes sein: https://substance.dev.java.net/see.html
Tyrdal schrieb:
Was eigentlich gemeint war, am Look and Feel sollte man die Sprache nicht erkennen und das erfüllt Java nicht.
Das Ziel von Swing ist halt überall gleich auszusehen. Wenn ich unter Windows eine Anwendung schreibe muss ich mir z.B. keine Gedanken darüber machen das Buttons unter Mac OS eine andere Form haben oder ähnliches.
-
DEvent schrieb:
Es gibt genuegend andere Sprachen, die du ja anscheinend nur fuer "Webanwendungen" angebracht siehst.
Nein, dass hab ich nicht gesagt. Kein Grund sich künstlich aufzuregen. Du müsstest ja nur mal einen Blick auf meine Signatur werfen, um Flusspferd zu entdecken...
DEvent schrieb:
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.
Gut, dann sag ich es mal so: Das Standard Java-Interface schaut halt überall hässlich aus. Mit einem modernen Look&Feel würde es sicher gehen. Aber zZ sehen die Programme halt aus wie 1998 mit Bitmap-Fonts (zB Matlab). Aus dem Grund ist Java eben auch nicht wirklich in dem Desktop-Anwendungsbereich etabliert, in dem die User auch die Kunden sind.
DEvent schrieb:
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.
Ne, so einfach ist das nicht. Man muss sich dann noch die Java-Runtime installieren und nur auf OSX ist die iirc vorinstalliert. Und die JRE wird ja mittlerweile mit immer mehr Crapware (Browsertoolbars, Trialware) voll gestopft.
Und schau einfach mal, wo man landet, wenn man nach "sun jre" oder "sun java" oder "java" sucht: http://java.sun.com/javase/downloads/index.jsp
ich denke da wissen User noch eher, ob sie nun die Software für Mac OS X, Linux oder Windows runterladen müssen, als rauszufinden, ob sie nun das JDK mit NetBeans brauchen oder doch lieber Update 14 oder reicht vielleicht nur das Timezone Update Tool? (Hey, ich bin Programmierer, ich habe schon mit Java gearbeitet und ich wüsste nicht einmal auf Anhieb, was ich da jetzt runterladen muss)
-
rüdiger schrieb:
Und schau einfach mal, wo man landet, wenn man nach "sun jre" oder "sun java" oder "java" sucht: http://java.sun.com/javase/downloads/index.jsp
Also wenn ich nach Java suche, finde ich: http://www.java.com/de/
Das ist eine Seite, auf der ich die passende JRE sehr bequem runterladen kann. Du hast die Downloadseite für die Entwickler gezeigt, nicht die für die Nutzer.
-
rüdiger schrieb:
Gut, dann sag ich es mal so: Das Standard Java-Interface schaut halt überall hässlich aus. Mit einem modernen Look&Feel würde es sicher gehen. Aber zZ sehen die Programme halt aus wie 1998 mit Bitmap-Fonts (zB Matlab).
hihi, dann haste wohl noch nie linux benutzt. was es da für verschiedene look+feels, windowmanager, desktop environments usw. gibt, würde dich erschrecken.