Не зовсім крутий 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. Для чого вони існують - не дуже зрозуміло, але вони існують і будуть продовжувати існувати до тих пір, поки залишаються люди, які впевнені в тому, що це найкращі мови сучасності.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND