С одной стороны, если вы хотите, чтобы ваш скомпилированный код напрямую тестировал флаги для каждой операции, он будет медленным по той же причине, по которой интерпретируется байт-код. Может быть, не так медленно, как байт-код, но закон Амдала будет работать против вас.
С другой стороны, простой компилятор для полностью динамического языка в любом случае должен будет выполнять некоторую форму проверки типов. Универсальное использование динамической диспетчеризации приведет к серьезным потерям производительности на современных процессорах (хотя, возможно, не столь серьезным для микроконтроллеров?)
Если ваш компилятор может оптимизировать большинство вышеперечисленных проверок типов во время выполнения, вы можете вернуть свою производительность. Однако реализация этого может быть не простой и не простой. Я предполагаю, что в этом случае вы бы хотели избежать битовых флагов, поскольку требуемая маскировка была бы просто ненужной работой.