In wie fern lohnt sich C++ für einen Javaentwickler

Rudolf

Bekanntes Mitglied
Hi,

ich finde im Internet viel geteilte Meinung.

Auf der einen Seite gibt es, besonders auf der Linuxseite, unheimlich viele interessante Projekte in C++. Auf der anderen Seite ist Java konzeptionell weiter als C++ und bringt bei Performance und Programmiereleganz einiges mehr als C++, wohingegen C++ bei der Paradigmavielfalt wohl Java noch einiges voraus ist.

Glaubt ihr, dass die gängigen Programme wie Desktop Environments oder oft genutzte Programme wie Webbrowser irgendwann in Java entwickelt werden? Oder hat Java gegenüber C++ entschiedene Nachteile.

Wem gehört die Zukunft? Lohnt sich das Lernen von C++ überhaupt noch für einen Javaentwickler? Für welche Bereiche ist C++ geeigneter als Java?
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Sicher, dass du C++ meinst?
Schau mal hier. -> TIOBE Software: The Coding Standards Company
Also die Zukunft gehört wohl dem portablen Bytecode (C# und Java), den Rest (JNI, bei C#... k.P. lässt sich afaik auch direkt native kompilieren) bekommt man gut mit C hin. Was will man mehr?
Hatte vor einigen Jahren mal nach Performanceunterschieden zwischen LWJGL, JOGL und nativen OpenGL gesucht, daraus ging hervor, dass diese damals schon kaum messbar waren.
 
G

Gast2

Gast
Moin,

schöne Grafik - zeigt nur den Hype um Phone & Co.

Also die Zukunft gehört wohl dem portablen Bytecode (C# und Java), den Rest (JNI, bei C#... k.P. lässt sich afaik auch direkt native kompilieren) bekommt man gut mit C hin.
Vieleicht auf dem PC aber nicht Embedded - da ist es (dummerweise) eher C oder sehr C lastiges C++. Unter Embedded ist es sinnlos erst eine VM zu starten und anschließend das eigentliche Programm.

Was will man mehr?
(persönlich) C++ hat einige Vorteile gegenüber C, Polymorphie ist ein absoluter Segen in der Programmierung.

Hatte vor einigen Jahren mal nach Performanceunterschieden zwischen LWJGL, JOGL und nativen OpenGL gesucht, daraus ging hervor, dass diese damals schon kaum messbar waren.
wieso reiten eigentlich immer alle auf der Performance rum?

hand, mogel
 
S

Spacerat

Gast
schöne Grafik - zeigt nur den Hype um Phone & Co.
Welcher Gedanke fördert diese Annahme? Vllt. zeigts ja auch nur den Hype um die Portabilität, die Bytecode liefert.
(persönlich) C++ hat einige Vorteile gegenüber C, Polymorphie ist ein absoluter Segen in der Programmierung.
Natürlich, sonst hätte man diese Sprache nicht entwickelt. Bytecode-Sprachen wie C# und Java bieten aber nicht blos Polymorphie. Ausserdem könnte man auch sagen, dass Java gegenüber C++ weitere Vorteile hat und C# evtl. sogar noch viel mehr. Vllt. gibt es ja bald CPP2Bytecode- oder C#2Embedded-Compiler. Faktisch ist Bytecode nichts anderes als nativer Code für virtuelle Maschinen bzw. virtuelle Prozessoren.
wieso reiten eigentlich immer alle auf der Performance rum?
Weil's der einzig verbleibende Grund ist, wo man sich für nativen Code entscheiden würde, solange man die Wahl hat und penibel Taktzyklen zählt. Ansonsten kann man sich nur noch an guten Sprachkonzepten und deren Erlernbarkeit orientieren.

Also um die Frage mal klar zu beantworten: Wenn man nicht gerade irgendwelche Microcontroller programmiert, wo ohnehin C vorherrscht, lohnt sich für einen "bereits" Java-Entwickler die zusätzliche Erlernung von C++ kaum.
 

Helgon

Bekanntes Mitglied
Hatte vor einigen Jahren mal nach Performanceunterschieden zwischen LWJGL, JOGL und nativen OpenGL gesucht, daraus ging hervor, dass diese damals schon kaum messbar waren.

Es ist aber nun mal so, dass alle guten Engines/Frameworks (für Spiele/3D) eben für C++ geschrieben sind.

Glaub nicht, weil du es angesprochen hast, Browser in Zukunft in java geschrieben werden.. ich bin jetzt keine java guru, aber wenn ich nur mal überlege was mit c++ geht, da wüsst ich nichtmal wo ich in java ansetzen soll (aber auch vllt nur weil mir die kentnisse fehlen), beispielsweise irgend ein programm hooken, und dann im speicher rumfummeln, auf hinstances zugreifen etc.. hat auch irgendwie was schönes die sprache mit den operatoren überladen und den ganzen möglichkeiten die man hat, aber vom schreibaufwand ist das ja auch wieder ein gutes stück mehr als in Java.

Ich find, was spricht dagegen beides zu können. Syntax beim programmieren ist eh immer das selbe und dann muss man eben die sprachspezifischen feinheiten lernen, aber das sollte wohl auch kein all zu großes problem darstellen, wenn man sich wirklich für interessiert

grüße
 
S

Spacerat

Gast
Es ist aber nun mal so, dass alle guten Engines/Frameworks (für Spiele/3D) eben für C++ geschrieben sind.

Glaub nicht, weil du es angesprochen hast, Browser in Zukunft in java geschrieben werden.. ich bin jetzt keine java guru, aber wenn ich nur mal überlege was mit c++ geht, da wüsst ich nichtmal wo ich in java ansetzen soll (aber auch vllt nur weil mir die kentnisse fehlen), beispielsweise irgend ein programm hooken, und dann im speicher rumfummeln, auf hinstances zugreifen etc.. hat auch irgendwie was schönes die sprache mit den operatoren überladen und den ganzen möglichkeiten die man hat, aber vom schreibaufwand ist das ja auch wieder ein gutes stück mehr als in Java.

Ich find, was spricht dagegen beides zu können. Syntax beim programmieren ist eh immer das selbe und dann muss man eben die sprachspezifischen feinheiten lernen, aber das sollte wohl auch kein all zu großes problem darstellen, wenn man sich wirklich für interessiert

grüße
Das ist vollkommen korrekt, mit c++ kann man mehr machen. Dafür hätte man in Java allerdings noch JNI, was dann allerdings auch dort die Portabilität einschränkt. Es spricht nur wenig dagegen mehrere Sprachen zu können. Ich würde aber eher noch C anstatt C++ lernen, von wegen JNI, der Programmierung von Microcontollern usw (Java und C streiten sich deswegen seit geraumer Zeit auch um die ersten beiden Plätze auf dem TIOBE-Index). Die Syntax ist immer... sagen wir ähnlich. Weil das so ist, kann das Erlernen von zwei oder mehr Programmierspachen zu ungewollten Verwechslungen führen und das nicht nur bei der Syntax. Wenn einem solche Verwechslungen beim Erlernen einer neuen Sprache auffallen und man das nicht in den Griff bekommt, sollte man es lieber aufgeben oder auf Eis legen und irgendwann einen neuen Versuch starten. Je mehr Sprachen man sich aneignet, desto häufiger verhaspelt man sich.
 
Zuletzt bearbeitet von einem Moderator:

Crian

Top Contributor
Schwer zu sagen. Ich habe zuerst C gelernt, dann C++ und zuletzt Java und auch mit allen dreien Geld verdient. Andere Sprachen noch davor / dazwischen und zusätzlich.

Es ist ja lange nicht nur die Syntax, die es zu erlernen gilt. Die ist meist schnell erledigt. Als nächstes kommen dann die Standardbibliotheken hinzu und als fast das wichtigste, wie ich finde, den "Geist" der Sprache zu erfassen und zu verinnerlichen. Tut man das nicht, dann wird man immer holprig und unelegant in einer Sprache bleiben.

Man kann in allen Sprachen Fortran programmieren, wenn man will. (Ja, damit hab ich auch schon Geld verdient, ist aber etwas her.)
 
A

Akeshihiro

Gast
[OT]
[OT]I kann Denglisch, also Deutsch in Englisch sprechen, oder wie soll man's verstehen? Fortran ist doch afaik auch nur 'ne Sprache?[/OT]
Das sollte vermutlich nur heißen, dass nur weil man technisch eine Sprache "nutzt", man diese aber eigentlich doch nicht nutzt (Konventionen, Techniken, ...). Beispielsweise ist Java ja OOP, es gibt aber auch Leute, die prozedural programmieren oder sonst was anstellen, nur kein OOP o_O[/OT]
 
G

Gast2

Gast
Welcher Gedanke fördert diese Annahme? Vllt. zeigts ja auch nur den Hype um die Portabilität, die Bytecode liefert.
hmmm - weil Objectiv-C geradezu explodiert ist in 3 Jahren? Java geht langsam Berg ab, .NET hällt sich ungefähr die Waage (VB--, C#++). C++ geht runter.

Weil's der einzig verbleibende Grund ist, wo man sich für nativen Code entscheiden würde, solange man die Wahl hat und penibel Taktzyklen zählt.
Wenn Du anfängst Taktzyklen zu zählen musst Du in den vom Compiler erzeugten Code schauen - bevor der Assembler drüber fährt. Und wenn Du das machen musst, dann befindest Du Dich nicht mehr auf einem normalen PC sondern im embedded Bereich und machst Sicherheitskritische Echtzeitanwendungen. Nicht mal den aktuellen Prozessor den ich programmiere zähle ich die Taktzyklen - wozu auch?

Bei allen anderen Dingen sind die Prozessoren völlig unterfordert.

Wenn man nicht gerade irgendwelche Microcontroller programmiert, wo ohnehin C vorherrscht,
Welcher Gedanke fördert diese Annahme? Ich habe hier ein BS für einen Microcontroller das (offiziell) seine API nur als C++ bereitstellt.

lohnt sich für einen "bereits" Java-Entwickler die zusätzliche Erlernung von C++ kaum.
Welcher Gedanke fördert nun diese Annahme?
 

Marco13

Top Contributor
C++ lohnt sich auf jeden Fall, weil es besser und schneller ist als Java.

:joke:

Ich würde fast so weit gehen, zu sagen, dass sich jede (echte) Programmiersprache "lohnt". (~"Lohnt sich Spanisch wenn man schon Italienisch kann?") Das übliche Bashing und was für welchen speziellen Fall in welcher Hinsicht "besser" ist, findet sich in ungefähr 31231 Threads hier im Forum und im Netz insgesamt.
 
B

Beni

Gast
Ein bisschen C++ erweitert sicherlich den Horizont.
  • Da kann man mal genauer beobachten, was der Rechner macht (z.B.: Heap vs Stack)
  • Oder neue Konzepte und deren Auswirkungen lernen, wie Templates oder "call by reference".
 

Rudolf

Bekanntes Mitglied
Das finde ich ja interessant. Warum hatte ObjiC den größten Zulauf unter den "oberen" Sprachen und warum geht der Trend für Java nach unten, hätte etwas umgekehrtes erwartet
 

Empire Phoenix

Top Contributor
Weil wenn man für gayphones entwickeln muss nunmal in objectc programmiert (erzwungenermaßen) , und da das richtig kacke dokumentiert ist muss man halt mehr nachfragen / googlen ect, und schon hat man bei der art wie dieser index generiert wird einen richtig hohen wert ;)

(An all Mac Fag's es handelt sich hierbei um eine halb sarkastische aussage, ihr braucht nicht aus protest flugzeuge in hochhäuser fliegen)
 
S

Spacerat

Gast
Ich habe hier ein BS für einen Microcontroller das (offiziell) seine API nur als C++ bereitstellt.
Dabei kann es sich nur um ein Bundle wie z.B. Arduino handeln (Arduino selber natürlich nicht, denn da steht offiziell C/C++) und nicht um eine reine Prorgammierschnittstelle (ISP InSystemProgrammer). Letztere lassen die Sprache relativ (auf der Treiber CD ist eigentlich immer ein C-Compiler zu finden) offen, weil letztendlich auch da nur für den Controller verständlicher "Bytecode" (prozessorabhängiger Maschinencode) übertragen wird.
Was immer wieder gerne vergessen wird, ist die Tatsache, dass Programmiersprachen eigentlich nur Dolmetscher zwischen Mensch und Maschine sind und als Programmiersprache deswegen nur das in Frage kommt, was man am ehesten versteht.
C++ ist und bleibt die Weiterentwicklung von C, bietet unter anderem OOP dessen Kenntnisse man sich als Javaentwickler hoffentlich bereits angeeignet hat. Warum also sollte man sich noch mit C++ belasten, wenn man mit Java und C selbiges erreicht. Den Horizont erweitern, ist eine gute Idee aber nur wenn man plant, es auch zu nutzen. Das wäre für Java vorwiegend der Microcontroller-Bereich, obwohl ich da auch schon von Javaprozessoren gehört, mich aber noch nie damit befasst habe.
Das hier ist zwar 'ne Einführung in die Programmierung, könnte aber dennoch hilfreich sein.
 
K

KuhTee

Gast
Auf der anderen Seite ist Java konzeptionell weiter als C++ und bringt bei Performance und Programmiereleganz einiges mehr als C++...
Zum Beispiel? Du meinst doch nicht etwa solch abgrundtief hässliches wie Java Generics?


Warum man C++ lernen sollte? Nun, um richtig programmieren zu lernen natürlich :) Viele Java Entwickler haben null Ahnung, wenns mal etwas technisch tiefer gehen soll. Zwar geht es auch mit C technisch in die Tiefe, aber C++ ist wesentlich mehr als nur eine "Erweiterung" von C. Gerade die Art und Weise wie C++ mit Klassen und Objekten umgeht ist für Java Entwickler immer ganz toll und begeisternd, wenn sie dann mal durchgestiegen sind.
 

Helgon

Bekanntes Mitglied
Da muss ich KuhTee zustimmen.. ich bin Fanboy von gar nichts, also nicht falsch verstehen, aberals ich dann C++ "richtig gelernt" hab, hatte ich manchmal wirklich Euphorie momente, weil alles plötzlich einen Sinn ergab. Einfach weil es notwendig war, dies im Zuge dessen was im Buch gemacht wurde zu erklären (in dem C++ Buch). Oder das man nicht nur auf Funktionen des Java SDK zugreift, sondern sich wirklich mal selber Gedanken macht wie etwas funktioniert (klar gibt es bspw auch Boost, aber mal davon abgesehen).

Ich z.B. hab C++ "nur" für DirectX gelernt. Wofür auch sonst, Treiber schreib ich keine (warum oder wofür auch), für Microcontroller nimmt man wie gesagt eh C, und wenns an etwas mit ner GUI geht lieber C# oder Java, was wesentlich bequemer als der "Umweg" über QT ist.

Trotzdem muss ich sagen, dass mir das C++ lernen am meisten gebracht hat - in Punkto das ich wirklich verstehe was da passiert und wie und eben nicht nur das etwas passiert.
 
S

Spacerat

Gast
Zum Beispiel? Du meinst doch nicht etwa solch abgrundtief hässliches wie Java Generics?

Warum man C++ lernen sollte? Nun, um richtig programmieren zu lernen natürlich :) Viele Java Entwickler haben null Ahnung, wenns mal etwas technisch tiefer gehen soll. Zwar geht es auch mit C technisch in die Tiefe, aber C++ ist wesentlich mehr als nur eine "Erweiterung" von C. Gerade die Art und Weise wie C++ mit Klassen und Objekten umgeht ist für Java Entwickler immer ganz toll und begeisternd, wenn sie dann mal durchgestiegen sind.
Trolling vom feinsten. :lol:
Wenn man richtig programmieren will, sollte man sich Maschinensprache aneignen. Ansonsten ist's doch wohl Sache des Entwicklers, welchen "Dolmetscher" er bevorzugt bzw. bevorzugen kann. Je nach dem, was möglich ist und man besser versteht.
Hier steht auch nirgends, dass C++ 'ne simple C-Erweiterung ist, sondern 'ne Weiterentwicklung von C, mit viel neuem und einigen "Einschränkungen" (also Dinge die, warum auch immer, in C++ nicht mehr funktionieren). Wär's nur 'ne Erweiterung, gäbe es keinen Unterschied zu C, denn man könnte beliebig zwischen den Sprachen wechseln.
 

Network

Top Contributor
Die Frage nach dem lohnen:
- Hobbytechnisch werden dich andere Programmiersprachen nicht weiter bringen als es bereits Java tut, sie werden dich sogar eher zurücksetzen. Es gibt keinen Grund eine andere Sprache zu erlernen der selben Generation.

- In der Industrie ist es aber wichtig, nicht nur die theoretische Syntax eines Programmes zu kennen (das hilft dir schonmal überhaupt nicht weiter) sondern eine Sprache musst du verstehen und anwenden können in verschiedenen Bereichen.
-> Wir hatten es hier mal vor kurzem da hat die eine Seite mit C++ und wir mit Java gearbeitet.
Der Retter des Tages war dann der der für die connection der Systeme gesorgt hat und zwar in einem passablen Zeitraum.
Um nur ein praktisches Beispiel zu nennen.

In einem Vorstellungsgespräch angeben zu können, man kenne mindestens eine weitere Sprache als die firmenspezifische bringt oft schonmal einen sehr großen Bonus ein.

Verschiedene Situationen können auftreten, oder Nebenprojekte entstehen die in einer anderen Sprache gelöst werden müssen (Und da gibt es so einige Gründe) wie bspw. (um nur noch ein Beispiel zu nennen) hat ein Kundenpc nicht unbedingt eine JVM auf seinen (meist Windows) Rechnern installiert und das dauert dann häufig mal eine ganze Woche bis auf einem Firmenpc eine neue Software installiert ist.
Dann ist es natürlich besser Sprachen zu verwenden die direkt jeder Windows-PC ausführen kann.
Und an solchen Situationen revanchiert sich die investierte Zeit.

Gruß
Net

PS: Programmiersprachen sind für die meisten Entwickler oftmals soetwas wie Religionen. Und da jeder alles bockig in seiner Programmiersprache haben will...
 
G

Gast2

Gast
Dabei kann es sich nur um ein Bundle wie z.B. Arduino handeln
schön das für Dich die Welt nur Schwarz und Weiß ist - AixControl | AixOS Real-time Operating System

Warum also sollte man sich noch mit C++ belasten, wenn man mit Java und C selbiges erreicht.
Das funktioniert nur weil Du C++ nicht verstanden hast. OOP macht mir auf dem BlackFin die Entwicklung um einiges leichter und weniger Fehleranfällig gegenüber C. Und der Destruktor ist ein Segen (auf dem Cupid) - ich vermisse diesen unter Java genau so wie unter .NET. (Das Aufräumen des Objektes vom GC ist für mich ein untragbares nicht deterministisches Verhalten)

Den Horizont erweitern, ist eine gute Idee ...
das ist es immer - egal bei welchem Thema

habd, mogel
 
S

Spacerat

Gast
schön das für Dich die Welt nur Schwarz und Weiß ist - AixControl | AixOS Real-time Operating System
...
Das funktioniert nur weil Du C++ nicht verstanden hast. OOP macht mir auf dem BlackFin die Entwicklung um einiges leichter und weniger Fehleranfällig gegenüber C. Und der Destruktor ist ein Segen (auf dem Cupid) - ich vermisse diesen unter Java genau so wie unter .NET. (Das Aufräumen des Objektes vom GC ist für mich ein untragbares nicht deterministisches Verhalten)
Also ich würde diese AIX-Geschichte oder Cupid (kenn' ich beides nicht) nicht gerade als Microcontroller bezeichnen, Microcontroller sind meines Wissens einfache ICs.
Ich habe C++ nicht blos nicht nur verstanden, ich hab's mir noch nicht mal im Detail angeschaut, weil es halt noch nicht nötig war. OOP programmiere ich in Java und wenn etwas nicht in Java zu realisieren ist, bau' ich halt per JNI und C ein natives Binding. Das man sich in Java auf den GC nicht verlassen kann, ist richtig, aber es gibt ja glücklicherweise Techniken, mit denen man Speicher- und GC freundlich programmieren kann. Zumindest muss man sich weniger Gedanken um Memleaks machen, nur weil man mal irgendwo vergessen hat einen Destruktor aufzurufen.
Das eine Sprache fehleranfälliger sein kann, als 'ne andere, halte ich persönlich für ein Gerücht. Fehler macht nämlich ausschliesslich der jeweilige Entwickler und nur sehr wenige davon sind Flüchtigkeit, sondern entstehen eher dadurch, das der Entwickler die Programmiersprache nicht vollends beherrscht.
Das sich C++ für einen Javaentwickler nicht unbedingt lohnt, heisst ja nicht, dass C++ eine schlechte Sprache ist. Networks Beitrag kann man, bis auf die Tatsache, dass es Windows bzw. der Hardware völlig egal ist, durch welchen Sprachkompiler die ausführbaren Kompilate gejagt wurden, nur unterschreiben.
 

Antoras

Top Contributor
Die Frage nach dem lohnen:
- Hobbytechnisch werden dich andere Programmiersprachen nicht weiter bringen als es bereits Java tut, sie werden dich sogar eher zurücksetzen. Es gibt keinen Grund eine andere Sprache zu erlernen der selben Generation.
Wie wäre es mit: Es macht Spaß und man kann etwas Lernen? Nur darauf kommt es doch bei Hobbies an.

PS: Programmiersprachen sind für die meisten Entwickler oftmals soetwas wie Religionen. Und da jeder alles bockig in seiner Programmiersprache haben will...
Nach der Logik sind Frauen und Autos für die meisten Leute auch so etwas wie Religion, schon mal daran gedacht?

Zumindest muss man sich weniger Gedanken um Memleaks machen, nur weil man mal irgendwo vergessen hat einen Destruktor aufzurufen.
Wer in C++ daran denken muss Destruktoren aufzurufen, der kann nicht vernünftig C++ programmieren. Es gibt da was, das nennt sich RAII.

Das eine Sprache fehleranfälliger sein kann, als 'ne andere, halte ich persönlich für ein Gerücht. Fehler macht nämlich ausschliesslich der jeweilige Entwickler und nur sehr wenige davon sind Flüchtigkeit, sondern entstehen eher dadurch, das der Entwickler die Programmiersprache nicht vollends beherrscht.
Ich würde sagen, dass Flüchtigkeitsfehler öfter vorkommen. Jede NPE, AIOOBE, IAE usw. ist ein Flüchtigkeitsfehler.
 
K

KuhTee

Gast
Aja...

Ich habe C++ nicht blos nicht nur verstanden, ich hab's mir noch nicht mal im Detail angeschaut, weil es halt noch nicht nötig war.
Aha. Also hast du keine Ahnung und meinst hier gute Ratschläge verteilen zu müssen?

Zumindest muss man sich weniger Gedanken um Memleaks machen, nur weil man mal irgendwo vergessen hat einen Destruktor aufzurufen.
Wie schon gesagt wurde: Allein diese eine Aussage zeigt, dass du keine Ahnung von C++ hast, nicht weisst wie man damit programmiert, und trotzdem spielst du hier den Checker. Klingt für mich nach... hm... wie war das Wort doch gleich... ? :)

Ich hab eben schon mehrfach gesehen, wie (durchaus gute) Java Entwickler das erste mal mit C++ entwickelt haben. Da herrschte dann noch das falsche Denken "wenn man eine kann, kann man alle, Unterschiede sind nur Syntax" vor, und schon wurden riesige Objekte kopiert, Objekte beim Kopieren versehentlich geändert, und einfach umständlich programmiert (nämlich nach Java Art). Irgendwer schrieb hier, dass Java eleganter als C++ wäre... ach kommt schon, Java ist eine ungemein geschwätzige Sprache mit vielen Macken (und einem riesigen Auswahl an Bibliotheken, dafür mag ich es).

Vielleicht sollte man einfach C++ lernen um zu verstehen, was an Java alles Mist ist ;) (Generics, Try-with-ressources, als "Referenzen" bezeichnete (Null-)Pointer, ...). Dann fällt es einem auch leichter, für das jeweilige Projekt das richtige Werkzeug zu wählen. Denn das ist bei weitem nicht so egal, wie es hier manche darstellen.
 
