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[/!Ъ]

★★★★★

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

cocucka_B_TECTE
()

Я уже спрашивал на этом форуме, но спрошу еще раз, потому что в прошлый раз я не получил внятного ответа. Допустим, мы пишем веб-сайт. Написали его на языке Super. Отпрофилировали и видим, что 0.0002 секунды программа парсит запрос, 0.0001 секунду она готовит запрос к БД, 0.1 секунду она ждет ответа от БД, дальше тратит 0.0001 секунду на формирование HTTP Response, на этом цикл запроса выходит за рамки программы. И того программе понадобилось 0.1004 секунды на ответ. Потом мы переписали программу на языке Awful. Этот язык в 10 раз медленнее чем Super. Отпрофилировали программу и да, она действительно стала медленнее работать - 0.002 на пасинг, плюс 0.001 и еще раз 0.001 и того ответ мы получили через 0.104 вместо 0.1004. Собственно вопрос: ну и как бы что?

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

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

EXL ★★★★★
()

Если верить графикам, то на первом месте Zig, а не Си. По крайней мере, в некоторых тестах опережает.

PHP оказалась примерно в 4 раза выше, чем CPython

Раньше я бы сказал, что дело в потоках, в классах на словарях и в списках вместо массивов. Но сейчас я почти уверен, что питон проиграет и на простых формулах, типа факториала или чисел Фибоначчи. Есть у меня определённые опыты. Не знаю с чем это связано.

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

Собственно вопрос: ну и как бы что?

Кабанчик объявил «чёрную» пятницу, сайт перестал работать, тебя сегодня уволили, а завтра коллекторы разукрашивают твой подъезд.

Ygor ★★★★★
() автор топика

Относительно хорошие результаты также показали Node.js, Dart

В этих тестах используются типизированные массивы, т.е. голые анбокснутые числа. Если в тесте matmul заменить типизированный массив на обычный, то нода на моей машине отрабатывает за 19 секунд, а пых за 14. Это всё что нужно знать о качестве этого тестирования и выводах про эффективность.

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

Собственно вопрос: ну и как бы что?

Все так, вот поэтому веб и пишется на скриптоте, а не на сишечке.

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

Если в тесте matmul заменить типизированный массив на обычный, то нода на моей машине отрабатывает за 19 секунд, а пых за 14.

А PHP позволяет разтипизировать массивы так, чтобы там были голые анбокснутые числа и обогнать Node.js, например? Или там type hints тоже убогая нашлёпка сбоку как в каком-нибудь Python?

А то ты ухудшил код нодовского бенчмарка и рад что пых что-то там смог обогнать. Ты, напротив, улучши пыхолапшу, чтобы она смогла потягаться с JavaScript, вот тогда и можно будет делать выводы о качестве и эффективности тестирования.

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

Все так, вот поэтому веб и пишется на скриптоте, а не на сишечке.

именно поэтому сравнивать языки по какой-то абстрактной производительности, это как сравнивать овощи по размеру. Ну да, тыква самая большая, но это не значит, что те, кто есть огурцы дураки

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

А PHP позволяет разтипизировать массивы

Из коробки не позволяет. А какое это имеет отношение к выводам об эффективности JIT, которое делают авторы теста? Если бы они сказали, что нода и дарт выигрывают в определённых сценариях за счёт наличия типизированных массивов из коробки, то вопросов бы не было.

Пока что создаётся впечатление, что они сами не знают что тестируют. Например, насколько это вообще важно, что такие анбокснутые массивы есть из коробки? В реальном использовании достаточно, чтобы они были доступны вообще. А они разумеется доступны, в разных вариациях: от просто типизированных массивов, до умножения матриц через blas/linpack и т.п. В том же питоне, например никто не умножает матрицы тупо в лоб через массивы, для этого есть numpy.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от novus

Паскаля боятся что ли?

Его @R00T закопал ещё во времена РФВС, недаром же он за луговским с лопатой по кладбищу бегал.

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

Не потеснит. Раст кое-как прода(ви)ли исключительно на статьях о его безопасности, нарисовав графики с кривыми затрат на последствия критических багов в бизнес-решениях. В чем фишка zig для бизнеса? Как продать «интересный компилятор»? Никому это не нужно.

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

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

ya-betmen ★★★★★
()

Потому что питон - для человеков, а не для машин.

Ну и если числа, то надо через numpy все делать, в оригинале питон будет пыхтеть с разными float64 там, где нужен int или number(,2)

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

