[Из песочницы] Не совсем крутой Ruby
Помню, как два года назад столкнулся с Руби. Язык показался прекрасным, все в нем понятно и просто, нет ничего лишнего, нет ничего не очевидного. Шло время, навыки росли, времена менялись и вот уже Руби не кажется мне таким привлекательным как раньше: медленно работает, да и большие проекты поддерживать тяжело. Почему? Да потому что большие проекты и Руби — это вообще вещи несовместимые. Ты видишь скорость выполнения на других языках и хочется плакать — из-за того, что когда был сделан выбор именно в сторону этого языка программирования.
Ниже вы найдете 5 наиболее угнетающих меня вещей в Руби. Все они расписаны достаточно поверхностно.
1) RailsРаньше казалось, что на Рельсах можно писать все. Быстро и уверенно. Не сомневаться в поддержке сообщества и вообще процветать. Однако, оказалось, что Рельсы — это очередная RAD-технология, в которой, не дай бог, ты отступишь вправо или влево. А если хочется использовать NoSQL или вообще XML? Как? А никак, можно смело выпиливать половину библиотек и даже не париться, однако не стоит забывать, что от этого Рельсы не станут работать быстрее, нет, нет, вы так же будете очень долго время ждать, пока проект подгрузит все не нужные вам зависимости. Никакой гибкости при Рельсах вы не получите.2) ООП Кто-то может смело сказать, что Руби — это ООП язык, но тут-то он и ошибется. Ведь в каком языке программирования Private — это не Private, а «Ну как бы Private, но так уж и быть можно и не Private». Про Protected и говорить нечего, до выхода Ruby 2.0 Private и Protected вообще ничем не отличались. Зачем все это внедрять в язык? Сидели бы как JS и не парились, хотя даже там есть хоть какое-то разделение (пусть и не очевидное). А вы слышали про Абстрактные классы в Руби? Нет? Конечно нет, ведь они не живут в этом доме. Я, конечно, не против Модулей в Руби. Но вы пробовали отследить все места, куда вы добавили этот модуль? А если проект большой? Вы точно никогда не найдете, куда именно вставили тот или иной модуль. Можно, конечно, на это все писать тесты, но кто в здравом уме будет писать тесты на инклуды (includes)?3) Скорость выполнения Вот это вообще больная тема. Скорость в сравнении с другими языками просто поражает (JS, GO): обычно наполнения массива числами и суммирование всех элементов на Ruby выполнится за 0.15, на Node.js — 0.056, на Go — 0.005. И как мне кажется, это серьезная заявка на просадки в скорости. При этом я не использовал старую версию 1.9.3, нет, я взял новенькую 2.2.0, где все должно быть радужно и прекрасно.4) Многопоточность Хорошо, в вашем языке нет скорости, нет малого ресурсопотребления. А что есть? Может быть, многопоточность сделали? Но нет, нет тут многопоточности, нет, ну она есть, но по-моему это не правильно, когда в один потом работает все быстрее, чем в несколько. Конечно, есть вариант использовать Rubinius и его крутые нативные треды, но вы же понимаете, что половину библиотек он поддерживать не будет. И это на самом деле подводит к пункту 5.5) Кроссплатформенность Казалось бы, Руби весь такой крутой с огромным комьюнити, но и тут есть подвох. Ничего дельного под Windows до сих пор не сделали. Все веб-проекты заточены под Unix и это немного сводит сума. Не то, чтобы я был большой фанат продукции Microsoft, но все же хочется иметь выбор. Хочется, чтобы команда пользовалась именно тем, чем ей удобном (у нас в команде есть Windows-фанат и Frontend разработчик, а запускать проект приходится в виртуалке), а не тем, что диктует язык программирования (когда речь идет о веб-разработке). Ведь node.js может работать под Windows, Java может работать под Windows, а хваленый Руби — нет.Таким образом, я перечислил основные проблемы Ruby и Ruby сообщества. Я стал относить Руби к числу бесполезных языков — таких же бесполезных, как Python или Rust. Для чего они существуют — не очень понятно, но они существуют и будут продолжать существовать до тех пор, пока остаются люди, которые уверены в том, что это лучшие языки современности.