A přitom ve skutečnosti vznikli jen díky tomu, že jazyk bez typové kontroly je možné snáz implementovat.
Není to spíš naopak? Je implementoval oba typy jazyků a runtime pro jazyk bez typové kontroly je těžší napsat, právě kvůli absenci garancí.
Jaké garance máš na mysli?
Co je kde v paměti za hodnotu. Typová kontrola (inference) při překladu prostě přesně zjistí typy, velikost hodnot a polí atd.
Ty tu garanci ale nepotřebuješ. Máš pět typů hodnot (číslo, text, list, dict, funkci)
[1], na ty to naparsuješ, a pak už nic víc neřešíš. Všude (na těch pár místech) jen stavíš guardy, aby ti to nepadlo na core dump
[2], a to je asi tak všechno. Zatímco statické typy, tam máš celej složitej aparát validace a to mluvím jen o impotentních typech v jazycích jako je Java, C#, a spol.
[1] a to rozlišení na číslo a text je samozřejmě optimalizace.
[2] a vyhazuješ si vlastní stack trace