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

★★★★★

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

Нет в жаве вызовов native.

На какой хоть JVM тестили

Вангую какая в маке есть на такой и тестили.

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

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

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

Спецотряду и здесь хорошо. Сомневаюсь.

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

Он и пять лет назад был таким же. Я думал что-то поменялось. Теперь ещё лет пять там ниже текста статьи не полезу. Хотя, я конечно оптимист.

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

эни питухон сейчас спитухон, вот и думай. пеп8 помнит о тебе, сучка крашена.

etwrq ★★★★★
()

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

Поизучал вопрос. Ответ оказался прямо в стартовом сообщении. У PHP уже есть JIT, а у Питона - нет. И при этом PHP только в 4 раза быстрее. Для PHP это даже как-то позорно, учитывая скорость других языков с JIT (pypy, например).

Но вопросы всё равно остались. Я писал простенький интерпретатор, который без всякого JIT-a обгонял Питон в 4-7 раз на примитивных тестах. И при том я всякие проверки на переполнения и деления на ноль делал. Конечно, у Питона стековая машина, а у меня была что-то вроде регистровой, но это не должно давать такой разницы, теоретически.

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

очень низкая квалификация разрабов.

веб-сайт с миллионами юзеров в час

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

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

Вангую какая в маке есть на такой и тестили.

Там ещё и Apple M1 MacBook Pro Ну, т.е. он потестил кто уже оптимизировал под этот проц компиляторы.

foror ★★★★★
()

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

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

А что там не так? Ты реально думаешь, что в вебе есть соответствие «нагрузка - квалификация»? Не, это совсем не так. И инструмент выбирают обычно не подходящий, а (как правило) тот, который осилили в команде, которой досталась задача. А для подбора исполнителей на задачи квалификация последнее (тут каюсь конечно, опят есть только в этой стране, как там за пределами не очень в курсе) на что обращают внимание. Законы Мерфи никуда не делись и работают прекрасно.

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

Лол, как бы мне не было от подобного больно, но ты прав. Базы — боль головная. Может в очень крупных проектах и нанимают кого-то, кто умеет. Но, как правило «далее -> далее -> далее» и на этом вся работа с БД закончилась. Дефолтный конфиг больше никто не трогает.

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

Pepeclown

Читать учили перед тем как отвечать?

Разжую.

Пойнт исходной статьи - давайте сравним компиляторы на реализации в лоб.

Критика - в разных ЯП принято по разному работать с хардварными оптимизациями. Где-то это просто вынесено в либу. Итог может быть - х5 производительности. В том же python, 100%, для математики не используется python код, только либы (NumPy - читай биндинги к Си со всеми возможными железными оптимизациями), а сам язык не заточен под решение подобных задач.

Вопрос - какой смысл в подобных измерениях? На сколько высокоуровневый код отстает в математических вычислениях? Так его и не нужно использовать так.

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

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

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

Критикуя — предлагай. Перепиши тесты, лдап, если такой умный. А вот это «какой смысл в подобных измерениях» даже я умею. Опровергни фактами. Какой смысл в пафосном визге? Пока есть то, что есть.

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

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

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

Я там потыкался, но там какие-то числа никак не относящиеся к теме. По сабжевым тестам есть что-то конкретно? Или так, надо самому переписывать и смотреть только потому что ты какую-то ссылку дал?

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

Там сравнение ЯП на основе типовых задач, эксплуатирующих ту или иную вычислительную сложность (проц, память, эффективность структур данных). Например, spectral-norm - частая задача в обработке изображений, binary-trees - тут понятно, соревнуются в доступе к памяти + эффективности GC на языках с ним.

Посмотреть можно тут: https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/binarytrees.html#binarytrees

По исходному тесту - сравнивать наивную реализацию умножения матриц это вообще смех. Оно есть в куче специальных либ, например в IMKL (Intel Math Kernel Library). И просто заменив реализацию BLAS в OpenCV на IMKL можно получить +20-30% производительности под свежие от Intel (у меня был такой случай в реальной практике). Так что как интерпретировать умножение матриц в исходном тесте - хз, я бы никак не интерпретировал вообще.

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

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

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

А если не исключительно, то можно и не считать что ли?

Если не исключительно, то не надо заниматься ерундой и писать веб-сайты на ассемблере

FishHook
()

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

Исправил 4.2 в заголовке

buddhist ★★★★★
()

На опннете какая-то фигня.

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

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

Ну и по поводу сравнения zig, rust и сишечки.

Labelnqueenmamul
c:clang+2.700.54
rust+2.680.56
zig+2.740.56

Покажите пальцем, где тут тормознутость Rust?

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

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

не надо заниматься ерундой и писать веб-сайты на ассемблере

Разрешаю, не пиши.

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

На опннете какая-то фигня.

Там не фигня. Там устарело. Автор на юкомбинаторе обсуждение ведёт и получил замечание:

The rust code is very unidiomatic, not only because of the Vec of Vecs which I’d say, even if it’s the obvious naive approach, no one experienced wouldn’t choose over a flat slice, the implementation itself is very naive and unidiomatic.

