Сравнение производительности: Java Script vs компилируемые языки

Периодически, беседуя при найме с кандидатами, а также коллегами, слышу высказывания плохого мнения о Java Script от «бывалых» программистов, привыкших писать на C++, Java, C#, Delphi. В дискуссиях на тему «JS — это вообще не язык» я не участвую, но когда заходит речь про эффективность, производительность, скорость разработки — я люблю послушать и высказаться.
Я часто привожу такой тезис — несмотря на все недостатки Java Script, сейчас это уже довольно мощный и многоцелевой инструмент, одним из важнейший достоинств которого для бизнеса является существенно более высокая скорость разработки. То есть написать код и решить задачу на JS часто бывает намного быстрее, чем на «нормальном» языке и результат получается вполне удовлетворительным. В качестве контр-аргумента мне часто приводят низкую производительность кода на Java Script.

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

Я решил взять какой-нибудь простой алгоритм с целочисленной арифметикой и реализовать его на нескольких языках максимально идентично.

Я выбрал задачу генерирования последовательности простых чисел. Вот так выглядит реализация на С:

#include "stdafx.h" #include <cstdio> #include <ctime>  int main() { 	int Max = 500000; 	int nums[100000]; //100 тыщ 	nums[0] = 2; 	int j = 1;  	clock_t t; 	t = clock();  	for (int cur = 3; cur < Max; cur += 2) { 		int half = cur / 2; 		bool isPrime = true; 		for (int i = 0; nums[i] <= half; i++) { 			if ((cur % nums[i]) == 0) { 				isPrime = false; 				break; 			} 		}  		if (isPrime) { 			nums[j] = cur; 			j++; 		} 	}  	t = clock() - t; 	printf("Time to gen %d primes (up to 500 000) : %f seconds.\n", j, ((double)t) / CLOCKS_PER_SEC);      return 0; } 

Также я реализовал этот алгоритм на C#, Delphi и Java Script полностью идентично, насколько это возможно. Я использую Windows 10, поэтому использовались следующие инструменты:

для С — компилятор из Visual Studio 2019 Community
для C# — .NET Core SDK 2.2.300
для Delphi — Delphi XE Win32 (2010 года)
для JS — Node.js v. 10.16

Выполнение вычислений из приведенной выше программки на С заняло на моем компьютере 1,2 секунды. Это лучший результат из 4-х языков, которые я сравнивал.
Как вы думаете, в каком порядке выстроились остальные языки по увеличению времени работы и уменьшению производительности соответственно? Какой язык оказался самым медленным? Насколько сильный разрыв между между результатами других языков?

Через несколько дней я дополню статью результатами, а пока предлагаю проголосовать и написать свое мнение в комментариях.

FavoriteLoadingДобавить в избранное
Posted in Без рубрики

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *