X
Kommentare zu:

Windows 11: Erste Teile des Kernels sind schon auf Rust umgestellt

[o1] mh0001 am 12.05. 16:52
+2 -4
Was genau macht die Wahl der Programmiersprache eigtl. für einen Unterschied, wenn es am Ende eh vor der Ausführung komplett in Maschinencode kompiliert wird?

Wenn ich die absolut identische Prozedur schreibe, mit identischem Input, Output und Inhalt, und das dann kompiliere, macht es doch nach dem Kompilieren keinen Unterschied mehr, ob ich vorher in C, Java, Pascal oder wasweißich geschrieben habe.

Ernsthafte Frage... Ich dachte immer, Sicherheit oder Unsicherheit einer Programmiersprache wären nur bei Sprachen relevant, die zur Laufzeit kompiliert/interpretiert werden, und nicht mehr, wenn eh alles komplett übersetzt wird. Weil nach meinem Verständnis müsste ja das in Maschinencode kompilierte Endresultat in allen Fällen absolut identisch sein, egal von woher es übersetzt wurde.
Quasi wie wenn ich "Guten Tag!" von DeepL aus 10 verschiedenen Sprachen ins Deutsche übersetzen lassen, steht am Ende immer "Guten Tag!" da, auch wenn die ursprünglichen Sprachen sehr unterschiedlich waren. Die Maschinenanweisungen müssen am Ende ja auch die gleichen sein, sonst würde jedes Programm ja etwas anderes tun.

Oder schmeißt da jede Programmiersprache noch einen Haufen an "Kniffen" rein, die weit über das hinaus gehen, was der Programmierer schreibt? Sodass das gleiche Dreizeiler-"Hello World"-Programm eben doch ganz unterschiedlichen kompilierten Maschinencode enthalten wird, je nach dem, worin es zuvor geschrieben wurde?
[re:1] Roehre am 12.05. 21:30
+7 -
@mh0001: So eine Programmiersprache soll ja dem Programmierer Aufgaben abnehmen, indem es komplexe Routinen bereitstellt und bei Mehrfachnutzung nur einmal codiert. Dabei führen viele Wege nach Rom. Die einen sind schneller, die anderen benötigen vielleicht weniger Speicher.
Darin liegen die meisten Sicherheitsprobleme, wenn eine Programmiersprache Variablen so im Speicher ablegt, daß sie bei Überlänge z.B. in die nächste Speicherzlle schreiben kann und somit Manipulationen zulässt. Man kann die Werte natürlich prüfen, aber das kostet Zeit.
Moderne Prozessoren bieten viele Funktionen, die in älteren Programmiersprachen noch nicht eingepflegt waren und wie z.B. bei der Spekulativen Codeausführung mit Werten arbeiten, die vielleicht noch nicht geschrieben sind. Das ließe sich beliebig fortsetzen und geht weit über das "Hello World" hinaus.
[re:2] larsh am 13.05. 22:47
+3 -
@mh0001: Simpelstes Beispiel: in C musst du deinen Speicher selbst verwalten (wie viel brauche ich und wann wird der wieder frei gegeben). In verwalteten Sprachen wie .Net oder eben Rust erzeugt der Compiler den benötigten Code automatisch. Der Compiler ist (hoffentlich) dahingehend super getestet, ein Mensch als Programmierer hingegen kann ständig neue Fehler machen. In C kannst auch ein Objekt mit 20 Bytes allokieren und 30 draufschreiben, hindert dich niemand. In .Net geht das icht so einfach, in Rust glaub gar nicht.
oder

Zugangsdaten vergessen?

Jetzt kostenlos Registrieren!
☀ Tag- / 🌙 Nacht-Modus
Desktop-Version anzeigen
Impressum
Datenschutz
Cookies
© 2024 WinFuture