Zig had a similar issue which I made an MR to fix. I didn’t actually notice Rust had the same issue but that’s probably just my forgotten knowledge with how the vec! macros expand when nested.

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

Что именно ты мне пытаешься объяснить такого, чего я сам не знаю?

Понятия не имею что ты знаешь, а что нет. Ты спросил как смотреть в бенчи по моей ссылке - я ответил.

Я всё-таки надеюсь, что ты понимаешь, что сравнение языковых средств всё-таки предполагает именно языковые средства.

ИМХО: Там в тестах сравнение из разряда ока, камаз и трактор беларусь - кто быстрее сажает картошку.

Пример - В исходных тестах сравнивается математика на Си и Python, в лоб. Отлично, только вот в Python, из коробки у нас arbitrary-precision arithmetic (BigInt те).

Закономерный итог - Python на графике в заднице, хотя, фактически, никакого реального сравнения нет, потому что нам дают разные инструменты для разных задач.

Вопрос - мы что сравниваем в итоге? Работу либы математики поверх математики зашитой в камень? Оверхед GMP (вроде она в Python юзается) в Python над Си? Вроде оба варианта не подходят.


Поясню, какой тест я бы рассматривал как релевантный.

  1. Есть набор задачек
  2. Есть набор ЯП
  3. Есть железка, у нее есть набор железных фич определяющих теоретическую максимальную производительность
  4. Для каждого из ЯП пишется тест учитывающий нюансы работы с железными фичами
  5. Делаются тесты, а результаты группируются исходя из реально задействованных фич. Тесты очищаются от константных накладных расходов (время загрузки или прогрева кеша GC, потому что в реальных задачах ими можно пренебречь).

На выходе получаем сравнение, где видно

  1. Какой оверхед над одинаковым железом дает язык
  2. На сколько удобно/не удобно работать из каждого ЯП с выбранным набором фичей
Norgat ★★★★★
()
Ответ на: комментарий от Norgat

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

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

В тесте разве упор на сравнении железа?

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

ИМХО, сравнивать нужно работу идентичных алгоритмов на идентичном железе, тогда из теста будет видно, сколько и чем мы платим за удобство языка (или не платим).

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

Смысл же таких сравнений простой - выбор инструмента для решения какой-либо задачи. Где-то это будет Си, а где-то PHP. Вот только сравнение должно быть корректным.

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

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

при этом PHP только в 4 раза быстрее. Для PHP это даже как-то позорно, учитывая скорость других языков с JIT (pypy, например).

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

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

ИМХО, сравнивать нужно работу идентичных алгоритмов на идентичном железе, тогда из теста будет видно, сколько и чем мы платим за удобство языка (или не платим).

Взять самый простой алгоритм - «Решето Эростофена» и попробовать сгенерироать десять миллионов простых чисел.
Сразу всё «выявится».

Код для этого алгоритма в inet имеется для любого ЯП.
Вот только оптимален ли он?

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

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

Programming Language Benchmark v2 (plb2) evaluates the performance of 20 programming languages on four CPU-intensive tasks. It is a follow-up to plb conducted in 2011. In plb2, all implementations use the same algorithm for each task and their performance bottlenecks do not fall in library functions. We do not intend to compare different algorithms or the quality of the standard libraries in these languages. Plb2 is supposed to demonstrate the performance of a language when you have to implement a new algorithm in the language, which may happen if you can't find the algorithm in existing libraries.

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

PS: я так понял, что ты не ознакомился с условиями эксперимента, но у тебя подгорело от результатов. Так прочитай свою медодичку сначала сам.

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

which may happen if you can’t find the algorithm in existing libraries

Какое-то сферическое в вакууме условие. Для любой новой вычислительной задачи в питоне можно использовать numpy. Numpy уже есть. Ставить условия «а представим что нет» довольно странно, попахивает шизофренией и попыткой подогнать ответ под задачу.

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

PS: я так понял, что ты не ознакомился с условиями эксперимента, но у тебя подгорело от результатов.

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

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

Друг, у тебя пригорает от результата, поэтому ты не нашёл ничего другого как домотаться к стартовым условиям? Так в том и реальность, что на педоне математику считать — полная хрень, что и показано в этом тесте. Поэтому в педоне и используют нумпи.
Что у тебя вызывает такую реакцию? Обида за язычок, который ты осилил? Так код библиотеки на си это и есть си, а не педонокод, смирись, как бы у тебя не полыхало.

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

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

PS: методику авторы хотя бы описали и ввести в заблуждение они могут разве что полных Ъ.

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

Друг, у тебя пригорает от результата

От результата у меня пригорало в той самой benchmarks game, которую тут уже упоминали. А этот «тест» просто смешной.

Так в том и реальность, что на педоне математику считать — полная хрень, что и показано в этом тесте

А это кто-то не знал? Видимо это тест на тему «что будет если джуну дать решать задачу самостоятельно». Но тогда надо было ещё измерять время затраченное на реализацию.

