LINUX.ORG.RU
ФорумTalks

Сравнение эффективности 20 языков программирования

 , , , ,


0

2

[Ъ] Наиболее высокую производительность показала реализация тестовых приложений на языке Си (clang). На втором месте оказался язык Zig, на третьем Nim, на четвёртом Mojo. Далее примерно на одном уровне следуют D, Java и Rust, а после них Go, Crystal и V.

Относительно хорошие результаты также показали Node.js, Dart, Jua и C#. Хорошие результаты у Java и C# объясняются использованием отдельной стадии JIT-компиляции, в то время как в Dart, Bun, Node.js, Julia, LuaJIT, PHP, PyPy и Ruby3 (YJIT) JIT-компиляция выполняется на лету и затрагивает только часто выполняемый код. JavaScript-платформа Bun заметно обогнала Node.js. Относительно медленными оказались результаты у Julia и Swift. Наихудшие показатели производительности продемнострировали PHP, Ruby, Perl и CPython, при этом производительность PHP оказалась примерно в 4 раза выше, чем CPython.

[/Ъ]

Вызывается пояснительная бригада: чому php, swift, rust и сsharp so slow. Чому питон такая маргинальщина?

[!Ъ]https://www.opennet.ru/opennews/art.shtml?num=60384[/!Ъ]

★★★★★

Ответ на: комментарий от Obezyan

победителем будет какой-нибудь NVidia Cuda C диалект

Из процессора под 600 евро можно выжать уже где-то 1 TFLOPS FP64. С CUDA придётся выложить 2000 евро, да и удобство пострадает. С OpenCL и AMD GPU должно выйти раза в 2 дешевле чем на процессоре.

gag ★★★★★
()
Ответ на: комментарий от no-such-file

На сайте pypy говорится что pypy в среднем в 4.8 раз быстрее обычного питона.

Это больше похоже на правду. У ребят из стартового сообщения получается, разница где-то в 20 раз. Как-то уж сильно не бьётся.

Kogrom
()
Ответ на: комментарий от Ivan_qrt

Чем она странная перед любыми другими, кроме того, что тебе не нравится? Ну да, ребятки отбоянились в результате.
И ещё, питон не для вычислений, питон — клей к либам для вычислений. Не было бы биндингов к либам в питоне, никто бы его не использовал для вычислений. Но, это слишком сложно для понимания.

imul ★★★★★
()
Ответ на: комментарий от gag

В тесте не указано ни цены ни оборудование, а только скорость перемножения матриц.

Понятно что они тестили на CPU, но это все клюква, они не указали использовали ли они AVX инструкции и какие, какие параметры компиляторов в компилируемом языках, использовалось ли кеширование опкодов в интерпретируемых языках типа php и прочие оптимизации выполнения.

Obezyan
()
Ответ на: комментарий от naushniki

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

Сильное утверждение, жаль только что пруфов не будет)

goingUp ★★★★★
()
Ответ на: комментарий от Kogrom

У ребят из стартового сообщения получается, разница где-то в 20 раз. Как-то уж сильно не бьётся.

Там непонятно, как вообще это запускали, какая версия и т.д. Может pypy как-то оптимизирует цикл, там вроде бы какую-то векторизацию запилили недавно. Явно какой-то частный случай. Такое вот тестирование.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Об этом речь, это тестирование скорости языков настроенных по-умолчанию, ценность таких тестов не просто нулевая, а отрицательная т.к. потом эти тесты используются в качестве аргументов.

Obezyan
()
Ответ на: комментарий от imul

Чем она странная перед любыми другими

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

И ещё, питон не для вычислений, питон — клей к либам для вычислений.

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

Не было бы биндингов к либам в питоне

Их бы написали. Что, собственно, и произошло.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от imul

Аргументация

Ну уж какая есть. Я понял, что тебе мои аргументы не нравятся. Это как бы твои проблемы.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

А некоторые реализации на ЛИСПе банили за вычисления во время компиляции, ЛОЛ.

