скорость языков программирования

Существует несколько языков программирования, каждый со своими собственными причудами и функциями. Из-за различных вариантов дизайна и вариантов использования некоторые из них быстрее или медленнее, чем другие. Проще говоря, именно эти различия вызывают эти изменения производительности.

 

Что такое язык программирования?

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

Что такое язык программирования?

Эти языки можно классифицировать, глядя на уровень абстракции, который они выполняют для программистов. В основном, это то, насколько заботится сам язык о вещах, которые на более низком уровне будут обрабатываться вручную. Это, как правило, делает языки более высокого уровня намного проще для программирования.

Примером этого является управление памятью. Для некоторых языков с меньшей абстракцией программист должен вручную указать, сколько оперативной памяти им нужно для задачи, а затем отпустить ее, как только это будет сделано. Если они этого не сделают, или если что-то происходит, что они не учитывают, использование памяти может расти и расти. Языки более высокого уровня, такие как Java, делают это автоматически.

 

Цена автоматизации

Тем не менее, есть некоторые недостатки в использовании языков более высокого уровня. А именно, скорость. Иногда, чем больше вещей выводится из-под контроля программиста, тем менее эффективной может быть программа.

Например, языки с автоматическим управлением памятью (обычно называемые сборкой мусора) могут быть медленнее, чем те, которые не реализуют это. Это связано с тем, что программе требуется время, чтобы пройти через себя и очистить память через определенные промежутки времени.

Высокоуровневый язык программирования

 

Компиляция

Как правило, программы, написанные на таких языках, как C и C ++, работают быстрее, чем программы, написанные на большинстве других языков. Большинство операционных систем написаны с их использованием, а также некоторого ассемблерного кода еще более низкого уровня. Один из основных факторов этого исходит из их компиляции (по сравнению с интерпретацией).

Это означает, что перед запуском источник программы сначала переходит на более низкий уровень: машинный код. Полученные продукты называются двоичными файлами (например, DLL-файлами), которые связаны вместе с соответствующими файлами, чтобы заставить их работать, создавая то, что называется исполняемым файлом.

 

Однако одним из недостатков этого является время, необходимое для компиляции таких программ. Большие программы, такие как Mozilla Firefox могут занять около полутора часов или около того. К счастью, большинство программ в наши дни делают этот процесс заранее, что упрощает установку и использование.

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

 

Эффективность компилятора

Чтобы перевести любой код на что-то, что компьютер может понять (машинный код), его нужно запускать через специальную программу, называемую компилятором. На одном языке может быть несколько компиляторов для него. Например, как GCC (сборник компиляторов GNU), так и Clang можно использовать для компиляции программ.

Поскольку работа компилятора заключается в том, чтобы перевести программу в машинный код, насколько хорошо это может повлиять на ее скорость. Один и тот же источник может иметь несколько разных результатов, в зависимости от того, как сконфигурирован компилятор.

Это также может означать, что разные скомпилированные языки могут работать быстрее или медленнее, чем другие. Как правило, C и C ++ говорят, что они очень быстрые, поскольку компиляторы для них прошли годы разработки и улучшения. Другие языки не всегда имеют такую зрелость.

компилятор

 

Интерпретированный язык

Как уже говорилось, интерпретируемые языки не компилируются заранее. Вместо этого они транслируются при запуске, обычно с помощью отдельной программы, известной как интерпретатор. Например, программы Java запускаются через нечто, называемое JVM (виртуальная машина Java).

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

 

Байткод: слабый компромисс

Из-за их несколько более медленного характера многие интерпретируемые языки фактически используют некоторую форму компиляции, чтобы ускорить их работу. Перед запуском эти программы переводятся на байт-код, тип языка, с которым легко работать интерпретаторам. Например, как Java, так и Python, до запуска, создают файлы CLASS и PYC, соответственно.

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

На некоторых языках также есть компиляция JIT (точно в момент времени). В основном, он принимает байт-код и компилирует его до машинного кода. Как и название, это происходит во время работы программы. Он предназначен для ускорения исполнения, ценой более медленного первого запуска, поскольку для его запуска требуется время для компиляции.

 

Заключение

Все это говорит о том, что эти различия на самом деле не являются проблемой для большинства людей, особенно когда компьютеры становятся все быстрее и быстрее с каждым годом. Хотя некоторые языки программирования, конечно, быстрее других, что действительно важно, так это то что они делают.

Конечно, если вы хорошо разбираетесь в программировании, это прекрасно пытаться вывести производительность из вашего кода. Но если вы только начинаете, гораздо лучше беспокоиться об обучении движкам в первую очередь. Неважно, насколько быстро или медленно рассматривается язык, если в конце концов ничего не получится.

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

Какие факторы вы учитываете при изучении языка программирования?


Читайте также

 

 

 
 

Комментарии   

+1 #1 Дмитрий 06.09.2017 09:32
После 35 лет программирования я все еще жду, когда эффективность кода будет не проблемой для большинства людей, особенно когда компьютеры становятся все быстрее и быстрее с каждым годом.
+3 #2 Алексей 07.09.2017 07:33
Конечно, если вы очень опытны в программировании, это прекрасно пытаться вывести производительность из вашего кода. Но если вы только начинаете, гораздо лучше беспокоиться об изучении движений в первую очередь. Вопрос, насколько быстро или медленно рассматривается язык, раскрыт не до конца.
+2 #3 Программер 07.09.2017 09:38
Хотя некоторые языки программирования, конечно, быстрее, чем другие, это не существенная разница.
Разница в скорости выполнения между, например, одной и той же задачей, реализованной в C и Ruby, может быть от 100 до 200x. Это не тривиальная разница. Другими словами, вы можете получить 100-кратную скорость выполнения с тем же оборудованием.
ПРИМЕЧАНИЕ. Языки программирования сами по себе не могут быть измерены по скорости; что можно измерить - это реализация языка программирования. Но функции и idoosccracies PL будут по своей сути влиять на то, насколько быстро может произойти реализация.
-1 #4 Олег Евгеньевич 08.09.2017 08:09
Хорошая, всеобъемлющая статья.
Я начал программировать мейнфреймы, прежде чем большинство из вас родилось. Я запрограммировал в IBM Assembler и мог читать основные дампы в машинном языке. И я никогда не буду добровольно делать это снова.
Если вы начинаете и хотите изучать язык, я бы рекомендовал Python. Это хорошо структурированный язык общего назначения, который очень популярен и все еще растет в использовании.
Если вы хотите получить работу в программировании, Java по-прежнему находится на вершине кучи языков общего назначения. Поскольку он настолько популярен, что будет работать практически везде.
-1 #5 знаток 08.09.2017 10:16
Родной код всегда самый быстрый, а также самый маленький (footprint). Код в C, C ++, Delphi и Lazarus / Free Pascal превосходит .NET и Java на порядок. Статически скомпилированные EXIF-файлы Delphi составляют всего 500 КБ при работе с приложениями .NET или Java. .NET является самым медленным и сложным.
0 #6 Denis Duke 19.07.2019 08:16
Спасибо за хорошую статью!

У вас нет прав оставлять комментарии. Зарегистрируйтесь на сайте.