Последние записи
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
- wprintf как напечатать кириллицу
- Взаимодействие через командную строку
- Сравнение языков на массивах. Часть 1
- Сравнение языков по скорости
- Чтение огромных xml-файлов
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
13th
Авг
Сравнение языков по скорости
Posted by obzor under Заметки
В книгах и интернете можно прочитать разные мнения насчёт скорости работы программ на разных языках программирования. Например, говорят, что код на Go очень медленный, что самые быстрые языки (то есть машинный код, генерируемый компиляторами этих языков) — С++ и Rust, что программы на Free Pascal и Ada значительно отстают по скорости работы от С++ и т.д. В одной книге про Java я прочитал, что программа на Java где есть расчёты легко уделывает по скорости неоптимизированный C++-код, а оптимизированный C++-код, конечно, быстрее Java-овского, но когда расчёты идут долго, то у Java включается внутренний оптимизатор и Java-программа вполне может сравниться по скорости с C++-кодом. и так далее.
Решил сам сравнить разные языки по скорости работы программ на них. Взял 6 языков, написал для каждого программу подсчёта количества простых чисел в заданном диапазоне от 2 до n.
Задал n=500000 (пятсот тысяч), для каждой программы сделал несколько запусков, из последовательности значений времени расчёта удалил эксцесс (максимальное значение), из оставшихся значений подсчитал среднее арифметическое.
Оказалось, что все 6 программ (на разных языках) справились с расчётом практически за одно и то же время — за 46 секунд (на другом компьютере конкретная цифра будет другая). Разница между самым быстрым и самым медленным языком не превышает полпроцента.
Если тестировать производительность на другом алгоритме (например где обработка текста), я думаю, разница между языками тоже будет небольшой. Получается, что все компиляторы производят хорошо оптимизированный код и разница между ними несущественная.
Вот результаты на моём компьютере времени подсчёта количества простых чисел в диапазоне от 2 до 500000 в секундах. Чем меньше значение — тем лучше:
Ada — 46.31405
C++ — 46.31438
Free Pascal — 46.3195
Rust — 46.3232
Java — 46.3939
Go — 46.5212
Исходный текст программ — в архиве в прикреплении к сообщению.
Однако, всё же видно, что новые языки (Java, Go, Rust) немного медленнее «старичков» C/C++, Pascal и Ada.
Вот такой алгоритм расчёта:
На языке Free Pascal:
компилировать командой
fpc -O3 -Mobjfpc primes.pas
{ License: Public domain. }
program Primes;
uses sysutils;
var
n, cnt, i, d : int64;
start_tm, stop_tm : TDateTime;
start_ms, stop_ms : comp;
dur : double;
begin
writeln( 'Подсчёт количества простых чисел в диапазоне от 2 до n.' );
write( 'Введите целое число n >= 2 : ' );
readln( n );
start_tm := Now;
cnt := 0 ;
i := 2;
while i <= n
do
begin
d := 2;
while (i mod d ) <> 0
do
begin
inc(d);
end;
if d = i
then
begin
inc(cnt);
//writeln( d );
end;
inc(i);
end;
stop_tm := Now;
start_ms := TimeStampToMSecs( DateTimeToTimeStamp( start_tm ) );
stop_ms := TimeStampToMSecs( DateTimeToTimeStamp( stop_tm ) );
dur := double( stop_ms - start_ms ) * 1.0e-3;
writeln( 'Всего простых чисел: ', cnt );
writeln( 'Продолжительность расчёта: ', dur:10:3, ' секунд.' );
end.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)