S

Spacerat

Gast
Aha. Also hast du keine Ahnung und meinst hier gute Ratschläge verteilen zu müssen?
Ja, das mein' ich. Warum auch nicht.
Wie schon gesagt wurde: Allein diese eine Aussage zeigt, dass du keine Ahnung von C++ hast, nicht weisst wie man damit programmiert, und trotzdem spielst du hier den Checker. Klingt für mich nach... hm... wie war das Wort doch gleich... ? :)
Gehen dir die Argumente aus, oder was? Hier geht's darum, ob es sich lohnt als Javaentwickler noch C++ zu lernen. Die Frage ist doch, wofür sollte man. Die Antwort: "Aber bitte, wenn's dir Spass macht."
Irgendwer schrieb hier, dass Java eleganter als C++ wäre... ach kommt schon, Java ist eine ungemein geschwätzige Sprache mit vielen Macken. Vielleicht sollte man einfach C++ lernen um zu verstehen, was an Java alles Mist ist ;)
Klar... Macken hat C++ natürlich keine. Aber was soll's, Java mag vllt. beim Tiobe-Index gefallen zu sein, aber hast dir C++ mal angeschaut? Und dann nicht nur die roten Pfeile, sondern das Ganze Programm: Ratings, Deltas, 10-Jahres-Übersicht. Na was soll's... kann mir sehr gut vorstellen, dass viele C++-Lobbiisten so zwischen 2004 und 2005 irgendwie den Verstand verloren haben. Sieht ja aus wie'n Börsencrash. Mir sagen diese "Linien" jedenfalls, dass ich "genug" Ahnung von C++ habe, um zu wissen, das ich es nicht brauche: "Es gibt da 'ne Programmiersprache, die soll nicht so Kagge sein wie Java. Nur was daran besser ist, können nicht mal die vernünftig in wenige Worte packen, die es eigentlich können müssten. Viel schlimmer noch, sie diskreditieren auch noch meine Frau... ach nee, mein Auto... oder war's doch nur meine Religion?"
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
;(

Also ich würde diese AIX-Geschichte oder Cupid (kenn' ich beides nicht) nicht gerade als Microcontroller bezeichnen, Microcontroller sind meines Wissens einfache ICs.
Wie kann man sich nur selber so disqualifizieren?? AixControl stellt komplette Boards mit Microcontrollern her speziell abgestimt auf die Bedürfnisse des Kunden. Dieser Aussage entnehme ich also das Du Dich mit dem Thema noch nichtmal auseinander setzen willst.

Ich habe C++ nicht blos nicht nur verstanden, ich hab's mir noch nicht mal im Detail angeschaut,
ach - und wieso meinst Du dann hier irgendwas über C++ behaupten zu können? Ich programmiere auch mit PHP und dennoch würde ich mir nicht anmaßen anderen PHP ausreden zu wollen. Dafür programmiere ich zu wenig damit.

OOP programmiere ich in Java und wenn etwas nicht in Java zu realisieren ist, bau' ich halt per JNI und C ein natives Binding.
ah ja - wenn es mit C++ um Wochen einfacher wäre würdest Du Dir dennoch eine JNI/C Brücke bauen....

Zumindest muss man sich weniger Gedanken um Memleaks machen, nur weil man mal irgendwo vergessen hat einen Destruktor aufzurufen.
Gratulation - Window (Java 2 Platform SE v1.4.2) - setzt Dich doch mal bitte mit Java und GC auseinander. Und im übrigen hat .NET das gleiche Problem. Das ist auch der Grund wieso ich es nicht verstehe warum .NET und Java keine Destruktoren mehr haben.

havbd, mogel
 
J

JohannisderKaeufer

Gast
Ausgehend von einem Java-Entwickler:

Wenn jemand C++ - Entwickeln möchte, dann soll er C++ lernen.

Wenn jemand ein besserer Programmierer werden möchte, dann würde ich nicht zusätzlich C++ lernen.


Programmiersprachen entstehen oft aus einer Problem-Domäne heraus.
Erlang für verteilte hochverfügbare Systeme.
Lisp als Funktionale Sprache.

Und wenn ich nun ein besserer Programmierer werden möchte, würde ich mir auf diese Art die Sprache aussuchen die ich dazulernen möchte um die konzepte zur Lösung der Probleme zu erlernen, weshalb diese Sprachen entstanden sind.

Java und C++ sehe ich in dieser Form konzeptional zu nahe beieinander.
 

JavaMeetsBlueJ

Bekanntes Mitglied
Hier mal eine kleine Statistik von Gulp.de. Zeitraum: 09.12
 

Anhänge

  • Statistik_GULP.DE.PNG
    Statistik_GULP.DE.PNG
    16,2 KB · Aufrufe: 55
  • Statistik_GULP.DE_2.PNG
    Statistik_GULP.DE_2.PNG
    17,1 KB · Aufrufe: 59
  • Statistik_GULP.DE_2_WAVE.PNG
    Statistik_GULP.DE_2_WAVE.PNG
    17,8 KB · Aufrufe: 63
Zuletzt bearbeitet:
B

...ButAlive

Gast
Meiner Meinung nach, ist das schwerste bei der Softwareentwicklung Probleme zu lösen. Die Lösung dann in Form von Quellcode niederzuschreiben, ist im Vergleich wieder einfach.

Wenn man eine Sprache lernt, lernt man nicht nur Syntax, sondern Konzepte, neue Frameworks und neue Herrangehensweißen.

Das ist ungefähr so wie bei einem Handwerker, der einen Werkzeugkoffer hat. Man kann eine Schraube mit einem Schraubenzieher oder mit einem Akkuschrauber einschrauben. Mit dem Akkuschrauber geht es schneller, aber dazu muss man erst einmal wissen, dass es Akkuschrauber gibt und sich einen zulegen.

Als guter Softwareentwickler muss man sich immer weiterentwickeln und seinen Werkzeugkoffer ständig erweitern. Daher ist es nie falsch eine weitere Sprache zu lernen.

Ich portiere gerade beruflich ein in C++ geschriebenes Programm nach Java, daher sind meine (zugegebenermaßen rudimentären) C++ Kenntnisse nützlich. Zwar denke ich nicht, dass ich je als C++ Entwickler arbeiten werden, aber alten Code zu portieren kann einem immer wieder passieren.
 
Zuletzt bearbeitet von einem Moderator:

Rudolf

Bekanntes Mitglied
KuhTee hat zumindest damit recht, dass Try-with-ressources mehr oder weniger ein Fehler waren, was auch auf der Seite von Java bereits zugegeben wurde, die null Pointer sind aber ok, solange man damit Fehler auslöst und nicht damit programmiert. Und Ja ich habe bereits mitbekommen, dass C/C++ mehr im Bereich Generics drauf haben als Java.

Nun frage ich mich aber, warum Java Destruktoren haben sollte? Ist es nicht genau das eine der stärken von Java, das es sich um die Objektverwaltung keine Gedanken machen muss? Und was dispose als Argument zu suchen hat, kann ich auch nicht nachvollziehen. vielleicht mag mir das mal hier einer erklären.
 
G

Gast2

Gast
Moin,

Nun frage ich mich aber, warum Java Destruktoren haben sollte? Ist es nicht genau das eine der stärken von Java, das es sich um die Objektverwaltung keine Gedanken machen muss? Und was dispose als Argument zu suchen hat, kann ich auch nicht nachvollziehen. vielleicht mag mir das mal hier einer erklären.
Wenn Du Dir mal genau durch liest welche Aufgabe Dispose hat (egal ob Java oder .NET) wirst Du feststellen das sich genau hier die Objektverwaltung selber ins Bein schießt.

In der Methode Dispose werden native Resourcen freigeben. Unter .NET ist das z.B. alles was mit GDI+ zusammen hängt. Wenn Du also jetzt ein Objekt erzeugst und bevor Du die Referenz weg wirfst kein Dispose aufrufst, erzeugst Du Memory-Leaks. Eigentlich genau das was beide Sprachen verhindern wollen. Ob ich jetzt an der Stelle manuell Dispose aufrufe oder wie unter C++ das Objekt mittels delete (und damit Destruktor) zerstöre kommt aufs gleiche raus.

Das Dumme an der Stelle ist das beide Sprache eben genau das breit treten das man sich nicht um die Speicherfreigabe kümmern muss. Zwar bietet C# an der Stelle using an, aber wenn ich ein Objekt länge brauche muss ich wieder vorher Dispose aufrufen. Und beide Sprachen greifen (naturbedingt) auf Systemresourcen zu: Fenster, Grafiken, blabla.

Ein kleines Beispiel

Java:
public static void main(String[] args) {
	new MyFrame(false);
	
	Thread t = new Thread(new Runnable() {
		@Override
		public void run() {
			System.gc();
			System.runFinalization();
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	});
	t.start();
}

Der Thread dient nur dazu um den GC zu bitten mal etwas zu arbeiten - ob er es wirklich macht weis ich nicht.

Java:
public class MyFrame extends JFrame {

	private boolean single = false;
	
	public MyFrame(boolean single) {
		System.out.println("Konstruktor");
		
		setBounds(0, 0 + (single?100:0),  200, 50);
		setVisible(true);
		this.single = single;

		if (!single) {
			new MyFrame(true);
			this.setTitle("Main");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		} else {
			this.setTitle("Child");
			setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		}
	}
	
	@Override
	public void dispose() {
		super.dispose();
		System.out.println("dispose aufgerufen -> " + (single ? "child" : "main"));
	}
	
	@Override
	protected void finalize() {
		try { super.finalize(); } catch (Throwable e) { e.printStackTrace(); }
		System.out.println("finalize aufgerufen -> " + (single ? "child" : "main"));
	}
}

Es wird weder finalize noch dispose aufgerufen. Zu Laufzeit kann sein das der GC einfach nicht will - was in Ordnung ist (trotz das ich ihn persönlich bitte was zu machen). Aber spätestens wenn das Hauptfenster geschlossen wird sollte doch wenigstens irgendwas aufgerufen werden. Die Dispose Methode (zumindest für JFrame) wird erst bei setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) aufgerufen. (Im Übrigen auch ohne das ich den GC bitte mal aufzuräumen)

Solange wie es nur ein Programm ist was morgens startet und abends beendet wird, kann über das Detail (meistens) hinweg gesehen werden. Das BS räumt anschließend freundlicher weise alles sauber auf. Aber hast Du das auf einem Server, holst ständig Resourcen und nicht via Dispose frei gibst, dann frisst sich der Server voll - das ist schlecht.

Ich arbeite beruflich zu wenig mit Java, aber ich habe ein Beispiel unter C#. Ca. 80 Kameras liefern 1x pro Sekunden ein Jpeg-Bild (zumindest hole ich es). Dann male ich darauf einen Zeitstempel und speichere die Dinger in einer DB. Nach dem Speichern habe ich, entsprechend der allg. Aussage der Hersteller, die Referenz einfach "vergessen". Nach ca. 24 bis 48 Stunden hat sich der Server entsprechend voll gefressen und fing an Arbeitspeicher auf die Festplatte auszulagern, irgend wann knallt es eben. Erst nachdem ich nach dem Speichern noch Dispose aufgerufen habe, war der Speicherverbrauch vernüftig.

hand, mogel
 

KuhTee

Aktives Mitglied
Hier geht's darum, ob es sich lohnt als Javaentwickler noch C++ zu lernen. Die Frage ist doch, wofür sollte man. Die Antwort: "Aber bitte, wenn's dir Spass macht."
In welcher Sprache wird eigentlich so eine JVM in der Regel entwickelt? :) Fakt ist, dass ca 80 bis 90% der Software auf meinem Rechner (ohne OS) in C++ geschrieben ist. Auf den meisten PCs wirds ähnlich aussehen. Fakt ist auch, dass C++ in der Industrie ungemein wichtig ist. Natürlich, die typischen Webanwendungen schreibt keiner in C++. Aber die Welt ist _deutlich_ größer.

Klar... Macken hat C++ natürlich keine.
Sagt wer?

Aber was soll's, Java mag vllt. beim Tiobe-Index gefallen zu sein, aber hast dir C++ mal angeschaut? Und dann nicht nur die roten Pfeile, sondern das Ganze Programm: Ratings, Deltas, 10-Jahres-Übersicht.
Mal abgesehen davon, dass der Tiobe-Index immer mit Vorsicht zu genießen ist (man kann ihn auch dahingehend interpretieren, dass Java so bescheiden ist, dass alle Welt Fragen hat), frage ich mich, was genau du damit aussagen willst? Die Notwendigkeit und Sinnhaftigkeit einer Sprache am Tiobe-Index festmachen? Das wird langsam lächerlich. Also wenn man Java kann, bedeutet das, dass PHP, JavaScript, SQL, Lisp usw alle unnötig sind, weil Java im Index höher steht?
 
S

Spacerat

Gast
AixControl stellt komplette Boards mit Microcontrollern her speziell abgestimt auf die Bedürfnisse des Kunden. Dieser Aussage entnehme ich also das Du Dich mit dem Thema noch nichtmal auseinander setzen willst.
Nee, das ging in den falschen Hals, über dieses werde ich mich schon informieren. Ich kannte es wirklich noch nicht. Ob ich's (inkl. C++) dann auch brauche ist 'ne andere Geschichte. Immerhin; Danke für den Tipp.
Im übrigen masse ich mir nicht an, dem TO etwas auszureden, sondern überlasse es ihm. Ihr (du und QT) dagegen, masst euch an, soviel über beide Sprachen zu wissen und wisst über Java nur die Hälfte und über C++ anscheinend gar nichts, sonst würdet ihr mit Beispielen von dem was ihr wisst nicht so hinterm Berg halten und nicht dauernd nur Java kritisieren.

Zum GC... wenn man sich mit damit richtig auseinander setzen würde, würde man wissen, dass man von "finalize()", "dispose()", "System.gc()" und Zeugs besser Abstand nehmen sollte, diese Dinge sind offensichtlich "broken by Design" (das hab' ich aus diesem Forum), vermutlich, weil man der Annahme war, unbedingt Destruktoren zu benötigen. Die JVM gibt zur Laufzeit kein einziges Byte mehr an das OS frei (java.nio ist 'ne Ausnahme) sondern nur an den Heap. Die JVM verwaltet Objekte in Scopes welche penibel pro Objekt gemapped weden. Bei Zuweisungen wird geprüft, ob die Scope-Liste des alten Wertes (das gilt natürlich nur für Objekte) noch andere Scopes enthält (Was Scopes sind muss man hoffentlich nicht erklären). ist dies nicht der Fall, wird der Objektspeicher an den Heap zurückgegeben (eine Freigabe an das OS würde btw. den Heapspeicher extrem fragmentieren). Es werden also zu keiner Zeit irgendwelche Destruktoren gebraucht. Hätte gerne mal gewusst, wieso man das in C++ nicht auch so macht - :oops: Moment... war da nicht was mit Operatorüberladung, innklusive Zuweisungsoperator?

@KuhTee:
Fakt ist, dass ca 80 bis 90% der Software auf meinem Rechner (ohne OS) in C++ geschrieben ist.
Und das weis man bei hypothetisch 80 - 90% closed Source Software auf seinem Rechner natürlich genau. Keine Ahnung, warum man mit einem Community-Index vorsichtig sein sollte. Evtl. hat ja wirklich keiner Begriffen, was damals mit der Einführung von C# passiert ist und wieso sich das DotNet-Framework unter Windows nicht mehr (oder nur sehr schwer) deinstallieren lässt (und ich rede hier nicht vom Clientprofile), schon gar nicht die, die 90 - 100% open Source (inkl. OS) auf ihrem Rechner haben, von der man dann auch weis, dass sie in C++ geschrieben wurde. Aber Linux ist nun mal nicht da, wo es sein sollte. In Industrie und Verwaltung herrscht immer noch Windows vor, wo man anscheinend inzwischen auch mehr auf portablen Bytecode setzt.
 
Zuletzt bearbeitet von einem Moderator:
S

Spacerat

Gast
Reiens c++ in linux krams naja gelacht.

ist schon aufällig das man bei fast jedem linux dies hier mit installiert hat:
Low Level Virtual Machine ? Wikipedia
von den phython scripten die schon eher an programme grenzen zu schweigen.

AHja und dann war da ja noch die sache das größere teile des kernels in c und nicht in c++ sind.
Linus Torvalds: Why C++ Sucks | CIO Blogs
Heisst das etwa, dass es nicht mal 90 bis 100% C++ auf anderen Rechnern ausser KuhTees sein können? Ich hab' das ehrlich gesagt nur über seine Zahlen geschätzt. Und nicht nur das. Selbst die Aussage, dass es sich dabei nur um ein OpenSource OS wie Linux handeln könnte war nur geraten. Wenn er damit also Werbung bzw. Überzeugungsarbeit für die C++-Lobby machen wollte, ging der Schuss eindeutig nach hinten los. Mich Unwissenden einfach in die Irre führen... herzlichen Dank. ;)
Ausserdem: Was ich weiter oben bereits für Windows und der Hardware auf der es läuft sagte, gilt auch überall sonst. Maschinen ist es egal, in welcher vom Menschen verständlicheren Sprache ein Programm geschrieben wurde. Solange es die Maschine versteht (und die versteht nun mal nur Maschinencode) gibt's kein Problem.
[EDIT]Wer im übrigen der Meinung ist, ist würde zu viel "nur Annehmen", Raten oder mir schlicht aus dem Ärmel schütteln, darf dies ruhigen Gewissens tun, denn irgendwie liegt ihr damit Richtig. Wen das aber letztendlich Disqualifiziert sei mal dahingestellt. Korrekte Annahmen bewahren einen vor Fehlentscheidungen und von falschen Annahmen lernt man nur dazu.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

schalentier

Gesperrter Benutzer
Mehrfach wurde hier auf die Platformunabhaengigkeit hingewiesen.

Die soll ja bei Java besser sein. Ich frag mich dann immer, wieso gibt es eigentlich JNI, welches man (meistens) mit C/C++ programmiert, wenn doch Java angeblich platformunabhaengiger ist, als C/C++?

Die ganze Diskussion ist fuern A****, fuer einen guten Entwickler lohnt es sich IMMER, eine neue Sprache zu erlernen. Da muss man imho auch keine Argumente anbringen, eigne Erfahrungen sind einfach essentiell, um sinnvolle Diskussionen fuehren zu koennen.

Guggt man sich heute aber C++ an, so sollte man unbedingt gleich C++11 nehmen.
 
G

Gast2

Gast
Moin,

wird der Objektspeicher an den Heap zurückgegeben (eine Freigabe an das OS würde btw. den Heapspeicher extrem fragmentieren).
etwas weiter führende Lektüre - MMU und Paging

Es werden also zu keiner Zeit irgendwelche Destruktoren gebraucht.
es geht an der Stelle noch immer um Dispose und native Resourcen - das wo die JVM bzw. .NET nicht ran darf um es umherzuschieben und man es manuell aufräumen muss

Hätte gerne mal gewusst, wieso man das in C++ nicht auch so macht
das ließ mal bitte genauer nach was der JIT-Compiler macht und was der Unterschied zwischen Java-Compiler und GCC (oder anderer) ist

war da nicht was mit Operatorüberladung, innklusive Zuweisungsoperator?
???:L

habd, mogel
 
S

Spacerat

Gast
Keine Ahnung, was du meinst... MMU? Paging? Sonstwas? Damit hat man doch in der JVM gar nichts zu tun. Schlage vor, du liesst dich da noch mal selber ein. ;)
Wann immer man in Java ein Objekt zuweist, sind stets 2 Objekte involviert, nämlich das ursprüngliche und das neue. Die JVM holt sich also das aktuelle Object der Variable und das Scope in welcher die Variable definiert wurde. Aus einer Art [c]Map<Object, Set<Scope>>[/c] holt sich die JVM anschliessend die Scopes in welchen das Objekt zugewiesen wurde und entfernt das vorher ermittelte Scope aus dieser Liste. War es das letzte, kann das Objekt abgeräumt und der Speicher an den Heap zurückgegeben werden. Das geht alles noch recht fix. Die einzige Arbeit, die der GC nun noch hat, ist den Heap öfters mal zu defragmentieren. In C++ kann man diese "Halbautomatik" bei Zuweisungen natürlich vergessen, weil sich Operatoren inkl. des Zuweisungsoperators überladen lassen.
Und was genau meinst du mit nativen Resourcen, die man "von Hand" freigeben muss? Dateien? Grafikspeicher? Keine Ahnung. Das Betriebssystem wird jedenfalls schon beim Abräumen eines Objekts von der JVM über nicht länger benötigte Ressourcen benachrichtigt und das ohne das man "finalize()" usw. aufrufen muss. Es wird sogar dazu geraten "finalize()" und Zeugs komplett zu Vergessen, weil halt "Broken by Design". -> The Secret Life Of The Finalizer: page 1 of 2
@Schalentier: Plattformunabhängigkeit hatten wir doch vor gar nicht all zu langer Zeit in einem anderen Thread geklärt, oder war das nicht hier? Jede Sprache ist ansich Plattformunabhängig, solange ein Kompiler für die jeweilige Platfform existiert. Bytecode ist insoweit Plattformunabhängig, solange darauf Frameworks laufen, die diesen Bytecode verstehen (Portabilität).
 
