App-Link #1033 Script/Runtime/VM-Sprachen mit Fehlerbehandlung und zwingend automatischer Speicherverwaltung

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)

INTRANET