Участник:CAMOKPYT/Ruby
Материал из Lurkmore
Эта статья находится на доработке. Эта статья всё ещё не взлетела и не соответствует нынешним реалиям /lm/. Но добрый CAMOKPYT приютил её в своём личном пространстве, и теперь она может Модераторам: выпустить Дата последней правки страницы: 31.07.2015 |
Ruby (рус. Рубин, транс. Руби, униз. Раби) — интерпретируемый (скриптовый) язык программирования общего назначения, а также DSL для Rails.
Содержание |
История
Некий расовый японский программист Юкихиро Мацумото aka Matz, несмотря на более чем десятилетний опыт разработки, так и не смог осилить ни один из скриптовых языков и, сославшись на их ущербность, создал свой собственный язык, состоящий почти полностью из ништяков, спиженных из других популярных языков, чего и не скрывает. При этом на данный момент языку уже 20 лет, а известен он стал буквально последние несколько лет, и то благодаря написанному на нем фреймворку Rails и наконец-то доведенной до ума документации.
Плюсы и минусы
За что любят
- ООП, причем в стиле SmallTalk, а не крестов
- Активное комьюнити
- Няшный синтаксис
- Высокая зарплата
- Поддержка кучи модных фич
- Rails
- Гемы, тысячи их
- Поднимает ЧСВ пишущих на нем
За что ненавидят
- Плохо работает на венде
- Отсутствие реальной многопточности и этот ваш GIL [1]
- Очень мало вакансий
- Родной интерпретатор MRI достаточно медленный, и умеет использовать только одно ядро процессора
- Проект, написанный ранее на руби и получивший должное развитие, как правило, переписывается на жабу [2]
- Нету нормальных доков на русском
- Высокий порог входа
- Хипстерский
Чем доставляет
Руби ценится в первую очередь за скорость разработки, синтаксис, ориентированный на рутину, кучу готовых решений, а так же уникальное сочетание поддержки всякой функциональной модноты и традиционного императивного подхода. Встроенная в язык поддержка профайлеров и тестов заставляет здорово оргазмировать тех, кто знает, что это такое, и просто повышает ЧСВ у остальных. При этом степень задротства регулируется в зависимости от задач, а наличие хорошей документации на английском, а иногда и на русском, снижает порог входа до минимума. Скорость работы скриптов на руби сливает аналогичным пистоновским всего в 6 из 10 тестов, что вполне вменяемый результат для интерпрайзного языка. Ну а еще говорящие на C могут высказаться тут, и если повезет, то стать соавтором языка.
Имплементации
Существует несколько вариантов интерпретаторов языка ruby, основным считается MRI, который пилит Matz.
- MRI - Matz ruby implementation, является тем самым православным и расово верным руби интепретатором японца
- JRuby - Интерпретатор, выполняющий ruby код в JVM машине, за счет чего получает реальную многопоточность и возможность юзать ништяки из жабы
- Rubinius - уже давно грозится показать все другим имплементациям кузькину мать, но на данный момент так и не взлетел, не смотря на большое кол-во инвестиций.
Rails
Веб-фреймворк некой компании 37signals Basecamp, внезапно вызвавшая интерес, как и к самому фреймворку, так и в целом к языку ruby. Бытует мнение, что, если б не рельсы, вполне вероятно, что о японской поделке никто бы и не узнал. На данный момент по праву считается одним из самых развитых веб-фреймворков, конкруировать с которым может разве что джанга, и то сливая по многим пунктам, от чего у питонистов вызывает знатное жжение в области ануса.
Рельсы любят:
- За простоту и удобство
- Скорость разработки
- Не надо знать этот ваш SQL, ведь есть удобный ActiveRecord
- Даже jquery ставится с помощью rubygems
- Поддержка таких ништяков как CoffeeScript, SASS, LESS из коробки
Рельсы хейтят:
- Рельсы решето
- Для масштабирования проекта на рельсах требуется вливание тонн нефти, алсо это проблема скорее интерпретатора MRI, чем веб-фрейморка и языка в целом
- Разработка под windows = боль
Рельсы - решето
Локальный мем в ruby коммьюнити, носит схожий смысл с не падающей плазмой. Долгое время, рельсоводов не заботила ситуация с безопасностью: считалось, что уязвимости — удел пехапэ со всякими cms by Vasya Opasniy, а их это не касается. Внезапно это оказалось не так.
Истоки
Все началось, с того, что ояш школьник из этой страны Егор Хомяков обнаружил уязвимость, и отправил репорт в багтрекер rails на гитхабе. Но был послан контрибьютарами, после чего разгневанный школьник решил устроить экстерминатус и вообще показать кузькину мать. И таки сделал это, используя ту же самую уязвимость в гитхабе, который в качестве веб-фрейморка использует... да, анон, таки рельсы. После чего Егор смог отправить коммит в репозиторий rails, несмотря на то, что как таковых прав на данное действие он не имел. От этого и гитхаб, и контрибьюторы рельсов начали срать кирпичами, школьника на время забанили, а багу таки исправли.
Продолжение банкета
В целом весь последующий 2013 год, параллельно с 4 версией рельсов, пилились периодические секьюрити фиксы. А очередное обновление рельсов всегда сопровождалось фразами: решето, друшлак, рельсы решето, etc...
Холивары
Ruby vs Python
Так как оба языка очень похожи и по внутреннему устройству и даже по синтаксису[ЩИТО?], то периодически какой-нибудь пэхапэшник, уставший от постоянных унижений со стороны программистов, решается перейти на что-то крутое и, естественно, задает вопрос на какой-нибудь хабре [3], [4]. В качестве аргументов пистонщики традиционно тыкают в свою интерпрайзность и серьезность, а руби нужен сугубо для понтов и хипстерских митапов, на что рубисты отвечают, что джанга хуйня, а рельсы рулят, и не забывают про давнюю боль пистона со второй и третьей версией, от которой питоноводы так и не избавились. Потом обычно идут унылые обсуждения синтаксиса, отступов пистона и библиотек.
Rails != Ruby
« |
Ruby? Это такой DSL для написания Rails-приложений? | » |
— lor |
Несмотря на всю крутость раби как языка, не существует ни одной вакансии отличной от рельс (иногда может идти вместе с синатрой). При этом в качестве значимости фреймворка обычно указывается, что когда-то твиттер работал на сильно переписанных под себя рельсах, правда есть еще и гитхаб. Проектов же, написанных на самом раби, в природе достаточно мало, даже на cyberforum он лежит в разделе веб-языков, хотя это язык общего назначения, что символизирует и отлично троллит начинающих рельсоводов. Сами же рельсы ни чуть не менее няшные и удобные, чем раби, задают тренды среди веб-фреймворков и охуеть как тормозят даже на очень мощном железе, что лечится кэшированием всего и вся либо же переходом на синатру.
Ruby и Windows
Сущий ад и погибель ждут любого, кто попытается разрабатывать на этом языке под вендой. Суть в том, что Ruby разрабатывался как язык максимально открытый, и родная платформа для него Linux. Большинство гемов (местное название библиотек) просто не тестируется под вендой. Инсталлятор языка выглядит как убогий костыль, содержит в себе вперемешку исходники интерпретатора, компилятор Си и еще какие-то хаки, которые не работают, если, например, в пути к папке установки есть кириллица или пробелы (причем ошибка выяснится только при попытке установить какой-нибудь гем, написанный на Си и требующий нормального компилятора). А, например, драйвер для Mysql вообще не работает, пока не перекинешь dll из папки мускула в папку с гемами. Можно, конечно, использовать SQLite, но кому он нахуй нужен. А также отправка почты, настройка веб-сервера, отличного от стандартного, и еще тонна всяких проблем, о которых лучше не знать. Поэтому грамотный анон заранее ставит виртуальную машину с бубунтой и наслаждается разработкой под рельсы, ну или качает готовый образ с настроенным окружением [5].
Что в итоге
В реальности же руби вполне вменяемый язык с высокой зарплатой, почти как у жабы и шарпа, при этом в разы их няшнее и продуманнее, с кучей синтаксического сахара и годным комьюнити. Но, несмотря на простоту и юзерфрендливость, сделать что-то годное без полного понимания, что ты делаешь не получится: нужно будет читать и вникать в манулы на английском. И самое главное, почему начинающий быдлокодер не любит руби — это то, что поднять визитку и правда быстрее и легче на пыхе, а объяснить заказчику, почему первокурсник Вася может сделать сайт за 5к рублей, а ты за 50к, очень сложно. При этом, когда твой уровень и уровень твоих заказчиков поднимается до такого, что за указание пыха в твоем резюме будут громко смеяться, ты уже вряд ли захочешь вообще программировать, и скорее всего будешь каким-нибудь анал-итиком или менеджером проекта, которому уже глубоко похуй, на чем там пишут его прогеры, да и зарплата там уже совсем другая. С другой стороны, если ты джуниор и готов учиться, то руби научит писать более-менее красивый код. Ну или не научит ничему.
Примеры использования
puts 'Hello World' # Обычный вариант, это, кстати, комментарий p 'Hello World' # Короткий, перлота printf("%d",10); # Чистый Си
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; } }
На руби, прогресс налицо
class JavaFucker include Singleton end
10.times { p 'ima loop yo'} for i in 0..10 p "another loop #{i}" end (0..10).each do |i| puts "Python sucks #{i} times" end
obj = SomeObject.new # Создание и инициализация объекта def obj.new_method # Добавление нужных методов "do some things" end
Способ 2
module AdditionalMethods # Создание модуля с нужными методами def new_method "do some things" end end obj = SomeObject.new obj.extend(AdditionalMethods) # Пристыковали методы из AdditionalMethods к одному объекту
Интересные факты
- Хоть автор языка и против написание гуев на руби, клепать формочки можно на QT и WxWidget
- На руби можно писать игры Gosu
- Только False и nil возвращают False, 0 == True, в отличие от Жабы и Цэ
- Для руби есть интерпретатор, написанный на руби
- Жаргон