Что у тебя вызывает такую реакцию

Какую такую? Да я считаю, что авторы теста клоуны и сами не знают что они тестируют и зачем. Ну это как бы обычно дело, каких-то особых эмоций не вызывает.

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

А почему они клоуны? Они очертили начальные и граничные условия эксперимента. Результат получили и обнародовали. То, что это очевидно и боян — так какие претензии? Они ничуть не соврали. Возможно выдать какое-то новое знание у них не стояло в целях, так куча тестов такие — ничего нового. Хотя я кое-что новое узнал про NIM. Но, это потому, что никогда им не интересовался.
Но у тебя-то сквозит прямо какая-то обида за педон.

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

Но у тебя-то сквозит прямо какая-то обида за педон.

ЛОЛ, я специально переключился на педон, чтобы мне не прилетали такие вот притензии «ты просто топишь за педон». Я ненавижу педон, что б он сгорел, тут всем про это известно. Но в данном случае авторы теста не правы, т.к. во-первых ставят искусственные условия, а во-вторых даже не могут адекватно интерпретировать свои же результаты. Ну да, я немножко негодую, во имя Луны.

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

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

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

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

Я за тобой не слежу, поэтому не в курсе твоих с педоном отношений. На всякий случай сделаю пометку к твоему нику, чтобы в будущем не ошибиться. Но, почему в диалоге со мной ты переключился на педон? Я же его тоже ненавижу. Впрочем по «педон» можно про это догадаться.
Теперь по теме. Если тебе кажется, что авторы неправы в чём-то, то сделай свои тесты. Какие бы ни были условия, они есть и их надо соблюдать. Почему они такие, вопрос конечно спорный, но я не вижу бегло несоответствия между условиями и результатами, хотя сильно не вникал. В интернет куча тестов всяких. Выбирай те, у которых тебе нравятся начальные условия и анализируй результаты. Людей которые что-то делают в интернет в миллионы раз меньше, чем тех, которые знают как нужно делать. Меня например именно это не устраивает.
Если будешь свои тесты делать, то ты точно также будешь ставить какие-то начальные и граничные условия, которые будешь вынужден соблюдать.

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

Ну да, я немножко негодую, во имя Луны.

Так сделай как дяденька с котиком выше предлагает, только я предлагаю сразу не колупаться с numpy, а пустить бинарик сишный из питона. А остальным языкам написать, как тот дяденька предложил, гонки, блокировки в коде, кто его читает.

А затем с покерфейсом заявить - питон в пять раз быстрее за счет оптимизации.

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

Но, почему в диалоге со мной ты переключился на педон?

Это более эмоционально-нейтральный пример, говорю же.

Если тебе кажется, что авторы неправы в чём-то, то сделай свои тесты

Уже есть тесты на все случаи жизни. Да мне кажется, что данные авторы не правы. Почему я должен молчать по этому поводу, тем более на форуме? Форум не место для дискуссий что ли? Я выражаю свою точку зрения, имею на это полное право.

Людей которые что-то делают в интернет в миллионы раз меньше, чем тех, которые знают как нужно делать. Меня например именно это не устраивает.

Что-то я не уловил смысл.

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

пустить бинарик сишный из питона

Вот в той programmers game почти что до такого и доходило. Там всякие питоны и пыхи рвали по скорости некоторые простые реализации на Си. А некоторые реализации на ЛИСПе банили за вычисления во время компиляции, ЛОЛ.

Кстати вот в этом тесте время компиляции не считается же. Надо им прислать хитрый код на ЛИСПе для прикола.

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

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

Что-то я не уловил смысл.

Возможно даже как не очень умном клоуне.

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

Если ты не понял условий этих тестов, то это не повод называть клоунами авторов

Я-то понял. Даже лучше авторов. Поэтому они и клоуны.

Скорее это говорит больше о тебе, как клоуне

Ой ой, как мне стыдно… (нет).

PS: ты автор что ли? Чёт так за них впрягаешься. Нельзя же нравится всем. Ну не нравится мне их подход, и что? Пойди уже закуси.

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

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

imul ★★★★★
()

А какой смысл в 100500й раз их сравнивать, если ничего принципиально не поменялось? Ради новодела и маргинальщины моджо ним зиг? Да и хрен с ними. Будь они даже чуть быстрее сишки.

seiken ★★★★★
()

чому php, swift, rust и сsharp so slow

тому що вариант тестирования в виде перемножении матриц, а не в том на что язык заточен. В таком варианте победителем будет какой-нибудь NVidia Cuda C диалект который на видеокарте все раскидает.

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

Так в том и реальность, что на педоне математику считать — полная хрень, что и показано в этом тесте

Ну, справедливости ради, это действительно странная постановка условий. Люди делают кучу расчётов на питоне (именно на питоне, ни строчки си кода не пишут) и получают вполне хорошую производительность. Да, под капотом нумпи, но это не важно, это питон-код.

В тесте же есть намеренное ограничение, и по факту получается, что результаты теста этой самой реальности просто не соответствуют.

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

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