Vycházím z, možná nesprávného předpokladu, že když budu mít následující dvě proměnné:
a = "string"
b = 42
test(x) {
print("typ: {x.type}")
}
test(a) // typ: string
test(b) // typ: number
Tak se budou chovat stejně bez ohledu na to zda je jazyk silně nebo slabě typovaný.
Jenže typeof je jen v silných typových systémech. To je právě ten problém.
Měl jsem za to, že Javascript je slabě typovaný. Stejně tak PHP, VisualBasic.
Uveď příklad jazyka, který tedy nemá
typeof (slabě typovaného dle tvé definice)?
Ale to jsme dost odbočili, jen jsem chtěl říct, že dynamičnost a síla typového systému jsou dvě různé dimenze, které slouží dvěma nezávislým cílům, zajistit typovou bezpečnost a efektivní překlad či interpretaci. Pokud je jazyk staticky nebo silně typovaný, je obojího dosaženo, i když splňuje jen jednu z těch podmínek.
V Javě se to dělá tak, že VM oficiální typy zahodí, a odvozuje si svoje.
Každopádně uznávám, že problematice jak typy zlepší efektivitu překladu jsem se nikdy moc nevěnoval. Pro mě jsou jazyky bez statické kontroly nedostatečné obecně (rozuměj, fakt nemám náladu honit chyby v run time).
Typová bezpečnost u dynamického jazyka znamená co konkrétně?
Pokud je jazyk staticky nebo silně typovaný, je obojího dosaženo, i když splňuje jen jednu z těch podmínek.
V tomto se žel neshodnem. Je-li jazyk staticky typovaný, přináší to jasné a měřitelné bezpečnostní výhody. Je-li jazyk dynamicky silně typovaný, nejsem si vědom žádných výhod (co se té silně typovanosti týče) které by stály za řeč.
Ale rád se nechám přesvědčit.
Poznámka na závěr: Jak jsem si ověřoval zdroje, zda snad nekecám blbosti, tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu, a nemohlo by vesele optimalizovat jak jsi mě poučil) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.