z.B.
try {
dokument.speichern();
datenbank.commit();
status_anzeigen("Daten gespeichert");
}
catch() {
datenbank.rollback();
meldung("speichern fehlgeschlagen");
}
Also, versuche zu speichern:
- wenn's klappt, alles festschreiben
- wenn nicht, alles rückgängig machen und den User informieren
Buffer-Overflows sollten in Script/Runtime/VM-Sprachen auch nicht vorkommen.
( z.B. TypeScript/JavaScript, Java, C#, ... )
Diese benutzen jedoch Bibliotheken, die's ev. mit dem Speicher nicht so genau nehmen.
Oder man benutzt unsafe-Blöcke oder unglückliche Compilerschalter.
( Undefiniertes Verhaltung (UB) glänzt am besten durch Abwesenheit )
C++ ohne UB geht auch -- z.B. mit C++/CLI
jedoch nicht ISO C++ konform.
( Alles mit ^ ist hier auch verwalteter Speicher )
public ref class IntDotnetClass
{
public: int IntValue;
public: IntDotnetClass()
{
this->IntValue = 0;
}
public: virtual ~IntDotnetClass()
{
System::Console::WriteLine("~destruct IntDotnetClass" + IntValue.ToString());
}
public: int operator=( const int IntValue)
{
this->IntValue = IntValue;
return this->IntValue;
}
public: virtual System::String^ ToString() override
{
return IntValue.ToString();
}
};
Weiters stehen zur Vermeidung von Speicherproblemen
- Rust
- Fil-C
- Valgrind
- und ev. bald TrapC
zur Verfügung.
Auf Client und Server eine Script-Sprache
ist auf dem Weg.
Und dann ev.
- sicherer
- Module per import ohne Konfigs und Builds
- TypeScript neben JavaScript es6 out of the Box
- Grundfunktionen (z.B. HTTP, SQL) ohne zusätzliche Abhängigkeit
Hat Vorteile, wenn am Client und Server
die gleichen Formate und Werkzeuge verwendet werden können.
( natürlich eher für Sachen, bei denen man mit Scriptsprachen auskommen kann )
Compiler vs. Script/Runtime/VM-Sprachen
Anforderungen schnell umzusetzen,
braucht dynamische Software.
Laufzeitprüfungen bei Script/Runtime/VM-Sprachen,
wie z.B.
- RtAssert( fdName != null && !"".equals(fdName), "fdName mit Inhalt erwartet");
können den Nachteil gegenüber statischer Codeanalyse bei Compilern z.T. ausgleichen.
Diese sind
- beim entwickeln / testen
und
- im Produktivbetrieb
aktiv.
Immer Prüfen kostet jedoch immer Resourcen.
Unterschied zwischen UB und Exception
- undefiniertes Verhalten
--> Kontrolle verloren --> bevorzugter Kandidat für Container
( Programmtypen, die das NICHT vermeiden, sind im Container besser aufgehoben )
- Exception
--> Ausnahme per Catch einfangen, Fehlermeldung, Rollback --> nichts kaputt
- 1 - (TxtDoc-runtime-sprachen2026-06-24.html)