Можно пруфы? Я помню, что там решение Царя не только не приняли, а ещё и из-за него решили поменять правила и снести другие решения.

А по benchmarksgame сейчас SBCL самый медленный из всех реализаций всех языков вообще (других лиспов там нету).

shdown
()
Последнее исправление: shdown (всего исправлений: 1)
LangPlatform/Compilernqueenmatmulsudoku
PythonPyPy 7.3.146.914.958.82
Node-JSNode 21.5.03.732.883.77
JavaOpenJDK 20.0.13.921.143.20
C#.NET 8.0.1003.004.673.01
GOGo 1.21.52.941.632.04
RustRust 1.75.02.680.561.65
CClang 15.0.02.700.541.54

https://github.com/attractivechaos/plb2#appendix-timing-on-apple-m1-macbook-pro

Далее примерно на одном уровне следуют D, Java и Rust, а после них Go, Crystal и V.

Лол

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от Ygor

да, за compile-time решение банили

и вообще всем лень там лисп тюнить

IRL в лиспах есть и ассемблеры и куча возможностей оптимизации, и они любой мейнстримный язык порвут кроме сишечки

lovesan ★★
()
Ответ на: комментарий от EXL

Даже если сам Zig не взлетит, его инструментарий вроде компиляторов C/C++ уже используется в различных проектах.

Вот уж действительно — как вы лодку назовёте, так она и поплывёт. Не успели окрестить язык Zig-ом, как он тут же начал расширять своё жизненное пространство.

Smacker ★★★★★
()
Ответ на: комментарий от EXL

По умолчанию PHP не использует JIT в CLI:

/usr/bin/time -f %U php nqueen.php
2279184
32.56

если его включить, то будет так:

/usr/bin/time -f %U php8.3 -d opcache.enable_cli=1 -d opcache.jit=1255 -d opcache.jit_hot_loop=1 -dopcache.jit_buffer_size=8M nqueen.php
2279184
6.46

issue про opcache уже есть в репозитории.

NeOlip ★★
()
Ответ на: комментарий от Kogrom

У PHP уже есть JIT, а у Питона - нет. И при этом PHP только в 4 раза быстрее.

В тесте у PHP результаты без JIT. Если его включить, то будет примерно в 5 раз быстрее.

NeOlip ★★
()

А ведро на чем написано?

anc ★★★★★
()
Ответ на: комментарий от NeOlip

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

Кроме того, у Питона и PHP разные подходы к переполнению int-ов. У Питона int-ы не переполняются пока памяти хватит. У PHP они преобразуются во float. Из документации:

var_dump(0x7fffffffffffffff);                // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1);            // float(9.2233720368548E+18)
var_dump((int)(0x7fffffffffffffff + 1));     // int(-9223372036854775808)   <-----
var_dump(0x7fffffffffffffff + 1 > 0);        // bool(true)
var_dump((int)(0x7fffffffffffffff + 1) > 0); // bool(false)                 <-----
var_dump((int)'9223372036854775807');        // int(9223372036854775807)
var_dump(9223372036854775808);               // float(9.2233720368548E+18)
var_dump((int)'9223372036854775808');        // int(9223372036854775807)
var_dump((int)9223372036854775808);          // int(-9223372036854775808)   <-----

Да, так быстрее, но могут быть проблемы.

Kogrom
()

сsharp so slow

csharp же как и mono говно было есть и будут

олсо, было же уже
надо alienclaster звать

Karapuz ★★★★★
()
Ответ на: комментарий от FishHook

тут ведь сравнение языков а не SQL-движков. лет 10 назад было в моде перетаскивать сайты на всякие redisы и nosql хранилища

Karapuz ★★★★★
()
Ответ на: комментарий от goingUp

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

Сильное утверждение, жаль только что пруфов не будет)