Zuletzt bearbeitet von einem Moderator:

Empire Phoenix

Top Contributor
Statt finalize macht btw nen Phantomreference sinn um natives freizuräumen. Oder halt doch nen gutes altes dispose(). Wobei der meiner meinung nach wirklich wichtige unterschied ist einfach die sache dass man in java keine wildpointer haben kann. Das vereinfach das debugging von sehr großen projecten enorm. Zusammen mit den stacktraces wäre das mein arguemnt für java. c++ hat vorteile wenn es auf details ankommt. Zb physicengine wo man durch tricks etwas pro berechnung sparen kann und sich das über alles start aufaddiert.

Letztendlich kann man mit c/c++ btw auch gut platformunabhängig arbeiten. Man darf halt nur nichts platformspezifisches importieren.(oder packt sich ne middleware dazwischen) Der größere unterscheid ist, das man bei c für alle ziele compiliert und bei java für die jvm.

Btw es gibt den GCJ: The GNU Compiler for Java - GNU Project - Free Software Foundation (FSF) der im sinne von spacerats aussage java source einfach direkt auf maschinencode compiliert.

Thema linux nur mal als beispiel für ein nicht ganz so c artiges progremm was viele linux user schon benutzt haben. http://en.wikipedia.org/wiki/Ubiquity_(software)

