Ruby

Ruby

https://t.me/hcdev

Попробовал ruby. Писал на нём давно до этого, но достаточно активно


0. Сам язык относительно прост в установке и настройке

1. Обычно все пользуются rvm или rbenv для работы с несколькими версиями одновременно, но это не сильно усложняет процесс

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

3. Набор библиотек вполне ничего. Практически под любую задачу можно найти уже готовый вариант. Всё упаковано в гемы, поставить их легко

4. Но, у рантайма есть проблемы: GIL и общая низкая производительность

5. Надо заметить, что JRuby хотя бы с многопоточностью проблемы не имеет

6. При этом активно развивается свой JIT и идет поиск различных решений к проблеме GIL'а (Guild'ы и т.д. и т.п.)

7. Сам язык при этом очень приятный

8. Хорошо сделана ОО часть

9. Элементарно использовать метапрограммирование

10. Соответственно запросто можно сделать красивую и приятную DSL/eDSL

11. Сам синтаксис поощряет это

12. Но и странные вещи с помощью этого творить можно запросто

13. Но, чувство красоты в языке развито хорошо. (Как и во всем японском) Апи для некоторых библиотек просто физически прекрасны

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

15. Тот же sinatra повлиял почти на все вышедние после микрофреймворки

16. Но всё испортили рельсы.

17. Одновременно самая важная и самая деструктивная часть экосистемы

18. Рельсы сильно подстягнули популярность языка и задачи новый стандарт для скорости прототипирования веб приложений

19. Но при этом качество кода и используемых паттернов и идиом в них никакое

20. SOLID - не, не слышали

21. Сшить сущность, сохранения в бд и валидацию в один класс - да, конечно!

22. Логику равномерном слоем размазать по всем контроллерам разом - запросто!

23. ORM - active record буквально со всеми минусами данного паттерна

24. N+1 проблема - не, мы не паримся, мы пишем стартап, попивая смузи в коворкинге, нам не до этого

25. Хмм.. надо бы все действия в рамках запроса делать в одной транзакции, чтобы ничего не поломать - не, у нас по умолчанию по транзакции на save (!!!)

26. DI, настоящие unit тесты, иммутабельность, ФП подход - а что это?

27. Я знаю, тут же придет народ и скажет, что всё это можно исправить. Да, можно, но проблема в том, что рельсы изначально поощрают плохие практики. Как своим примером, так и общей архитектурой

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

29. Средний проект на рельсах - это написанный подзабоными хипстерами неподдерживаемый макаронный монстр с вкраплением 5к обращений к бд на один запрос

30. Спасает лишь то, что все хипстеры убежали в ноду, го, даже в питон

31. Туда им и дорога. Руби слишком красивый и интеллекутальный для них

32. И сообщество постепенно просыпается и пытается писать код правильно (см. тот же dry-rb)


TLDR. Неплохая (хоть и со стандартными для динамики проблемами) платформа, отличный язык и куча архитектурного мусора в лице рельс

Report Page