Microsoft stellt sichere Programmiersprache SDL vor
-
Ein Post auf blogs.msdn.com bietet erstmals Einblicke in die jüngste Programmiersprache aus dem Hause Microsoft. Die Sprache verbindet die Verbosität von C++ mit der Aktualität von C und bietet einzigartige Sicherheitsfunktionen. Erscheinen wird diese Revolution mit Visual Studio 11 unter dem Namen Secure Development Language, kurz SDL.
Bemerkenswert in die neu entwickelte Speicherverwaltung, die mehr Kontrolle bietet als es beispielsweise in .NET-Sprachen wie C# der Fall ist.
Auch ein mächtiges Metaprogrammierungswerkzeug mit dem vorläufigen Namen "Macro" hat Einzug in SDL gefunden.
Das Zusammenspiel mit nativem Code ist problemlos möglich, egal ob C oder C++.Die wichtigsten Merkmale sind laut Microsoft die zahlreichen Sicherheitsfunktionen:
- Prüfung von Ausdrücken zur Compilezeit, um arithmetische Probleme frühzeitig zu erkennen
- Automatische Erkennung von potentiell unsicheren Aufrufen
- Speicherüberprüfung sowohl zur Compile- als auch zur Laufzeit
- Ein intelligentes Referenzkonzept, um problematische Speicheroperationen zu verhindern
- und vieles mehr
Jetzt endlich ein paar Code-Beispiele direkt vom SDL Team.
Der Ausschnitt illustriert die mächtige und kinderleichte Speicherverwaltung von SDL:
SDL Team schrieb:
NULL out free'd memory pointers in new code. This helps reduce the severity of double-free bugs and bugs that overwrite "dangling" pointers. For example: char *p = new char[N]; ... delete [] p; Add this statement after the delete operator: p = NULL;
Wie Sie sehen, lässt sich der Zeiger nach der Speicherfreigabe in einen Wartezustand versetzen, der eine erneute Freigabe verhindert.
Im Gegensatz zu den eher einfach gestrickten und fehleranfälligen Templates von C++ gibt es in SDL Makros, die Code genau da einfügen, wo er gebraucht wird:
SDL Team schrieb:
#define SAFE_DELETE(p) if( NULL != p ) { delete p; p = NULL; }
Dieses Makro scheint eine moderne Form der Speicherverwaltung darzustellen und dabei besonders sicher zu sein.
Es ist sogar möglich, ein ähnliches Verfahren für sogenannte Arrays (zu deutsch in etwa: Felder) anzuwenden:
SDL Team schrieb:
#define SAFE_ARRAYDELETE(p) if( NULL != p ) { delete [] p; p = NULL; }
Microsoft empfiehlt, zum Erscheinen von Visual Studio 11 auf die neue SDL-Technologie umzusteigen. Für ein sicheres und sauberes Premium PC-Erlebnis.
(Einblicke in die Entstehung von SDL, die Kommentare lesen)
-
SDL - Security Development Lifecycle
-
SDL ist keine Sprache.
1/10 Trollpunkte.
-
Wer hat das geschrieben, du nicht, oder? Für einen Aprilscherz zu unlustig, bis auf den letzten Satz natürlich, der klingt nach Klopapierwerbung.
-
Bashar schrieb:
Wer hat das geschrieben, du nicht, oder? Für einen Aprilscherz zu unlustig, bis auf den letzten Satz natürlich, der klingt nach Klopapierwerbung.
Hmm, liest sich wirklich wie ein Scherz. Darum ging es mir aber gar nicht.
Ich habe mich ziemlich über die Antwort von Microsoft zu deren Blog-Post aufgeregt, weil sie genau das Gegenteil von "Security" vermittelt: Irgendeinen Brei aus "kann ein bisschen C" und "Templates und RAII sind mir zu schwer". Dieses weitverbreitete C/C++, wie man es nennen könnte. Oder schlechtes C mit Klassen.
Den Ärger habe ich mit Schreiben rausgelassen.
Falls ich jemanden belästigt habe, soll er sich bei MS beschweren.
-
WTF? Wollen die den Namen von Simple Directmedia Layer nehmen ? Das wird aber für Verwirrung sorgen ...
-
Du schreibst echt niedlich, dafür dass du verärgert bist. Nach zwei, drei Zeilen lesen, dachte da wollte mit jemand, dass All-heilmittel verkaufen. Und dieser Code, dann wüsste niemand mehr, was du ausdrücken wolltest.
-
TyRoXx schrieb:
..
Warte mal.. das war kein schlechter Scherz?
@Google: Hä? Das ist doch überhaupt keine Sprache. Jetzt bin ich verwirrt. Wo ist dein Problem? oO
-
TyRoXx schrieb:
Bashar schrieb:
Wer hat das geschrieben, du nicht, oder? Für einen Aprilscherz zu unlustig, bis auf den letzten Satz natürlich, der klingt nach Klopapierwerbung.
Hmm, liest sich wirklich wie ein Scherz. Darum ging es mir aber gar nicht.
OK, jetzt versteh ich. Da war ich wohl etwas zu vernagelt. Vielleicht weil der Text oberflächlich professionell wirkt und in der ersten Hälfte, wenn einem SDL nichts sagt, man wirklich glauben könnte, er sei eine ernstgemeinte Ankündigung. Am Ende hatte ich zwar das Gefühl, eine Satire gelesen zu haben, aber überhaupt nicht verstanden, was genau eigentlich kritisiert wird. Schließlich ist SDL ja überhaupt keine Sprache. Willst du damit ausdrücken, dass SDL Probleme in einer Sprache, d.h. Sprachform von C++, lösen will, die es eigentlich nicht mehr gibt oder geben sollte?
-
Nein, er kritisiert höchstwarscheinlich das SDL-Team, von dem auch der Code in seinem Beitrag stammt. Lies doch mal den letzten Kommentar.
-
Bashar schrieb:
Schließlich ist SDL ja überhaupt keine Sprache. Willst du damit ausdrücken, dass SDL Probleme in einer Sprache, d.h. Sprachform von C++, lösen will, die es eigentlich nicht mehr gibt oder geben sollte?
Es ging mir hauptsächlich um den Kommentar, in dem jemand von Microsoft schlechten Code empfiehlt. Vor allem, weil es in dem Post darum geht, dass potentiell unsicherer Code von Visual C++ 11 als Fehler angezeigt werden kann.
Da so ein schlechter Stil unter Programmierern weit verbreitet ist und den wesentlichen Merkmalen von C++ widerspricht, habe ich diese Teilmenge von C++ mal als Programmiersprache namens SDL dargestellt.
Diese
/sdl
-Option ist so lächerlich wie selbstverständlich. Deswegen ist sie auch nicht der Rede Wert und dient nur als Inspiration und Namensgeber.
Einige der Warnungen ergeben schon Sinn wie C4146 "A unary minus operator was applied to an unsigned type, resulting in an unsigned result".
-
Ethon schrieb:
Nein, er kritisiert höchstwarscheinlich das SDL-Team, von dem auch der Code in seinem Beitrag stammt. Lies doch mal den letzten Kommentar.
Dann hat TyRoXx das SDL Team nicht verstanden, da wird ein Fall Null-Auto-Zuweisung nach Freigabe angeben. Der Entwickler muss kein NULL setzen, dass soll die Umgebung für ihm machen, damit solchen dumme Macros, wie das SDL gesehen hat, unnötig werden.
-
TyRoXx schrieb:
Es ging mir hauptsächlich um den Kommentar, in dem jemand von Microsoft schlechten Code empfiehlt. Vor allem, weil es in dem Post darum geht, dass potentiell unsicherer Code von Visual C++ 11 als Fehler angezeigt werden kann.
Dann lies nochmal worum es geht.
double delete ist ein Problem in vielen Codes. CHECKED_DELETE Macros sind eine gaengige Loesung fuer das Problem (nicht eine gute, aber eine gaengige).Nachtrag: das SDL Team sagt nicht, dass man diese Macros verwenden soll, noch dass diese Teil der SDL Implementierung im VC++ sind, sondern dass dies eine aktuelle Praxis ist. Das ist ein sehr relevanter Unterschied!
Diese
/sdl
-Option ist so lächerlich wie selbstverständlich. Deswegen ist sie auch nicht der Rede Wert und dient nur als Inspiration und Namensgeber.
Einige der Warnungen ergeben schon Sinn wie C4146 "A unary minus operator was applied to an unsigned type, resulting in an unsigned result".Genauso wie -Weffc++ beim gcc.
Warnungen sind prinzipiell nie verkehrt.Du hast einfach nur nicht verstanden worum es geht.
SDL ist keine Loesung fuer alle unsere Probleme, aber es warnt bei ein paar tricky Sachen. zB sind die unsafe Function Warnings im VC++ schon sehr nett. Ich finde es praktisch wenn mein Compiler mich vor potentiellen Fehlern warnt. Ich kann ja immernoch die Warnung abschalten wenn ich sie fuer nicht sinnvoll erachte.
Aber Code wird nicht nur von guten Programmierern entwickelt sondern auch von Schlechten. Und die brauchen jede Hilfe die sie bekommen koennen.
-
Also -Weffc++ habe ich noch nie verwendet. Was tut das nochmal?
-
314159265358979 schrieb:
Also -Weffc++ habe ich noch nie verwendet. Was tut das nochmal?
Doku lesen. Ist ja echt nicht schwer, oder?
Es schaltet Warnungen aus Effective C++ ein. Die sind tw auch doof - aber es ist nett sie zu haben wenn man sie denn nutzen will.
-
Schwer nicht, aber Arbeit. Danke unso.
-
314159265358979 schrieb:
Also -Weffc++ habe ich noch nie verwendet. Was tut das nochmal?
Die Idee fand ich gut, weil ich auch das Buch (Effective C++) immer gern empfehle. Aber im Buch stehen halt Daumenregeln drin, die nicht immer passen. Und wenn die nicht passen, nervt so eine Warnung. Mir wurde da mal was angemeckert, weil ich einer bestimmten Klassen keinen virtuellen Destruktor spendierte. Der war aber in meinem Fall auch unnötig. Man muss ja nicht immer "polymorph löschen" können, gerade bei so Dingen wie Iterator-Klassen oder Funktionsobjekten, wo es mal praktisch sein kann, sie per public inheritance zusammenzusetzen à la CRTP oder so...
Da fällt mir ein, ich wollte immer noch ein paar andere "static code analyzer" ausprobiert haben.
-
krümelkacker schrieb:
Aber im Buch stehen halt Daumenregeln drin, die nicht immer passen.
Faustregeln.
-
volkard schrieb:
krümelkacker schrieb:
Aber im Buch stehen halt Daumenregeln drin, die nicht immer passen.
Faustregeln.
Volkard wird mit -Wduden compiliert.
-
Bashar schrieb:
volkard schrieb:
krümelkacker schrieb:
Aber im Buch stehen halt Daumenregeln drin, die nicht immer passen.
Faustregeln.
Volkard wird mit -Wduden compiliert.
eher -Wlexikon
Wobei er in diesem Fall versagte, Daumenregel ist legitim.
Sorry@volkard