To je oxymoron, kdyz chces mit vsechno zkontrolovane v dobe kompilace, nemuzes to pak vytvaret za chodu, a naopak. Pro statickou analyzu nepotrebujes staticke typy, na to ti staci typove anotace, ktere ma python nebo truescript.
Je nějaký principielní rozdíl mezi statickými typy a těmi typovými anotacemi? V obou případech jsou to překladačem vynucená omezení možných hodnot.
Vyhoda statickych typu je jina a imho jedina, umoznuje podstatne lepsi optimalizaci na urovni strojoveho kodu. Kdyz se ty kouzla ve statickych jazycich delaji, proc nemaji plnohodnotnou funkci eval (ci jeji ekvivalent, treba pythoni compile) nebo repl? Coz je dalsi z vyuziti schopnosti prace s dynamicky vytvarenym kodem.
Třeba takový Haskell (ghc) má plnotučný repl, eval a všechny tyhle radosti. Cerní C++ interpret ten repl zvládá taky bez problémů.
To, jestli má jazyk eval, repl a podobné věci není až tak závislé na statičnosti nebo dynamičnosti daného jazyka. Závisí to spíš na tom, jestli se programy v daném jazyce distribuují v podobě zdrojáků nebo jako nějaký bytecode či binárky. Jde jenom o tom, jestli se vyplatí k tomu programu přibalit řádově větší a složitější kompilátor/interpret. Nebo jestli tam ten kompilátor stejně přibalený být musí.
1) Z nechápavosti, ale tak ti prostě nejsou souzeny. Souhlas, Javascript není dobře navržený jazyk, když vznikal, byla to spíš legrace, nikdo s ním tak velké ambice neměl. Holt stane se, smutné je, že nikdo nepřišel s lepší náhradou nebo alespoň javascriptem 2, který by se zbavil té nesmyslné zátěže. Přitom by v prohlížeči mohl běžet pár let paralelně s tím stávajícím a bezbolestně převzít štafetu.
Omyl, JavaScript není vůbec navržený jazyk. Vznikl jako demíčko, které napsal jeden člověk za týden a shodou okolností se ujal jako standard. Proč nikdo nepřišel s lepší náhradou je IMO jasné. U webového jazyka je úplně jedno, jestli je statický, dynamický, takový nebo makový. Jediné relevantní kritérium je kompatibilita s tou hromadou existujícího JavaScriptu. Všechno ostatní jsou jen důsledky.
3) Původ není podstatný, podstatná je možnost modifikovat dynamicky a jednoduše běžící runtime. Testování je potřeba vždy, statické typy tě přece před překlepem nezachrání.
Možnost modifikovat runtime nevyplývá ze statičnosti/dynamičnosti ale z toho, jestli má ten jazyk vždycky přibalený kompilátor/interpret.
Testovat je třeba. Ale drtivá většina překlepů se ve statických jazycích chytne už při kompilaci, protože metody jako "SeParam" žádný interface nemá.
4) Jak bys v javě za běhu modifikoval třídu a všem stávajícím instancím změnil chování nějaké metody?
Javu moc dobře neznám. V C++ bych asi věděl. Přes věci jako dll injection se dají dělat zajímavé divočiny.
Daleko lepší nápad mi ale přijde, pokud má daný systém nějaké zotavení z pádu, kontrolovaně shodit celý proces a nahradit ho novou verzí.