Собственно вопрос: ну и как бы что?

Теперь представь, что твои числа, это цена запроса в рублях. Посчитай затраты на свой сайт за год.

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

Дураки это те, кто меряет IO в тестах производительности. Это ответ на твой изначальный вопрос в цепочке.

Никого не волнуют лабы, 99% времени ждущие IO, а оставшиеся 1% перекладывающие жсоны.

Siborgium ★★★★★
()

Сравнивать числодробилки без фортрана как-то неполно что ли.

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

дальше тратит 0.0001 секунду на формирование HTTP Response

а если таки нет, и Super набивает данными шаблон или сериализует полученные из бд килобайты в жсон/хмл за 0.09 секунд?

arkhnchul ★★
()
Последнее исправление: arkhnchul (всего исправлений: 1)

Почитал комментарии на опеннете под статьёй. Там что, скучковались все, кого на лоре забанили?

imul ★★★★★
()

print(nq_solve(n))

тут как бы, no comments

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

Комментарии на опеннет – помойка из клоунов и идиотов.

Вот да, тоже замечал подобное: Что же случилось с OpenNET'ом?

И про ЛОР ещё говорят мол это самый токсичный форум в Рунете. Да тут хотя бы есть очень интересные технические обсуждения, какие-то pet-проекты пользователей за которыми интересно следить.

На OpenNET’е же публика вообще полностью мало того что отбитая и ограниченная, так ещё и ничего не создаёт по части контента.

EXL ★★★★★
()

Если хочешь ответить на вопрос почему такой разброс - изучи код бенчей вот тут https://benchmarksgame-team.pages.debian.net/benchmarksgame/

Для языков, где активное комьюнити, реализация решения одних и тех же задач может значительно отличаться от ЯП к ЯП.

По твоей же ссылке, если зайти на шитхаб, какая-то детская поделка, практически не учитывающая особенности реализации ЯП (да, есть минимальные отличия). А в таких задачах, на числодробилки, может, например, сильно влиять - подхватил ли язык SSE или нет.

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

PS https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html

Вот отличный пример. Топовая реализация на шарпах - 2 сек, прямое использование SSE. Шарпы #9 (чуть быстрее Java версии) - реализация в лоб. Разница в производительность x5.

PSS Осознал, что в бенче случай еще более экзотический - arm64-darwin. Те в числодробилках тестим наличие оптимизации под ARM Neon (или что там является актуальным аналогом SSE) при наивной реализации алгоритмов?

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

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fannkuchredux-java-1.html

Плюс минус такой же велосипед что и у афтора из шапки. А тут вообще помоему состояние гонок.


int nthreads = Runtime.getRuntime().availableProcessors();
        Thread[] threads = new Thread[nthreads];
        for ( int i=0; i<nthreads; ++i ) {
            threads[i] = new Thread( new fannkuchredux() );
            threads[i].start();
        }
        for ( Thread t : threads ) {
            try {
                t.join();
            }
            catch ( InterruptedException e ) {}
        }
Ygor ★★★★★
() автор топика
Ответ на: комментарий от Siborgium

Комментарии на опеннет – помойка из клоунов и идиотов.

А мне нравится тамошние срачи читать. Весело.

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

Теперь представь, что твои числа, это цена запроса в рублях. Посчитай затраты на свой сайт за год.

Если ты думаешь, что цена затрат на поддержку сайта формируются исключительно из затрат на железо, ну… подумай еще раз.

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

мы получили через 0.104 вместо 0.1004 ну и как бы что?

А ты дальше подумай. Что если это не твой пэт проект, а веб-сайт с миллионами юзеров в час? Я не буду уже приводит примеры того, что на твоём ЯП Awful очень низкая квалификация разрабов. И твои 10 раз медленее, они ещё уменьшат на порядок или два порядка. Примеров полно.

0.1 секунду она ждет ответа от БД

Это в твоём пэт проекте. В хайлоде всё в кешах лежит.

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

афтырь применяет методы оптимизации sse

афтырь применяет потокобезопасную коллекцию.

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

Разница в производительность x5.

Pepeclown

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

Java и C# объясняются использованием отдельной стадии JIT-компиляции

В джаве бинарь можно собирать с биндингами к Си структурам. Поэтому производительность не должна отличаться от крестов. На какой хоть JVM тестили и с какими опциями?

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