Java vs. C++



  • ShadowClone schrieb:

    Andromeda schrieb:

    ShadowClone schrieb:

    Java hat das Problem, dass final nicht const ist.

    Wieso ist das ein Problem?

    Weil sich das final bei Objekten nur auf die Referenz/Pointer bezieht und du die Member der Objekten immer noch manipulieren kannst. Das ist bei Klassen, die immutabel sein sollen bspw. ein Problem, da du nicht drum rumkommst ein Deep Copy zu machen, wenn du Parameter entgegen nimmst bzw. Member-Instanzen zurückgibst.

    Wenn eine Class immutabel sein soll, nennt man das final vor dem Schlüsselwort class!



  • Zeus schrieb:

    ShadowClone schrieb:

    Andromeda schrieb:

    ShadowClone schrieb:

    Java hat das Problem, dass final nicht const ist.

    Wieso ist das ein Problem?

    Weil sich das final bei Objekten nur auf die Referenz/Pointer bezieht und du die Member der Objekten immer noch manipulieren kannst. Das ist bei Klassen, die immutabel sein sollen bspw. ein Problem, da du nicht drum rumkommst ein Deep Copy zu machen, wenn du Parameter entgegen nimmst bzw. Member-Instanzen zurückgibst.

    Wenn eine Class immutabel sein soll, nennt man das final vor dem Schlüsselwort class!

    Ist in Java nicht so einfach.

    https://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html



  • Doch sehr einfach! Das Pattern ist so einfach zu verstehen wie C++ Const nicht transitiv ist.



  • Es ist aber nicht damit getan die Klasse final zu machen, wie von dir eingangs behauptet.



  • ShadowClone schrieb:

    Es ist aber nicht damit getan die Klasse final zu machen, wie von dir eingangs behauptet.

    Nein hab ich nie behauptet wo steht das?



  • Das ist mir jetzt echt zu doof. 😉



  • eigentlich ist es ziemlich egal, welche programmiersprache du im endeffekt nimmst und es gibt auch kein besser. die "java-menschen" reden nur so schlecht über c++, weil sie eben zuerst java gelernt haben, und umgekehrt reden die "c++-menschen" so schlecht über über java, weil sie zuerst c++ gelernt haben, und beide haben dann so ihre gewohnheiten.

    aber wie gesagt: im endeffekt ist es egal.



  • Quark. Ich hab zuerst C64-Basic gelernt und das werde ich hier sicher nicht als gut anpreisen.



  • und ich hab zuerst c gelernt und wollte es jetzt mal mit common lisp probieren, sofern ich die zeit dafür finde. 🙄

    aber trotzdem bleibe ich dabei, dass zwischen c++ und java kein wirklich gravierender unterschied besteht, die leute aber wegen irgendwelcher, mehr oder weniger sinnfreier, sprachbestandteile und entsprechender gewohnheiten der meinung sind, dass die jeweils andere sprache schlechter ist. 😃



  • HansKlaus schrieb:

    aber trotzdem bleibe ich dabei, dass zwischen c++ und java kein wirklich gravierender unterschied besteht, die leute aber wegen irgendwelcher, mehr oder weniger sinnfreier, sprachbestandteile und entsprechender gewohnheiten der meinung sind, dass die jeweils andere sprache schlechter ist. 😃

    Das ist Quatsch. Die Syntax ist vll. ähnlich, aber Java kommt für verschiedene Anwendungsgebiete erst gar nicht in Betracht. Z. B. Treiber-, OS-Programmierung, Embedded auch eher ungeeignet, Real-Time, alles, was niedrigen Speicherverbrauch und wenig Latenz haben soll.



  • HansKlaus schrieb:

    eigentlich ist es ziemlich egal, welche programmiersprache du im endeffekt nimmst und es gibt auch kein besser.

    HansKlaus schrieb:

    aber trotzdem bleibe ich dabei, dass zwischen c++ und java kein wirklich gravierender unterschied besteht, die leute aber wegen irgendwelcher, mehr oder weniger sinnfreier, sprachbestandteile und entsprechender gewohnheiten der meinung sind, dass die jeweils andere sprache schlechter ist. 😃

    Ach du lieber Himmel, du hast ja mal gar keine Ahnung.





  • ShadowClone schrieb:

    HansKlaus schrieb:

    aber trotzdem bleibe ich dabei, dass zwischen c++ und java kein wirklich gravierender unterschied besteht, die leute aber wegen irgendwelcher, mehr oder weniger sinnfreier, sprachbestandteile und entsprechender gewohnheiten der meinung sind, dass die jeweils andere sprache schlechter ist. 😃

    Das ist Quatsch. Die Syntax ist vll. ähnlich, aber Java kommt für verschiedene Anwendungsgebiete erst gar nicht in Betracht. Z. B. Treiber-, OS-Programmierung, Embedded auch eher ungeeignet, Real-Time, alles, was niedrigen Speicherverbrauch und wenig Latenz haben soll.

    Dafür würde ich spontan C verwenden und nicht C++



  • Zeus schrieb:

    Ja-Ne, deswegen gibt es auch JavaOS (https://en.wikipedia.org/wiki/JavaOS) und Java Embedded (http://www.oracle.com/technetwork/java/embedded/overview/index.html).

    Du kommst mir zunehmend vor wie ein Troll. Gehen tut vieles – gut, ist wieder eine andere Frage.
    Ich kann auch ein Spiel 100% in Python schreiben, einen Browser auch – geht. 🙄



  • ShadowClone schrieb:

    Zeus schrieb:

    Ja-Ne, deswegen gibt es auch JavaOS (https://en.wikipedia.org/wiki/JavaOS) und Java Embedded (http://www.oracle.com/technetwork/java/embedded/overview/index.html).

    Du kommst mir zunehmend vor wie ein Troll. Gehen tut vieles – gut, ist wieder eine andere Frage.
    Ich kann auch ein Spiel 100% in Python schreiben, einen Browser auch – geht. 🙄

    Eine Gegenfrage wie oft schreibst du Embedded Code mit welche Sprache für welches Systeme?



  • HansKlaus schrieb:

    ShadowClone schrieb:

    Das ist Quatsch. Die Syntax ist vll. ähnlich, aber Java kommt für verschiedene Anwendungsgebiete erst gar nicht in Betracht. Z. B. Treiber-, OS-Programmierung, Embedded auch eher ungeeignet, Real-Time, alles, was niedrigen Speicherverbrauch und wenig Latenz haben soll.

    Dafür würde ich spontan C verwenden und nicht C++

    Keine Ahnung wie du zu diesem Schluss kommst. Jedenfalls zeigt das doch, dass nicht alle Programmiersprachen alle "gleich gut" (O-Ton) sind. "Gut", ist immer auf das Anwendungsgebiet bezogen. – Ok, dann gibt es Sprachen, die tendenziell obsolet sind. Wie C z. B. :p



  • Zeus schrieb:

    ShadowClone schrieb:

    Zeus schrieb:

    Ja-Ne, deswegen gibt es auch JavaOS (https://en.wikipedia.org/wiki/JavaOS) und Java Embedded (http://www.oracle.com/technetwork/java/embedded/overview/index.html).

    Du kommst mir zunehmend vor wie ein Troll. Gehen tut vieles – gut, ist wieder eine andere Frage.
    Ich kann auch ein Spiel 100% in Python schreiben, einen Browser auch – geht. 🙄

    Eine Gegenfrage wie oft schreibst du Embedded Code mit welche Sprache für welches Systeme?

    Ich bin mal ganz kurz auf diesen Gleis aufgesprungen und hab ein Praktikum bei einem Automobilzulieferer gemacht. Dort wurde C/C++ verwendet. Die Mikrokontroller hatten RAM im kilobyte-Bereich. Stell dir vor, jemand drückt auf die Bremse und es springt erst mal der GC an.
    Java wird in Embedded nie und nimmer so intensiv verwendet wie C/C++.
    Was ich momentan mache, ist als Werkstudent bei einem Anlagenbauer für Inspektionssysteme zu arbeiten. Und obwohl die Rechner dort ordentlich Power haben, wird dort ebenfalls C++ verwendet. Ok – zugegeben tatsächlich auch Python, aber diese Python-Libs greifen wiederum auf C- und Fortran-Libs zu. Sind also eher Python-Wrapper und wie gesagt haben die Rechner auch ordentlich Power.



  • ShadowClone schrieb:

    Stell dir vor, jemand drückt auf die Bremse und es springt erst mal der GC an.
    Java wird in Embedded nie und nimmer so intensiv verwendet wie C/C++.

    kannste nicht wissen. es gibt auch realtime-java: https://www.jcp.org/en/jsr/detail?id=282
    und preisgünstige und energieeffiziente mcu's mit viel ram und rechenleistung (arm) gibt es auch immer mehr.



  • swapper schrieb:

    kannste nicht wissen. es gibt auch realtime-java: https://www.jcp.org/en/jsr/detail?id=282
    und preisgünstige und energieeffiziente mcu's mit viel ram und rechenleistung (arm) gibt es auch immer mehr.

    Realtime heißt nicht, dass es dieselbe kurze Latenz hat wie C/C++.
    Dann ist das auch eine Kostenfrage:
    - Muss ich Lizenzgebühren bezahlen?
    - Wie viel mehr muss ich für die Aufstockung der Hardware zahlen?

    Wenn ich mehrere Millionen Einheiten pro Jahr verkaufe, dann sind das alles keine irrelevanten Faktoren.

    Andere, wichtige Faktoren:
    - An welche Plattformen binde ich mich überhaupt, wenn ich Java verwende?
    - Wie robust ist überhaupt die Laufzeitumgebung?



  • ShadowClone schrieb:

    Wenn ich mehrere Millionen Einheiten pro Jahr verkaufe, dann sind das alles keine irrelevanten Faktoren.

    so ist es. dann kann schon ein passives bauteil zum entscheidenden kostenfaktor werden. das führt sogar soweit, dass man versucht, mit irgendwelchen software-tricks hardware zu sparen.


Anmelden zum Antworten