Zkusím trochu střelby od pasu.
Otázka je, co přesně znamená „dosahují rychlosti srovnatelné s Céčkem/Rustem“. Věřím, že bude existovat nějaký benchmark, který tak dopadl. Třeba u nějaké funkce, která má na vstupu i výstupu číslo (z hlediska dynamicky typovaného jazyka tam ale může přijít cokoliv), se může vyplatit udělat specializovanou variantu, která bude číslo předpokládat, a v některých případech ji použít – například dynamicky zkontrolovat předpoklad, že je na vstupu číslo, a podle toho se rozhodnout mezi obecnou a specializovanou variantou. Tady věřím, že se může podařit prakticky odstranit režii dynamicky typovaného jazyka, zvlášť pokud výpočet v té funkci bude náročnější, a tedy režie s kontrolou na začátku funkce bude zanedbatelná.
Podobné věci bych čekal spíše u JIT, který může využít informace z běhu (funkce f dostane vždy int, funkce g int nebo float, funkce h dostane v 99 % případů int), nicméně i AOT (ahead of time) to může udělat, jen k tomu má méně informací.
Pokud bychom ale měli funkci, která bude intenzivně pracovat s košatou strukturou, může být s podobnou optimalizací problém. Ono už u obyčejného pole může být náročné dtnamicky zjistit typ všech jeho prvků – jednak by to typicky znamenalo projít všechny prvky a jednak bychom mohli mít problém v případě úpravy pole třeba z jiného vlákna. Navíc je těžké podobná pole efektivně reprezentovat – v obecném případě je přímočaré udělat pole pointerů na hodnoty prvků, protože nepředpokládám konkrétní typy. Pro pole integerů se nabízí udělat přímo pole integerů (a nemít žádné pointery), ale pokud nemohu zajistit, že se tam nedostane prvek jiného typu, potřebuju řešení pro případ, že se tam nějak dostane. Což může být u velkého pole časově náročné. Ano, lze mít typy jako Int32Array, které nic jiného nepřijmou, ale tím v podstatě dodávám trochu typové informace ručně.
A teď si představte, že nemáte homogenní pole různé strukturované heterogenní hashmapy, které s odkazují na další hashmapy, atd. S dynamickým typováním to bude celkem běžné, třeba v JS objektový literál {key: value, …} je v podstatě taková heterogenní hashmapa.