хуйу нас не матерятся
А захотелось мне протестировать, на сколько отличается скорость работы этих языков программирования. В их чистом виде, по самой простейшей задаче. Для этого создал новую, чистую виртуалку, и установил lua 5.3.3, luajit 2.0.4, nodejs 8.6, python 3.5 и php7.0.
Всё, кроме ноды, ставил из стандартных репозиториев. Ставил так, как ставило бы 99% людей, без излюбонов со сборкой из сорцов.
Просто много раз пересоздаём массив и добавляем в него овер 9999 элементов. Исходники:
$start = microtime(true);
for($raund=0; $raund<1000; $raund++) {
$arr = [];
for($aLength=0; $aLength<1000000; $aLength++) {
$arr[] = 1;
}
}
$timeSpent = microtime(true) - $start;
echo "Time spent: " . $timeSpent . "\n";
import time
start = time.time()
for raund in range(0, 1000):
myList = []
for aLength in range(0, 1000000):
myList.append(1)
timeSpent = time.time() - start
print("Time spent: ", timeSpent)
let start = new Date();
for(let raund=0; raund<1000; raund++) {
let arr = [];
for(let aLength=0; aLength<1000000; aLength++) {
arr.push(1);
}
}
let end = new Date();
let timeSpent = end - start;
console.log('Time spent:', timeSpent);
local tstart = os.time()
for raund=1,1000 do
arr = {}
for aLength=1,1000000 do
table.insert(arr, 1)
end
end
local timeSpent = os.time() - tstart
print("Time spent: " .. timeSpent .. "\n");
Господин Анон, в комментах предложил лучший код для луа:
local tstart = os.time()
for raund=1,1000 do
local arr = {}
local i = 0
for aLength=1,1000000 do
i = i + 1
arr[i] = 1
end
end
local timeSpent = os.time() - tstart
print("Time spent: " .. timeSpent .. "\n");
Время выполнения скрипта, в секундах.
nodejs 8.6.0 | php 7.0 | luajit 2.0.4 | python 3.5 | lua 5.3.3 |
---|---|---|---|---|
24.621 | 55.76 | 84 10 | 125.2 | 181 33 |
В итоге, nodejs наголову разбил всех. php как ни странно на втором месте, про python промолчим. А вот lua стал неожиданно тормозным, даже jit компиляция ему не помогает.
С новым тестом для луа, уже не всё так однозначно, нода отстаёт только от luajit, а с простолуа результат почти одинаковый.
Не, Igr, челендж не в том чтобы запихнуть именно кучу едениц. Вместо единицы должны быть какие-то рандомные данные. Но чтобы не мерить скорость рандомгенератора, я пихаю всегда 1.
это понятно, вопрос в преалокации. сделайте [None]*1000000 и заполняйте чем хотите. тоже самое и на C++ vector оптимизация. Я это к тому - что вы меняете производительность менеджера памяти вместо рандом генератора для абстрактного случая hello world, которым в продакшене не особо пользуются. Про питоновский list вроде даже в документации написано про не самую лучшую производительность как плату за универсальность.
это как бы вопрос к синтетике - в предложенном вами случае победил определенный вариант имплементации
Это да, синтетика- она ещё та синтетика. Но всё же, да, я так и хотел посмотреть как каждый язык справится с этой задачей, без предварительной оптимизации разработчиками.
https://pastecode.io/s/naw97zny
Python <br>И запускаем ДВАЖДЫ (для кеш-прогрева). Результат будет в 6 раз быстрее.<br>Вместо 125 секунд получите ~20 секунд.
А если таки корректный код на Lua затестить?
for raund=1,1000 do local arr = {} local i = 0 for aLength=1,1000000 do i = i + 1 arr[ i ] = 1 end end