TheSnegok
@TheSnegok

Почему скорость разных языков разная?

Почему у всех языков разная скорость если они все переводят на двоичный код? Даже если взять например две почти одинаковые строчки кода с разных языков, они будут в двоичном все равно отличаться?
  • Вопрос задан
  • 449 просмотров
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Допустим нам нужно сложить два числа - 2 и 3

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

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

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

Даже больше скажу - две одинаковые строчки на одном и том же языке, но собранные (или запущенные) разными компиляторами (или разными рантаймами) или одним и тем же компилятором (или рантаймом) с разными разными опциями.
они будут в двоичном все равно отличаться?

Ага. По тому что везде по разному реализованы компиляторы и интерпретаторы.
+ Во всех языках стандартная библиотека разного размера и она тоже может загружаться с разной скоростью.
Хотя в совсем примитивных случаях может быть идентичный код.
Ответ написан
Комментировать
  1. компиляторы производят разные по качеству и возможностям оптимизации, в результате которых может быть сильно разный целевой по набору инструкций процессора машинный код. Какие-то компиляторы создают много накладных расходов и менее компактный код.
  2. У языков может быть разный runtime (также скомпилирован в машинный код), который также влияет на скорость исполнения. Некоторые языки компилируются в универсальный байткод, независящий от процессора. За это также приходится платить свою цену.
Ответ написан
Комментировать
@pfg21
ex-турист
кривость и недоработки оптимизации кода.
или наоборот заморочки прослоек защиты железа от пользователя/погромиста.
Ответ написан
Комментировать
@ikutin666
строчки то могут быть вообще идентичные 1 в 1, но в разных языках компилятор может их по разному обработать, следовательно и машинный код будет разным
Ответ написан
Комментировать
IGHOR
@IGHOR
Qt/C++ DEV/CTO
Двоичный код бывает разный. Есть ассемблерный код, он тоже двоичный, а есть так называемый "байт код" - созданный для какой либо среды runtime выполнения.
Ассемблерный код всегда быстрее любого runtime выполнения.
Наглядно можно посмотреть тут https://godbolt.org
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы