Každopádně uznávám, že problematice jak typy zlepší efektivitu překladu jsem se nikdy moc nevěnoval.
To je škoda, je to zajímavé a aktuální téma. Proč je asi v průměru Julia rychlejší než Rust (nápověda: multidispatch)?
Typová bezpečnost u dynamického jazyka znamená co konkrétně?
To samé jako u staticky typovaného, že kód jde otypovat tak (ručně nebo inferencí), že v době běhu není nutné zkoumat typy objektů pro hladký běh. V teorii překladačů se pracuje v souvislosti s typy s několika pojmy, kód může být typově stabilní (to pomáhá optimalizaci, ale nezajišťuje bezpečnost) nebo typově ukotvený (to zajištuje bezpečnost). Ovšem čím silnější typový systém, tím horší vyčíslitelnost (u hodně silných typových systémů z principu nefunguje inference typů, ale i v Haskellu stačí napsat jednoduchou polymorfní rekurzi a překladači jebne). Je to něco za něco, já třeba osobně taky upřednostňuju silný typový systém se zevrubnou kontrolou v době překladu, ale dobře se mi psalo i v ObjC (tom starém, předswiftím). Navíc od určité síly typového systému se už nedá v kódu přesně rozlišovat mezi dobou překladu a běhu, protože na typové úrovni můžu pracovat s hodnotami při překladu a na úrovni exekuce kódu s typy. Přidej GADT a je z toho dokonalý guláš, kde typová kontrola není o přiřazování/ověřování typů, ale převedení celého programu do formální logiky a prozkoumání, zda je v teorii spor (proto taky jdou vracet z funkcí instance typu
Vect n T vytvořené za běhu na základě nekonstantní hodnoty
n).
Je-li jazyk staticky typovaný, přináší to jasné a měřitelné bezpečnostní výhody.
Jasně, výhoda je, že se více chyb odhalí již při překladu. Proto ostatně vznikly Typescript nebo Dart, ty jsou sice v jádru dynamické, ale typy při překladu umí kontrolovat.