C-Hasser
-
ja ok vieleicht war es ein wenig aus dem zusammenhang gerissen
auf was ich ja hinaus wollte, mit c++ kann man ja so ziemlich alles machen. das mag ich eher so an c++. man sollte auch ahnung von der sprache haben die man verwendet. es ist nunmal keine sprache die einem das denken übernimmt.
-
Das heist C++ ist schlecht weil es vector<T>::operator[] und vector<T>::at gibt? Eine Sprache die also nur vector<T>::at hat ist also überlegen? Naja Ansichtssache.
-
DEvent schrieb:
das mag ich eher so an c++. man sollte auch ahnung von der sprache haben die man verwendet. es ist nunmal keine sprache die einem das denken übernimmt.
arroganz, arroganz...
darf ich mal fragen, wie viele hochkomplexe programme du schon geschrieben hast?
-
Wer den text da geschrieben hat der hat sich ganz schön mühe gegeben. Ich frage mich, in was der betreffende so codet, schließlich hat er ja von C scheinbar eine Ahnung.
Und C / C++ bietet die meißten möglichkeiten - nach assembler.
-
BloodLord schrieb:
Wer den text da geschrieben hat der hat sich ganz schön mühe gegeben. Ich frage mich, in was der betreffende so codet, schließlich hat er ja von C scheinbar eine Ahnung.
Die Welt ist ja zum Glück ein bißchen größer, als Du dir das von deinem C-Teller aus vorzustellen scheinst. Wenn der Autor über den Text nicht "C-Hasser", sondern "gängige C-Anfängerfehler" drübergeschrieben und die polemischen Spitzen weggelassen hätte, dann würde der Text vermutlich im Forum öfter zitiert.
Und C / C++ bietet die meißten möglichkeiten - nach assembler.
Falsch.
-
Man kann mit C++ schon sicher programmieren. Das Problem fängt aber allein dabei an, dass dies weder in der Standard Library noch von den Compiler-Herstellern so vorgesehen ist. Man kann erst recht keinen sicheren Stil erzwingen.
Das kann man `C++` schon vorwerfen.
Es gibt Programmiersprachen, die sehr viel mehr Sicherheit dem Programmierer aufzwingen. Eiffel und ADA (SPARK) fallen mir da ein, obwohl ich diese beiden Programmiersprachen (noch) nicht wirklich kenne.
-
in C++ ist ungeheuer einfach solche fehler zu begehen, wie sie in dem Text dargestellt sind. zwar hat man mit assert etc die mittel zur hand um eben diesen missstand mit viel arbeit aus der welt zu schaffen, schade ist es allerdings, dass die sprache selber sich nicht um sowas kümmert(was ich sehr schade finde ist, dass der so einfach zu nutzende op[] von vector und konsorten kein assert verwendet, und sich in dem punkt dann doch wieder sehr den c-arrays annähert. Und wer benutzt schon at, wenn der op[] viel einfacher zu lesen und verstehen ist...)
-
C hassen ist etwas besonderes,
C hassen ist eher der neid derer die nicht in C programmieren können :p
lo0ol
-
@otze: Dein assert bringt gar nichts. Du brauchst die Sicherheit im Release-Build. Nur weil in deinen Tests gerade keine Bereichsüberschreitung stattfindet, heißt das noch lange nicht, dass jemand, der dein Programm disassembliert, um eine Schwachstelle zu finden, keine findet. Er wird Eingaben ausprobieren, von denen du nicht mal geträumt hast.
Bei der Verwendung eines Vektors hast du wenigstens schon mal den Vorteil, dass die Daten auf dem Heap liegen und der Angreifer nicht ganz so einfach die return-Adresse überschreiben kann. Moderne Betriebssysteme schützen zum Glück auch das Textsegment.
Für ein sicheres Programm brauchst du aber rundum Prüfungen. Für jeden Arrayzugriff, für jede andere Pointerarithmetik, ... für praktisch überall, wo C++ "undefiniertes Verhalten" vorsieht. Und das ist ja leider nicht gerade wenig.
Microsoft plant gerade was interessantes. Man kann nen Compilerschalter setzen und der Compiler sichert dann zu, dass dein Code sicher ist. Es wird ne Implementierung der STL benutzt, die Exceptions wirft, C-Arrays sind nicht mehr erlaubt, usw.
-
@Optimizer
So ein Safety-C++-Projekt hab ich mir auch mal überlegt. Aber ich denke, der Aufwand lohnt sich einfach nicht. Man müsste erstens die komplette Standard Library ersetzen, einen Preprozessor schreiben, damit man sicheres Programmieren erzwingen kann und wahrscheinlich müsste man noch eine Umgebung um das Programm legen, ähnlich wie Valgrind.Aber vermutlich ist es einfach leichter ADA zu lernen
Wobei man natürlich auch beachten muss, dass die sicherste Umgebung nichts bringt, wenn das Design trotzdem kaputt ist. Man kann eben keine vernünftige Ausnahme-Behandlung erzwingen. Da bringt auch eine als "sicher" geltende Programmiersprache nichts