Почему скорость разных языков разная?
Допустим нам нужно сложить два числа - 2 и 3

На ассемблере:
Кладем 2 в регистр ax, 3 - в регистр bx, выполняем команду сложения регистров -  в результате у нас в ax ответ.
Грубо говоря - у нас выполнились всего 3 команды на уровне процессора.

На С: 
Сохранили значения регистров, сделали инициализации, выполнили 3 предыдущих команды сложения - восстановили значения регистров.  Потратили уже как минимум на несколько команд больше на регистры/инициализацию.

Некий высокоуровневый язык с динамической типизацией:
Взяли переменную, преобразовали в число. Взяли вторую переменную - преобразовали в число. Вызвали некий класс, который умеет складывать целые числа, числа с плавающей точкой, конкатенировать строки и т.п. Передали эти две наши переменные. Помимо собственно складывания чисел выполняются явные и неявные преобразования, выполняются проверки на исключения, вызываются методы классов, которые умеют делать много операций, и прочее, выполняются первоначальные инициализации, оптимизации на лету, сохранение регистров и т.п...
То есть для задачи складывания чисел используется уже на порядок больше команд процессора.
кривость и недоработки оптимизации кода.
или наоборот заморочки прослоек защиты железа от пользователя/погромиста.