Geschwindigkeit vs. Sicherheit



  • Man kann es ja auch bleiben lassen, mit Pointern und ähnlichem Unsinn anzustellen.
    Ansonsten macht mir Java zu viel auf eigene Faust herum, eine Programmiersprache soll eigentlich kein Eigenleben haben.



  • Taschenlampe schrieb:

    Gibt es eigentlich noch einen Grund für Software C++ zu verwenden und nicht Java? Schon das Datum geht ja in den standard C++ Programmen nur bis 2038 und auch das Exceptionhandling ist viel schlechter (Division durch 0 usw.) und natürlich gibt es noch viele Möglichkeiten mit Pointern schwachsinn anzustellen. Java ist dagegen um ca. 10% langsamer was aber immer durch einen schnelleren PC ausgeglichen werden kann. Das einzige Einstazgebiet für C++ sind doch Spiele, weil sich da keiner für die Sicherheit interessiert, aber sonst spricht doch alles für Java.

    1. C++ hat einige Einsatzgebiete, für die Java nicht geeignet ist. Ich denke da zum Beispiel an Bereiche, die man so unter dem Begriff "Systemprogrammierung" zusammenfasst.

    2. C++ bietet einige Ausdrucksmöglichkeiten, die es so in Java nicht gibt. Metatemplateprogrammierung ist da so ein Beispiel. Wenn man ein Anwendungsgebiet hat, in dem einen das sehr gelegen kommt, dann würde man C++ natürlich gegenüber Java bevorzugen. ...ähnliches gilt aber natürlich auch in die andere Richtung.

    Also: Die Einsatzgebiete von Java und C++ überschneiden sich zwar zu großen Teilen, es gibt aber auch genug Einsatzgebiete, in denen diese Sprachen nicht in Konkurrenz zueinander stehen.



  • fdgdfg schrieb:

    Java schön und gut, aber JRE ist RIESIG 😞

    JRE 1.4 belegt 40 MB 😕

    Und zur Laufzeit wird nur geladen, was auch benötigt wird. Der Overhead an Speicher der VM ist maximal im Embedded Bereich ein Problem.

    Oder was genau meinst Du mit RIESIG?



  • Nanyuki schrieb:

    Ansonsten macht mir Java zu viel auf eigene Faust herum, eine Programmiersprache soll eigentlich kein Eigenleben haben.

    😮 😮 😕 😕 😕 👎
    selber kein plan wovon du redest nä? 😉 🤡 😮 👎



  • Gregor schrieb:

    1. C++ hat einige Einsatzgebiete, für die Java nicht geeignet ist. Ich denke da zum Beispiel an Bereiche, die man so unter dem Begriff "Systemprogrammierung" zusammenfasst.

    2. C++ bietet einige Ausdrucksmöglichkeiten, die es so in Java nicht gibt. Metatemplateprogrammierung ist da so ein Beispiel. Wenn man ein Anwendungsgebiet hat, in dem einen das sehr gelegen kommt, dann würde man C++ natürlich gegenüber Java bevorzugen. ...ähnliches gilt aber natürlich auch in die andere Richtung.

    Also: Die Einsatzgebiete von Java und C++ überschneiden sich zwar zu großen Teilen, es gibt aber auch genug Einsatzgebiete, in denen diese Sprachen nicht in Konkurrenz zueinander stehen.

    1. Stimmt

    2. Ändert nichts daran, dass Java viel sicherer ist.



  • Java hat Sicherheitslücken. C++ hat keine Sicherheitslücken.



  • Taschenlampe schrieb:

    2. Ändert nichts daran, dass Java viel sicherer ist.

    Ne, ändert nichts daran. Aber die Sicherheit, die Du da meinst, ist eben auch nicht alles, sondern nur ein Merkmal, das man einer Sprache zuordnen kann. Man wird die Entscheidung für oder gegen eine Sprache im Allgemeinen aber nicht nur von einem Merkmal abhängig machen. Da spielen viele Dinge eine Rolle. Die Ausdrucksfähigkeiten einer Sprache gehören da genauso zu, wie auch Performance-Erwägungen oder auch das Vorhandensein bestimmter Bibliotheken und Werkzeuge oder das Vorhandensein entsprechenden Know-Hows.

    Wenn man alles relevante zusammennimmt, dann wird man feststellen, dass es nicht eine beste Sprache für alles gibt, sondern dass das von dem speziellen Einsatz abhängt. Zudem spielen immer auch subjektive Aspekte eine Rolle.



  • pppppppp schrieb:

    Java hat Sicherheitslücken. C++ hat keine Sicherheitslücken.

    Das liegt daran, dass "Sicherheit" in C++ insgesamt ein Fremdwort ist. 😉 Wenn man keinerlei Sicherheit gewährleistet, kann man auch keine Sicherheitslücken haben. 🤡



  • ach schadensroutine kann man auch in java schreiben *g*



  • Man kann doch auch leicht ein Programm mit Java schreiben, das abstürzt oder undefiniertes Verhalten erzeugt. Ich kenne mich mit Java nicht wirklich gut aus, aber in mehreren Threads hier wurden Beispiele gezeigt. Zum Beispiel ging das über das Fangen von System-Fehlern oder irgend wie so etwas.

    Java ist doch nicht sicherer, nur weil es keine Pointer gibt. Wenn du vor Pointern angst hast, dann kannst du dir ja auch so komische Java-Pointer für C++ basteln.

    Ob ein fehlerhaftes Programm in Java oder C++ geschrieben ist, ist im Grunde egal, da der Kernpunkt ist, das es Fehlerhaft ist.

    Und solange Terabyte-RAM nicht handelsüblich ist, sehe ich keinen Grund Java-Software einzusetzen.

    Gregor schrieb:

    pppppppp schrieb:

    Java hat Sicherheitslücken. C++ hat keine Sicherheitslücken.

    Das liegt daran, dass "Sicherheit" in C++ insgesamt ein Fremdwort ist. 😉 Wenn man keinerlei Sicherheit gewährleistet, kann man auch keine Sicherheitslücken haben. 🤡

    Aber es ist im Grunde ein Problem, das man bei Java eben eine dicke Closed-Source VM erhält. Es bleibt einem eben nicht viel über, als sich darauf zu verlassen, dass der Hersteller der VM gut genug gearbeitet hat. So weit ich weiß, hatten bisher schon alle größeren VMs irgend welche Sicherheitslöcher.

    Ich halte nicht viel davon, das man Sicherheit schaffen will, in dem man die Code-Basis vergrößert und dann auch noch dem Programmierer die Einsicht verbietet.



  • Taschenlampe schrieb:

    Gregor schrieb:

    1. C++ hat einige Einsatzgebiete, für die Java nicht geeignet ist. Ich denke da zum Beispiel an Bereiche, die man so unter dem Begriff "Systemprogrammierung" zusammenfasst.

    2. C++ bietet einige Ausdrucksmöglichkeiten, die es so in Java nicht gibt. Metatemplateprogrammierung ist da so ein Beispiel. Wenn man ein Anwendungsgebiet hat, in dem einen das sehr gelegen kommt, dann würde man C++ natürlich gegenüber Java bevorzugen. ...ähnliches gilt aber natürlich auch in die andere Richtung.

    Also: Die Einsatzgebiete von Java und C++ überschneiden sich zwar zu großen Teilen, es gibt aber auch genug Einsatzgebiete, in denen diese Sprachen nicht in Konkurrenz zueinander stehen.

    1. Stimmt

    2. Ändert nichts daran, dass Java viel sicherer ist.

    Wo ist da Sicherheit? Der Programmier ist da gefragen, wie in C++ kann ich Java Prgramme schreiben, die crashen und nicht zu gebrauchen sind, blos hat man in Java den Vorteil, dass fast immer ne Exception geschmissen wird. Schon ne frühede Netbeans Version ausprobieret, da hat der GUI Designer in der Beta immer Exception gewurfen, folge wieder deinstalliert ^^



  • rüdiger schrieb:

    Aber es ist im Grunde ein Problem, das man bei Java eben eine dicke Closed-Source VM erhält. Es bleibt einem eben nicht viel über, als sich darauf zu verlassen, dass der Hersteller der VM gut genug gearbeitet hat. So weit ich weiß, hatten bisher schon alle größeren VMs irgend welche Sicherheitslöcher.

    Ich halte nicht viel davon, das man Sicherheit schaffen will, in dem man die Code-Basis vergrößert und dann auch noch dem Programmierer die Einsicht verbietet.

    Die Einsicht? In den Code? Den hat man bei Java. Wenn darüber genörgelt wird, dass Java keine OSS sei, dann ist damit gemeint, dass nicht jeder den Code verändern darf und irgendwelche abgeleiteten Produkte damit herstellen darf. Es geht nicht darum, dass die Leute den Code nicht sehen könnten. Der ist öffentlich sichtbar.

    ...und BTW: Open Source Java ist keine 2 Monate von uns entfernt:

    http://news.yahoo.com/s/infoworld/20061025/tc_infoworld/83138



  • Zur Sicherheit:

    Ich sehe da in erster Linie zwei Aspekte:

    1. Die Frage, ob jemand während des Betriebs eines Programms von außen Code einschleusen kann, der dann ausgeführt wird. Damit meine ich zum Beispiel solche Sicherheitslücken in Browsern, von denen man häufiger mal hört. ...das war zum Beispiel mal durch manipulierte JPGs im IE möglich. In Java ist soetwas viel problematischer: AFAIK sind dafür meistens irgendwelche Buffer-Underruns oder so verantwortlich, die es so in Java nicht gibt. Die JVM macht halt immer Checks bezüglich Indizes usw..

    2. Die Frage, ob ein Programm dem Rechner, auf dem es ausgeführt wird, irgendwie Schaden zufügt. In Java kann man das Programm innerhalb einer Sandbox laufen lassen. Dadurch verbietet man praktisch alle möglichen Dinge, die Schaden könnten. IO usw.. Bei Applets wird das ja gemacht, aber ich wüsste nicht, was dagegen spricht, das generell bei Programmen zu machen, denen man nicht vertraut. AFAIK gibt es da JVM-Parameter, mit denen man so eine Sandbox auch für normale Programme anschalten kann.

    Ob solche Aspekte für den Programmierer oder auch den Nutzer relevant sind, ist wohl von Einzelfall zu Einzelfall unterschiedlich. Ich würde eigentlich davon ausgehen, dass das meistens keine besonders große Rolle spielt. ...nur halt bei Programmen, die irgendwie am Internet hängen.



  • rüdiger schrieb:

    Man kann doch auch leicht ein Programm mit Java schreiben, das abstürzt oder undefiniertes Verhalten erzeugt.

    In Java ist viel weniger undefiniert als in C++. Beim Threading kann es zum Beispiel auf unterschiedlichen Plattformen zu unterschiedlichem Verhalten kommen. Viel mehr fällt mir da aber nicht ein. Ich weiß nicht, auf was Du da hinaus willst.



  • ihr tut gerade so, als sei ein auto, das neben den vorwärtsgängen auch einen rückwärtsgang hat, abzulehnen, weil die meisten einparkunfälle rückwärts passieren.
    warum sollte man in c++ mist programmieren? gute c++-programme sind allemal sicherer als gute java-programme. nur weil man 15 bis 20 jahre braucht, um mit c++ praktisch fehlerfrei zu programmieren, ist das doch kein grund, gleich zu weinen und baby-sprachen zu benutzen.



  • Gregor schrieb:

    1. Die Frage, ob jemand während des Betriebs eines Programms von außen Code einschleusen kann, der dann ausgeführt wird. Damit meine ich zum Beispiel solche Sicherheitslücken in Browsern, von denen man häufiger mal hört. ...das war zum Beispiel mal durch manipulierte JPGs im IE möglich. In Java ist soetwas viel problematischer: AFAIK sind dafür meistens irgendwelche Buffer-Underruns oder so verantwortlich, die es so in Java nicht gibt. Die JVM macht halt immer Checks bezüglich Indizes usw..

    Das ist wirklich ein Problem, das Fehlerhafte Programmierung in C++ Probleme mit den Indizes verursachen kann. Das hat Java nicht, da muss ich dir Recht geben (okay, die VMs haben das Problem natürlich intern schon).

    Aber warum sollte da ausgerechnet Java helfen? Ob gäbe es keine anderen Programmier-Umgebungen, die solche Überprüfungen haben. Hey, so etwas hatte man schon in den 1950er Jahren.

    Gregor schrieb:

    2. Die Frage, ob ein Programm dem Rechner, auf dem es ausgeführt wird, irgendwie Schaden zufügt. In Java kann man das Programm innerhalb einer Sandbox laufen lassen. Dadurch verbietet man praktisch alle möglichen Dinge, die Schaden könnten. IO usw.. Bei Applets wird das ja gemacht, aber ich wüsste nicht, was dagegen spricht, das generell bei Programmen zu machen, denen man nicht vertraut. AFAIK gibt es da JVM-Parameter, mit denen man so eine Sandbox auch für normale Programme anschalten kann.

    Eine Sandbox kann man ja auch auf Betriebssystem-Ebene regeln. Im Zweifelsfall nimmt man eben eine virtualisierungs Lösung.

    Gregor schrieb:

    rüdiger schrieb:

    Man kann doch auch leicht ein Programm mit Java schreiben, das abstürzt oder undefiniertes Verhalten erzeugt.

    In Java ist viel weniger undefiniert als in C++. Beim Threading kann es zum Beispiel auf unterschiedlichen Plattformen zu unterschiedlichem Verhalten kommen. Viel mehr fällt mir da aber nicht ein. Ich weiß nicht, auf was Du da hinaus willst.

    Ich will darauf hinaus, das ein Programm nicht sicher ist, weil man Java benutzt. Ich kann mich nur daran erinnern, das man wohl eine Unterscheidung zwischen System- bzw VM-Fehlern und Exceptions.

    Aber selbst wenn, das ist ja wirklich nicht alles was man bei einer Anwendung falsch oder unsicher machen kann. Man kann ja zB durch schlechte Programme undefiniertes Verhalten von zB einer Datenbank oder ähnliches erreichen. Das hat mit C++ ja nichts zu tun.



  • volkard schrieb:

    warum sollte man in c++ mist programmieren? gute c++-programme sind allemal sicherer als gute java-programme. nur weil man 15 bis 20 jahre braucht, um mit c++ praktisch fehlerfrei zu programmieren, ist das doch kein grund, gleich zu weinen und baby-sprachen zu benutzen.

    Tja, so sind 'se halt die Javaisten. Geich anfangen zu heulen, wenn irgendein C++ Newbie mit einem rohen Array einen Bufferoverrun erzeugt, weil er das auch so in einem schlechten Buch gesehen hat. Aber sich mal darüber zu informieren, welche Sicherheitskonzepte es gibt, und dass man auch in C++ absolut sicher programmieren kann, können sie nicht. Schämt euch! 👎



  • groovemaster schrieb:

    Tja, so sind 'se halt die Javaisten. Geich anfangen zu heulen, wenn irgendein C++ Newbie mit einem rohen Array einen Bufferoverrun erzeugt, weil er das auch so in einem schlechten Buch gesehen hat. Aber sich mal darüber zu informieren, welche Sicherheitskonzepte es gibt, und dass man auch in C++ absolut sicher programmieren kann, können sie nicht. Schämt euch! 👎

    Ok, beruhig Dich mal und komm mal wieder zurück in die Realität. Die Probleme, die durch Bufferunderruns auftreten existieren in Anwendungen, die von vielen Leuten genutzt werden und hinter denen massives Entwickler-Know-How steckt. Ich habe noch nie eine Meldung darüber gelesen, dass ein Anfänger in einem Hello-World-Programm eine Sicherheitslücke produziert hat. Das würde ja auch keinen interessieren. Sicherheitsprobleme sind nur dann von Relevanz, wenn das entsprechende Programm eine gewisse Bedeutung hat. Und offensichtlich werden solche Programme nicht von den Leuten geschrieben, die volkard da beschrieben hat. Insofern halte ich 15-20 Jahre Erfahrung in einer Programmiersprache für realitätsfern. ...oder die Vorstellung, dass diese Leute dann nicht mehr die entsprechenden Probleme verursachen.

    ...es ist ja sogar so, dass die Sicherheitslücken in Java auf C++ zurückzuführen sind. Die existieren nicht im Javacode, sondern in der JVM, die in C++ geschrieben ist. 😉



  • rüdiger schrieb:

    Aber warum sollte da ausgerechnet Java helfen? Ob gäbe es keine anderen Programmier-Umgebungen, die solche Überprüfungen haben. Hey, so etwas hatte man schon in den 1950er Jahren.

    Ja, i.d.T.. Es gibt auch andere Möglichkeiten, solche Probleme zu vermeiden. Die Nutzung von Java ist nur eine dieser Möglichkeiten.



  • Gregor schrieb:

    ...es ist ja sogar so, dass die Sicherheitslücken in Java auf C++ zurückzuführen sind. Die existieren nicht im Javacode, sondern in der JVM, die in C++ geschrieben ist. 😉

    Ne, sie sind auf den unfähigen C++-Programmierer zurück zu führen. Das ist der Unterschied zu Java, wie du es ja bereits erklärt hast.

    Gregor schrieb:

    rüdiger schrieb:

    Aber warum sollte da ausgerechnet Java helfen? Ob gäbe es keine anderen Programmier-Umgebungen, die solche Überprüfungen haben. Hey, so etwas hatte man schon in den 1950er Jahren.

    Ja, i.d.T.. Es gibt auch andere Möglichkeiten, solche Probleme zu vermeiden. Die Nutzung von Java ist nur eine dieser Möglichkeiten.

    Da muss man nun die weiteren Nachteile von Java abwiegen, aber dafür ist dieser Thread nicht gedacht. Daher lassen wir das mal so stehen.

    Zum Beispiel wäre eine Möglichkeit Index-Prüfungen in C++ zu benutzen.


Anmelden zum Antworten