Btw man könnte übrigens mittels shared memory uns sowas schon direct in ajva treiber schreiben und jni umgehen
How To Write Directly to a Memory Locations In Java - Java Wiki

Darüber nachzudenken warum man das nicht tut bliebt zum selbstnachdenken als hausaufgabe stehen ^^
 
Zuletzt bearbeitet:

KuhTee

Aktives Mitglied
Es werden also zu keiner Zeit irgendwelche Destruktoren gebraucht. Hätte gerne mal gewusst, wieso man das in C++ nicht auch so macht
Destruktoren ersparen einem unter Anderem solchen Müll wie Try-with-Ressources ;)

Und das weis man bei hypothetisch 80 - 90% closed Source Software auf seinem Rechner natürlich genau.
Jeder Compiler hinterlässt Spuren. Sei es im Code oder in den Abhängigkeiten. Und wenn ein großer Teil der Software schon Abhängigkeiten zur msvcrt.dll hat, dann brauch man da nicht lange raten.

Keine Ahnung, warum man mit einem Community-Index vorsichtig sein sollte.
Laut diesem Index steht Obj-C in der Wichtigkeit direkt hinter Java. Ist das realistisch? Eher nein. Der Index spiegelt vor allem auch Hypes wieder, wie eben bedingt durch den aktuellen Apple-Hype die Notwendigkeit von Obj-C. Aber die Welt besteht nicht nur als "Apps". Der Index zeigt auch, dass viele Informatiker mir schlechten Java Kenntnissen die Uni verlassen und nix weiter können. Ok, er "zeigt" es nicht, aber er zeigt das Resultat.

