Ограничения некоторых языков облегчают реализацию более быстрого кода (например, Fortran vs C и псевдонимы указателей), что является компромиссом между готовой производительностью и возможностями).
Язык не «оптимизирован» для конкретных задач, но делает реализацию, компиляторы и ограничения, облегчающие понимание кода компилятором. Реальное дело касается конкретных библиотек, алгоритмы, реализованные для ускорения процесса с помощью переключателей в зависимости от длины проблемы, делают его оптимальным.
Например, умножение использует различные случаи (см. GMP умножение .
Когда язык определяет математические операции более высокого уровня, его реализация является оптимальной (в данном случае эффективной), но это не является частью спецификации языка.
Пожалуйста, взгляните на матричные вычисления рангов в Matlab, Mathematica и Maple (сейчас я не могу выполнить все тесты самостоятельно, но они соответствуют моим тестам). Все эти языки (среды) реализуют одну и ту же операцию более высокого уровня, но детали реализации отличаются, что дает разное время.
Когда некоторые специфичные для предметной области задачи (здесь также предметно-ориентированный язык) ориентированы на конкретные вычисления, они улучшаются и оптимизируются (с годами) для целевой аудитории. Но быть оптимальным не всегда так. Например, Perl имеет долгую историю обработки строк, но PCRE (здесь просто регулярные выражения Perl) не являются самыми быстрыми из существующих (и используют много памяти), но чрезвычайно выразительны и мощны.
Ограничения языка вносят изменения в процесс компиляции, упомянутое указание псевдонимов предотвращает возможность переупорядочения кода и обеспечивает перезагрузку переменных.