Время выполнения, язык программирования высокого и низкого уровня
Говоря о времени выполнения между языками программирования высокого и низкого уровня, я часто слышу, что языки низкого уровня работают немного лучше, чем языки высокого уровня.
Конечно, низкий уровень может работать хуже, чем высокий уровень, в зависимости от программиста и алгоритмов. Но если мы используем очень минимальный код, необходимый для выполнения разных задач. Будут ли чаще всего различия во времени исполнения из-за уровня абстракции разных языков?
А также, кто-нибудь знает хорошие книги на эту тему?
1 ответ
Во-первых, низкий уровень по сравнению с высоким уровнем не является четко определенным языковым атрибутом. Он обычно используется для обозначения доступности возможностей примитивных машин, средств абстракции, предоставляемых языком, и снова для описания конкретного уровня абстракции доступных библиотек. И хотя эти аспекты, вероятно, взаимосвязаны, они не являются надежными - ни один из них не требуется для другого.
Отсутствие доступа к машинным примитивам естественным образом устраняет гибкость для программирования производительности общего назначения, но языки без такого доступа могут достигать высокой производительности для определенных доменов, используя библиотеки и / или среды выполнения, которые специализированы для этого домена (например, производительность NumPy и Matlab с линейным алгебра).
Плохое оборудование для абстракции усложняет проектирование, разработку, использование, повторное использование и обслуживание. Это не обязательно напрямую влияет на потенциальную производительность, но практически усилия, приложенные к механике, не используются для улучшения производительности. Аналогичным образом, отсутствие высокоуровневых библиотек не обязательно напрямую влияет на производительность, но плохо построенные повторные реализации основных средств могут иметь тот же эффект.
Итак, чтобы ответить на ваш вопрос: ни в каком аспекте языковой "уровень" обычно не определяет производительность. Но всегда есть "но"...
Кроме того, существуют издержки для языков "широкого спектра", таких как C++, которые сочетают в себе доступ к примитивным возможностям с хорошими средствами абстракции и обширными библиотеками: сложность и когнитивная нагрузка, которые (IMHO) являются драйверами вышеупомянутой корреляции между различными аспектами языка "уровень".