In Industrie und Verwaltung herrscht immer noch Windows vor, wo man anscheinend inzwischen auch mehr auf portablen Bytecode setzt.
Oh, ich sage keineswegs, dass Java im Vergleich zu C++ eine untergeordnete Rolle spielt. Gerade auch in der Industrie. Nur wie gesagt, die besteht nicht nur aus Webanwendungen ;) Und auf dem User-PC, auf dem sich eine nicht unerhebliche Menge an Spielen befindet, ist C++ schon nahezu automatisch vorherschend. Eben durch die Games.

Heisst das etwa, dass es nicht mal 90 bis 100% C++ auf anderen Rechnern ausser KuhTees sein können?
Was verdrehst du einfach meine Aussagen?

AHja und dann war da ja noch die sache das größere teile des kernels in c und nicht in c++ sind.
Linus Torvalds: Why C++ Sucks | CIO Blogs
C ist eine angenehm zu programmierende Sprache, gerade für Low-Level Arbeiten. Habe damit auf dem GBA programmiert, und das macht schlichtweg Spaß. An der Stelle ist das aber eine Meinung von Torvalds, der viele Entwickler NICHT zustimmen. Man kann in C auch richtig beschissen programmieren, muss man sich nur mal sowas wie GObject anschauen *brrrrr*