Пруф - жизнь. Попроси любого скриптовебщика сделать что-то отличное от CRUD. Обосрется в 100% случаев. Особо одаренные еще будут доказывать, что ТЗ плохое и что по его опыту он все сделал на отлично, а заказчик дурак.

naushniki
()
Ответ на: комментарий от imul

Я не про конфиг, я про работу с базой из кода. Можно сделать 1 запрос, а можно 21. Во втором случае какой там был язык становится уже пофиг

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Можно сделать 21 запрос и отдадут за милисекунды из кеша, можно сделать 1 запрос, который будет мусолиться час.

imul ★★★★★
()
Ответ на: комментарий от imul

Можно сделать 21 запрос и отдадут за милисекунды из кеша

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

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Даже если база в том же цоде в той же стойке это десятки мс, сделал 10-20 запросов - сотни мс.

В современных сетях задержки на порядок(а то и не на один) ниже. Раз зашёл разговор про отдельную стойку в ДЦ, то ни о каких десятках мс уже речи быть не может.

NeOlip ★★
()
Ответ на: комментарий от EXL

Когда стоял вопрос про написание некоторого софта под астру, выбирали старый питон, го или ним, я остановился на последнем, но в итоге переписав легаси код с питона на ним, собрал это дело под старым дебианом, отработав 2 года, сказали переписать на раст (

sol13 ★★★★★
()

Смысл и цель этого «сравнения» – вывалить «завлекающий пост» (с).
Цель достигнута.

Для остальных это просто повод и возможность пообзывать друг друга клоунами.

frob ★★★★★
()
Ответ на: комментарий от NeOlip

Одна стойка != отдельная стойка, соседей никто не отменял.

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

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

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

«тонна сетевых запросов» кладет целые ДЦ/города. И пофиг что там под капотом в этом ДЦ/городе :)

anc ★★★★★
()
Ответ на: комментарий от anc

Тонна не в плане ddos, а в плане «кто-то решил что select x limit 1 в цикле это окуенная идея». В итоге вместо одного похода за N записями делается N round-trip.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

а в плане «кто-то решил что select x limit 1 в цикле это окуенная идея».

Сильно! Мне тоже бездумный limit, когда его изобрели, очень «понравился» в исполнениях. Но описанного вами «подхода» не встречал. Это тянет на «премию».

ЗЫ Не могу не спросить, там случайно все не в отдельных транзакциях было? Ванга подсказывает что да. :)

anc ★★★★★
()
Ответ на: комментарий от anc

Там монга вообще (findOne), перевёл в sql просто потому что с ним тут больше знакомы. Не, там суть что абсолютно все действия всех сервисов (да-да, сервисов, через grpc и сеточку) были сделаны для одного объекта. А когда надо было много - делали цикл. Прям между сервисами, прям в базу, иногда даже кольцами (а вызывает б, б вызывает в, в вызывает а).

Как это чудо работает когда надо удалить 100+ записей думаю можно не рассказывать, там тупо 95% времени уходило на сеть, и там что питон, что сишка, хоть асм - уже пофиг. Почти все выпилил, но кое-где ещё осталось.

П.с. премии к сожалению не будет т.к. аффтар сего креатиффа уже не работает в компании лет 6.

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

премии к сожалению не будет т.к. аффтар сего креатиффа уже не работает в компании лет 6.

Я про «афтар убей себя ап стену» ака премия дарвина.

anc ★★★★★
()
Ответ на: комментарий от upcFrost

Даже в пределах ЦОД RTT стабильно больше 1 мс — это уже многовато. Я и не пытался спорить с тем, что большое количество запросов может угробить производительность (и вообще не пытался с чем-то спорить), просто обратил внимание, что «большое» в современных реалиях немного подросло.

NeOlip ★★
()
Ответ на: комментарий от NeOlip

Ну как многовато: шумный сосед (машина общая) - плюс мс. Докер разродился - плюс мс. Тред ждёт свой звёздный час - плюс мс. База рожает соседний запрос - ещё плюс мс.

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

upcFrost ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)