Ruby YJIT vs C: Ускоряем Ruby, переписав C… на Ruby
...
По большей мере подобные бенчмарки бессмысленны. Python был самым медленным языком в бенчмарке, однако в то же время самым используемым языком Github на октябрь 2024 года. На Ruby написано одно из самых крупных веб-приложений в мире. Недавно я запускал бенчмарк производительности веб-сокетов между веб-сервером Ruby Falcon и node.js, и результаты Ruby были близки к результатам node.js. Вы чаще выполняете миллиард итераций цикла или используете веб-сокеты?
Язык программирования должен быть достаточно эффективным, за этим идёт полезность языка и тип ваших задач, и продуктивность языка перевешивает скорость выполнения миллиарда итераций цикла или намеренно выбранной неэффективной реализации метода Фибоначчи.
Тем не менее:
- Мир программирования любит бенчмарки
- Быстрый бенчмарк не имеет ценности на практике, но привлекает интерес людей к языку. Кто-то может сказать, что он упрощает масштабирование производительности, но об этом можно поспорить
- То, что выбранный вами язык показывает себя не с лучшей стороны, раздражает. Здорово, когда можно сказать: «Я пользуюсь и наслаждаюсь этим языком, и он быстро работает во всех бенчмарках!»
Использование JIT в Ruby заметно повышает производительность, что, видимо, сильно порой раздражает приверженцев других языков программирования, которые продолжают "огалтело орать на каждом углу", что "Ruby мёртв". Не дождётесь, уважаемые! ;-))) В комментариях к статье не так и много высказываний по делу, а всё свелось снова к обсуждению динамической типизации, как якобы огромного недостатка Ruby. Успокойтесь и выдохните! Ваша статическая типизация ненамного поможет вам в написании правильно работающего кода (вспомним басню И.А. Крылова «Квартет»), статическая типизация не особо поможет говнокодерам. В Ruby предложено элегантное решение указания типов, которое не засоряет код объявлениями и указаниями типов, а нужно лишь действительно для проверки корректности программы - механизм этот RBS, Understanding RBS, Ruby's new Type Annotation System
Очень важно ещё и понимать, что не только сам язык должен быть быстрым в исполнении, но и написание программ на нём должно быть быстрым и эффективным. Какой толк от вашей сверхбыстрой системы, если на её написание вы потратите месяцы и годы, а та же задача может быть реализована на Ruby за недели? В то время, как вы пыхтите над оптимизацией кода, разумные люди предпочтут пользоваться готовой работающей (может чуть медленнее) программой, чем ожидать появления наконец-то вашего сверхбыстрого чуда-чудесного. Ruby - язык продуктивного программирования - этим очень многое сказано. Очень убедительно рассказано тут про это.
Ошибки несоответствия типов, если таковые вдруг возникли, довольно легко и быстро обнаруживаются, программист Ruby найдёт корректный и элегантный способ "подружить" разные типы между собой. Про "утиную типизацию" и "monkey patch", которая якобы может испортить код программ, неожидающих некоторого поведения от определённых классов тоже можно давно забыть, так как в Ruby существует, например, механизм Refinements.
Не забываем, кстати, и о параллелизме, который является частью самого языка Ruby - в наше время все современные процессоры имеют множество ядер процессора (отдельных процессоров) - при умелом использовании параллельное исполнение разных частей программ может значительно повысить производительность. И тут, о Боже, сразу в мусорку улетает Python (с его GIL) - язык, популярность которого в последнее время искусственно завышена за счёт учителей-недопрограммистов и новичков, которые шерстят интернет в поисках учебных материалов по Python для своих лекций и новичков, ищущих готовые решения.
С внедрением механизма JIT в Ruby вскоре многие другие языки программирования потеряют свои мнимые преимущества в виде более быстрого исполнения кода.