Wobei der meiner meinung nach wirklich wichtige unterschied ist einfach die sache dass man in java keine wildpointer haben kann.
C++ bietet einem ebenfalls diese Möglichkeit. Ohne dass irgendwelche besonderen Anstrengungen nötig wären. Allerdings sind (wie bei Java) viele C++ Entwickler schlichtweg keine sonderlich guten Entwickler. Auch da herrscht häufig die Meinung "Hauptsache es läuft" vor. Wer in C++ dangling pointer produziert, kann schlichtweg nicht programmieren. Das schlimme ist ja, dass derjenige nichtmal nur unfähig ist, nein, sondern schlichtweg zu faul einfach einen Smartpointer zu verwenden. Welche das typische Ressourcen Problem (was Java ja hat) ungemein elegant löst.
 
G

Gast2

Gast
Keine Ahnung, was du meinst...
dann fasse ich das nochmal kurz für Dich zusammen

icke hat gesagt.:
Spacerat hat gesagt.:
eine Freigabe an das OS würde btw. den Heapspeicher extrem fragmentieren
etwas weiter führende Lektüre - MMU und Paging
MMU? Paging? Sonstwas? Damit hat man doch in der JVM gar nichts zu tun.
Du willst Dich ja noch nicht mal damit auseinanders setzen. Das hat auch was mit der JVM am Hut, die JVM macht es selber. Aber darum geht es nicht. Ich wollte Dich eigentlich darauf hinweisen das Hauptspeicher in einem handelsüberlichen PC seit Jahren (Jahrzehnten?) nicht mehr fragmentiert wird. Ich hatte Dich auch an anderen Stellen auf entsprechende externe Quelle hingewiesen das Deine Informationen etwas falsch sind. Aber da hast Du auch nicht entsprechend reagiert.

