В языках с хорошо оптимизирующим JIT компилятором горячие функции окружены type guard check'ами, и скомпилирована оптимизированная версия функции и всех включенных в неё функций, блоков кода, для типичных типов аргументов (внутри этой версии как можно больше определяется статически, исходя из условий гарантируемых type guard'ом), а в случае вызова с неожиданными аргументами производится fallback на рыхло динамически скомпилированную версию, или даже интерпретатор.