Скорость языков программирования (исследование от Google)

Скорость языков программирования достаточно актуальная тема для обсуждения). Как-то писал магистерскую по языку Scala (на заказ), и там пришлось приводить статистические данные по скорости компиляции/исполнения некоторых языков программирования.

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

Ссылка на результаты тестирования

Результаты тестирования компанией Google проводились на анализ качества оптимизации циклов в реализациях языков C++, Java, Go и Scala.

В плане производительности и потребления памяти без сомнения лидирует C++, но есть одно НО. В отчете говорится что это было достигнуто за счет оптимизаций компилятора, которые юзают в основном профи. Ясно одно, если уж удалось за счет настроек компилятора вывести язык в первое место значит язык может это делать.

Java в данном случае показался себя как наиболее простой для реализации кода, однако следует учитывать что используется Java VM и сборщик мусор. Это несомненно затрудняет  объективный анализ производительности, но простота реализации это очень замечательно)

Примечание: далее в таблицах признак Pro дополнительные возможные оптимизации

Оценка числа строк кода, для реализации поставленной задачи (коэффициент, относительно Scala):

Коэффициент Язык Количество
0.5x Scala Pro 297 строк
1.0x Scala 658 строк
1.2x Go Pro 786 строк
1.3x C++ Dbg/Opt 850 строк
1.4x Go 902 строки
1.6x Java 1068 строк
1.9x Java Pro 1240 строк


Размер бинарных файлов, после сборки (коэффициенты относительно размера JAR):

Коэффициент Язык Количество (байт)
1.0 Java 13215
1.6 Java Pro 21047
2.8 Scala Pro 36863
3.1 C++ Opt 41507
3.6 Scala 48183
45 C++ Dbg 592882
92 Go Pro 1212100
94 Go 1249101

 

Потребление памяти (относительно реализации на языке C++):

Коэффициент Язык Количество (мб)
1 C++ Opt virt 184 real 163
2.6 C++ Dbg virt 474 real 452
6 Java virt 1109 real 617
6 Scala virt 1111 real 293
90 Go virt 16588.8 real 501

 

Время компиляции (коэффициент относительно языка Go):

Коэффициент Язык Количество (секунд)
1.0 Go Pro 0.6
2.0 Go 1.2
5.0 C++ Opt 3.0
5.0 Java Pro 3.0
5.2 Java 3.1
6.3 Scala fsc 3.8
6.5 C++ Dbg 3.9
5.8 Scala Pro fsc 3.5
18.8 Scala Pro scalac 11.3
23.1 Scala scalac 13.9


Производительность (коэффициент относительно оптимизированного варианта на С++):

Коэффициент Язык Количество (секунды)
1.0 C++ Opt 23
2.5 Scala low-level GC 58
2.9 Scala low-level 67
3.6 Scala 82
3.7 Java 32-bit SPEC GC 89
4.6 Java 32-bit GC 106
5.5 Go Pro 126
5.8 Java 64-bit 134
7.0 Go 6g 161
8.6 C++ Dbg 197
12.6 Java 32-bit 290

В общем то результаты был и для многих очевидны, однако все-равно разразились споры.

Трудно объективно охватить (или невозможно??) широкий круг задач и оценить скорость языков программирования. Взять к примеру тот же Java, код переносится с платформы на платформу без особого труда, а с C++ уже так не получится. Однако C++ безусловно будет быстрее, но Java кроссплатформенно, что выбрать? Что лучше? Ответ может дать только четко поставленная задача, каждый язык программирования хорош для конкретных ситуаций для которых он разрабатывался. Поэтому однозначного ответа что лучше нет, все зависит от ситуации))

Поделиться:

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

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

*

*

code