willkommen im filter, mogel
 
S

Spacerat

Gast
dann fasse ich das nochmal kurz für Dich zusammen... usw.
Wenn du meinst. Ich erkenne nur leider keinen Unterschied zwischen deinem zuletzt gesagten und meinen Äusserungen. Ganz genau, die JVM macht das selber und ich hab' sogar geschrieben wie sie das macht, aber egal (das Ganze heisst Mark and Compact Algorithmus). Also vergiss' diesen Destruktor-Blödsinn. Lt. meinem Link (du hast ihn dir nicht angesehen, oder?), wird bei "finalize()" mehr Speicher belegt gehalten als freigegeben, weil der GC diese Methoden ja auch irgendwann mal aufrufen muss.
Ach und Speicher fragmentiert nicht mehr? Das ist toll, dann benötigt man ja GC überhaupt nicht mehr. Obwohl eigentlich klar sein dürfte, dass wenn ich irgendwo im belegten Speicher mitten drin ein Objekt entsorge, ich schon mal 2 Fragmente bekomme (Mark and Sweep Algorithmus), da kann auch deine MMU oder dein Paging nicht gegen an. Ohne GC wäre man jetzt ganz schön arm dran. Ich frage mich, wessen Informationen hier falsch sind.
Naja egal... ich bin raus.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Ach Leute,

warum einen Flamewar starten wer die beste Religion... ähm Sprache hat?

Viele "Argumente" in diesem Thread sind nix weiter als Quatsch oder im besten Falle Trolling ("Warum man C++ lernen sollte? Nun, um richtig programmieren zu lernen natürlich Viele Java Entwickler haben null Ahnung, wenns mal etwas technisch tiefer gehen soll"), wer das nicht glaubt solle mal Empire Phoenix link folgen (Linus Torvalds: Why C++ Sucks | CIO Blogs) und ein bisschen drüber nachdenken was damit gemeint sein könnte...

C, C++, C#, Groovy, JavaScript, Ruby, etc. pp. sind alles Sprachen die den "Horizont" erweitern können aber nicht müssen, aber da gibt es ja noch viel mehr.

Alles in allem bitte freundlich bleiben und immer daran denken:
EIn Javaentwickler ist nicht automatisch schlauer/schöner/besser als ein Assembler Entwickler und umgekehrt.
 
G

Gast2

Gast
Also ich kann nur soviel sagen:

Ich bin beruflich von C++ auf Java übergestiegen.
C++ bietet durchaus Vorteile, z.B. ist es meiner Meinung nach bequemer als Java.
Aber eigentlich gibt es kaum etwas in C++, was man mit Java nicht auch programmieren könnte, zumindest in der endgültigen Funtionalität, jedoch ist es unter Umständen schwieriger.
Hingegen gibt es wieder Fälle, in denen es umgekehrt ist.

Ob es sich in Endeffekt lohnt, muss wohl jeder für sich selbst entscheiden, aber wenn du die Zeit & Gelegenheit hast C++ zu lernen, warum solltest du sie dann nicht auch nutzen, es kann nur Vorteile bringen :)

MfG J
 
S

Spacerat

Gast
C++ bietet durchaus Vorteile, z.B. ist es meiner Meinung nach bequemer als Java.
Aber eigentlich gibt es kaum etwas in C++, was man mit Java nicht auch programmieren könnte, zumindest in der endgültigen Funtionalität, jedoch ist es unter Umständen schwieriger.
Hingegen gibt es wieder Fälle, in denen es umgekehrt ist.
Ich denke mal, das könnte durchaus an einer gewissen Vorbelastung liegen. Wenn man mit Java in die Programmierung eingestiegen ist, kann es halt passieren, dass man in C++ zu viel Java denkt, umgekehrt natürlich genauso. Deswegen trietzen sich Entwickler verschiedener Lobbies wohl auch immer, weil ihnen das Verständnis der jeweils anderen Sprache fehlt. Umdenken? Hat schon mal jemand versucht 'nem Linkshänder Rechtsschreiben beizubringen? Hab' ich (selber Linkhänder) mal versucht und das hat zumindest nicht funktioniert.
Eines ist jedenfalls sicher, die Zukunft liegt im portablen Bytecode mit wenig nativen Code. Ich meine auch, dass es möglich sein sollte, mit C++ Bytecode zu erstellen und mit Java (mit GCJ lt. Empire Phoenix anscheinend definitiv) halt auch nativen Code. Man benötigt doch eigentlich nur den richtigen Target-Kompiler. Die Annahme stützt sich darauf, dass C/C++ Kompiler für allerlei Zielsysteme (z.B. Arduino oder dem was mogel sagte) existieren. Faktisch müssen die Kompilationen nur vom jeweiligen Zielsystem verstanden werden und das diese Zielsysteme keinesfalls Quelltexte irgendeiner Form verstehen, ist wohl auch klar.
 

Olli_M

Mitglied
Portabler Bytecode hat sicher eine ganze Menge Vorteile. Jedoch ist bei uns gerade die Situation so,
dass wir in den letzten Jahren viel in Java geschrieben haben (angefangen hab ich selber mit Delphi),
aber die Zielsysteme in aller Regel Windows-basiert waren. Das heisst, die ganze schöne Portabilität haben wir kaum genutzt, mussten aber immer wieder feststellen, dass Java gewissermassen in einer Art "Paralleluniversum" auf einer Windows Maschine läuft, was zwar lösbare, aber doch sehr lästige Probleme machte.

Demnächst wird also .NET/C# angesagt sein bei uns, auf diese Umstellung bin ich optimistisch gespannt. Zum Ausgangsthema: eine andere Progr.Sprache zu lernen, kann meines Erachtens nur Vorteile haben. Das Zeitaufwand/Nützlichkeit-Verhältnis muss jeder für seinen Bereich selber bestimmen.

Die Diskussion über dispose() und Destruktoren (die es ja z.B. in Delphi notwendigerweise geben muss) fand ich noch recht interessant. dispose() hab ich selber in Java noch nie gebraucht (und das JFrame.DISPOSE_ON_CLOSE zähle ich mal nicht dazu), das heisst aber natürlich nicht, dass es niemals gebraucht würde (es wird ja mitunter gebraucht, wie hier schon erläutert wurde). Streams muss man ja z.B. auch von Hand schliessen in Java, das nimmt einem ja auch niemand ab... GC ist schon nett, dennoch muss man einiges beim Beenden beachten.

Bei meinen ersten Monaten mit Java habe ich einige Dinge schlichtweg gehasst, vor allem GUI Programmierung mit Swing. GridBagLayout (ohne geht es oft nicht), Glues, Struts, constraints und was es sonst noch alles gibt, du liebe Zeit... :rtfm: Ein GUI, das man mit Delphi in 2 h erstellt hat, braucht x-mal solange in Swing und sieht immer noch "naja, schön ist anders" aus...

Die reine OOP-Seite von Java ist jedoch durchaus elegant (wenngleich ich manchmal "freischwebende" Utility-Methoden wie in Delphi vermisst habe, aber das ist nur ein geringes Manko). Sogar an den vielgescholtenen Generics kann ich derzeit nicht viel Schlimmes entdecken, wenn man sie in Maßen verwendet (obwohl ich auch schon Code gelesen habe, den ich bei bestem Willen nicht mehr kapiert hab, der wimmelte nur so von <> Klammern).

Olli
 

KuhTee

Aktives Mitglied
Deswegen trietzen sich Entwickler verschiedener Lobbies wohl auch immer, weil ihnen das Verständnis der jeweils anderen Sprache fehlt.
Schon mal auf die Idee gekommen, dass es durchaus Entwickler gibt, die in mehreren Sprachen durchaus kompetent sind?

Jedoch ist bei uns gerade die Situation so,
dass wir in den letzten Jahren viel in Java geschrieben haben (angefangen hab ich selber mit Delphi),
aber die Zielsysteme in aller Regel Windows-basiert waren. Das heisst, die ganze schöne Portabilität haben wir kaum genutzt, mussten aber immer wieder feststellen, dass Java gewissermassen in einer Art "Paralleluniversum" auf einer Windows Maschine läuft, was zwar lösbare, aber doch sehr lästige Probleme machte.
Das habe ich bei uns im Unternehmen in einer anderen Abteilung auch schon bemerkt. Lustig ist es, wenn es dann eine in C++ geschriebene "Launcher" EXE gibt :)
Übel wird es aber dann, wenn in Java geschriebene Software nicht mehr unter Linux läuft, weil die Abhängigkeiten zu Windows so gross geworden sind und nicht ausreichend abstrahiert wurde.

Sogar an den vielgescholtenen Generics kann ich derzeit nicht viel Schlimmes entdecken, wenn man sie in Maßen verwendet (obwohl ich auch schon Code gelesen habe, den ich bei bestem Willen nicht mehr kapiert hab, der wimmelte nur so von <> Klammern).
Es geht bei der Kritik an den Generics ja auch nicht um die Verwendung in Maßen, sondern um die extreme Unzulänglichkeit, insbesondere wenn man C++ Templates kennt. Im Endeffekt sind Java Generics nämlich nichts weiter als vom Compiler bzw der VM übernommenes automatisches Casting. Mit all den daraus resultierenden Problemen bzw Dingen die einfach in Java nicht machbar, in C++ aber ganz und gäbe sind (mit "nicht machbar" beziehe ich mich konkret nur auf Generics, das ist keine allgemeingültige Aussage).
 

schalentier

Gesperrter Benutzer
Die reine OOP-Seite von Java ist jedoch durchaus elegant (wenngleich ich manchmal "freischwebende" Utility-Methoden wie in Delphi vermisst habe, aber das ist nur ein geringes Manko). Sogar an den vielgescholtenen Generics kann ich derzeit nicht viel Schlimmes entdecken, wenn man sie in Maßen verwendet (obwohl ich auch schon Code gelesen habe, den ich bei bestem Willen nicht mehr kapiert hab, der wimmelte nur so von <> Klammern).

Also beim besten Willen, aber als elegant wuerde ich Java's OOP Konzept nun wirklich nicht bezeichnen. Es ist furchbar starr, unglaublich geschwaetzig und nicht wirklich konsistent.

Gugg dir z.B. mal Ruby (die Sprache, nicht unbedingt gleich Rails) an. Oder auch sehr interessant: Coffeescript. Beiden gemein ist, dass man Klassen und Objekte im Code veraendern kann. Genau das, wofuer man bei Java "Addons" braucht (asm oder AspectJ) braucht.

Der Effekt der dadurch eintritt ist, dass man keine riesigen (oder unglaublich viele) starre Klassen schreibt, sondern eher Code-Bausteine, die dann in einer Anwendung (oder im Test) zusammenkonfiguriert werden. Dadurch ist es viel einfacher, einzelne "Features" an einer Stelle zu buendeln, anstatt den Code ueber viele andere Stellen verteilen zu muessen. Das find ich deutlich eleganter.

Zum Thema C++ 11 weise ich nochmal auf die geniale Keynote von Bjarne Stroustrup hin!
 
Zuletzt bearbeitet:

Travel

Mitglied
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
G Ab welcher Dateigrösse lohnt Kompression? Allgemeine Java-Themen 2
R Lohnt sich byte und short bei Schleifen? Allgemeine Java-Themen 9
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
A Eclipse hängt sich auf Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Viper13125 Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse Allgemeine Java-Themen 2
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
D Anfänger versucht sich an Xtext Allgemeine Java-Themen 0
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
J Bilder lassen sich nicht importieren Allgemeine Java-Themen 3
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
X Sich wiederholende substrings finden Allgemeine Java-Themen 6
P Input/Output Inputstream verhält sich verschieden Allgemeine Java-Themen 9
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
K Java installiert sich nicht ganz Allgemeine Java-Themen 15
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
L Jar lässt sich nicht öffnen Allgemeine Java-Themen 12
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
F Wert ändert sich nicht Allgemeine Java-Themen 12
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
M Programm startet sich selbst neu, alte Logfiles bleiben gesperrt Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
K Java lässt sich nicht Installieren Windows7Ultimate 64Bit Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
L Prog läuft in der IDE, hängt sich aber am Mac auf Allgemeine Java-Themen 0
F Spiel lässt sich nicht aus GUI starten Allgemeine Java-Themen 5
B Threads halten sich irgendwie auf... Allgemeine Java-Themen 6
G Services verwenden sich gegenseitig Allgemeine Java-Themen 4
A Auswahl eines JEditorPane das Sich in einem JScrollPanel Befindet Allgemeine Java-Themen 2
J kann eine .jar sich selbst verschieben? Allgemeine Java-Themen 6
M Erkennen, in welcher Methode sich die VM befindet Allgemeine Java-Themen 6
A Selbsterstellte 404-Seiten bestimmen, die sich als 200 ausgeben Allgemeine Java-Themen 8
D Arrays überschreiben sich Allgemeine Java-Themen 2
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
pg1337 hashCode() verändert sich Allgemeine Java-Themen 15
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
E nach dem Ordner suchen, wo .jar datei sich befindet Allgemeine Java-Themen 17
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
D JMF - lässt sich nicht im ausgewählten Format aufnehmen Allgemeine Java-Themen 2
ruutaiokwu enlosschleife in thread beendet sich Allgemeine Java-Themen 3
F Javainstallation verweigert sich mir Allgemeine Java-Themen 11
M Java lässt sich nicht installieren Allgemeine Java-Themen 10
T Programm hängt sich auf Allgemeine Java-Themen 14
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
V JRE lässt sich nicht installieren. Allgemeine Java-Themen 10
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
J Eclipse Eclipse hängt sich ständig auf Allgemeine Java-Themen 6
L JDK lässt sich nicht deinstallieren Allgemeine Java-Themen 3
T KeyListener lässt sich nur einmal drücken Allgemeine Java-Themen 2
J Können Programme sich selbst erweitern? Allgemeine Java-Themen 6
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
L Java Thread [blockingqueue] hängt sich auf Allgemeine Java-Themen 13
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
T Thread beendet sich "einfach so"? Allgemeine Java-Themen 13
M Radianwert wiederholt sich trotz unterschiedlicher zufälliger Koordinaten Allgemeine Java-Themen 6
B Benachrichtigung, wenn sich Benutzer am Betriebssystem anmeldet Allgemeine Java-Themen 9
X Über ArrayList iterieren, während sich diese verändert Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben