Как перл, только красныйRuby (рус. Рубин, транс. Руби, униз. Раби) — интерпретируемый (скриптовый) язык программирования общего назначения, а также DSL для Rails.История
Некий расовый японский программист Юкихиро Мацумото aka Matz, несмотря на более чем десятилетний опыт разработки, так и не смог осилить ни один из скриптовых языков и, сославшись на их ущербность, создал свой собственный язык, состоящий почти полностью из ништяков, спиженных из других популярных языков, чего и не скрывает. При этом на данный момент языку уже 20 лет, а известен он стал буквально последние несколько лет, и то благодаря написанному на нем фреймворку Rails и наконец-то доведенной до ума документации.
Плюсы и минусыЗа что любятООП, причем в стиле SmallTalk, а не крестовАктивное комьюнитиНяшный синтаксисВысокая зарплатаПоддержка кучи модных фичRailsГемы, тысячи их (хотя по сравнению с другими языками, либ в рубях таки маловато)Можно пилить либы на C, что выводит производительность приложения на космический уровень (если не наговнокодить)Поднимает ЧСВ пишущих на немЗа что ненавидятПлохо работает на вендеОтсутствие реальной многопоточности и этот ваш GIL [1]Очень мало вакансий и 95% из них на рельсы [2]Родной интерпретатор MRI достаточно медленный, и умеет использовать только одно ядро процессораЖрет памяти, как не в себяПроект, написанный ранее на руби и получивший должное развитие, как правило, переписывается на жабу или скалу [3]Нету нормальных доков на русскомВысокий порог входа
Минималистичная стандартная библиотека, из-за чего на любой чих приходится доставлять сторонние либы, каждая из которых, в свою очередь, зависит еще от десятка-двух, что приводит к настоящему аду зависимостей в проекте
Стандартная библиотека, а вслед за ней и все остальные жутко любят менять API, что ломает не только обратную, но и прямую совместимость, причем в минорных версиях — проект, написанный на 2.1.5, вполне может не запуститься на 2.2.0
Одиночное наследование без абстрактных классов и интерфейсов порою может вылезти боком
Некоторые новоиспеченные адепты настолько увлекаются переопределением всего и вся и конструированием классов на лету, что порождают тонны абсолютно нечитаемого кода в лучших традициях Perl'а
ХипстерскийЧем доставляет
Руби ценится в первую очередь за скорость разработки, синтаксис, ориентированный на рутину, кучу готовых решений, а так же уникальное сочетание поддержки всякой функциональной модноты и традиционного императивного подхода. Встроенная в язык поддержка профайлеров и тестов заставляет здорово оргазмировать тех, кто знает, что это такое, и просто повышает ЧСВ у остальных. При этом степень задротства регулируется в зависимости от задач, а наличие хорошей документации на английском, а иногда и на русском, снижает порог входа до минимума. Скорость работы скриптов на руби сливает аналогичным пистоновским всего в 6 из 10 тестов, что вполне вменяемый результат для интерпрайзного языка. Ну а еще говорящие на C могут высказаться тут, и если повезет, то стать соавтором языка.
ИмплементацииСуществует несколько вариантов интерпретаторов языка ruby, основным считается MRI, который пилит Matz.MRI — Matz ruby implementation, является тем самым православным и расово верным руби интепретатором японца
JRuby — Интерпретатор, выполняющий ruby код в JVM машине, за счет чего получает реальную многопоточность и возможность юзать ништяки из жабы. Используется, впрочем, редко, так как во-первых, теряется возможность юзать библиотеки, напиленные с рассчетом на MRI, а во-вторых, по отжиру памяти и тормознутости является бесспорным лидером среди большого семейства интерпретаторов, использующих JVM
IronRuby — то же, что и JRuby, только под .Net
Rubinius — уже давно грозится показать все другим имплементациям кузькину мать, но на данный момент так и не взлетел, не смотря на большое кол-во инвестиций.
Rails
Веб-фреймворк некой компании 37signals Basecamp, внезапно вызвавшая интерес, как и к самому фреймворку, так и в целом к языку ruby. Бытует мнение, что, если б не рельсы, вполне вероятно, что о японской поделке никто бы и не узнал. На данный момент по праву считается одним из самых развитых веб-фреймворков, однако пальма первенства уже давно и успешно проебана: та же питоновская Джанга развивается в разы быстрее и обрастает фичами чуть ли не каждый день, да и всякие похапешные поделки типа Symfony и Yii и даже серверный жабоскрипт в лице Node.js уже обогнали Рельсы по популярности [4].
Рельсы любят:За простоту и удобствоСкорость разработкиНе надо знать этот ваш SQL, ведь есть удобный ActiveRecordДаже jquery ставится с помощью rubygemsПоддержка таких ништяков как CoffeeScript, SASS, LESS из коробкиРельсы хейтят:Рельсы решето
Для масштабирования проекта на рельсах требуется вливание тонн нефти, алсо это проблема скорее интерпретатора MRI, чем веб-фрейморка и языка в целом
Хоть сколько-нибудь серьезную работу с базой ActiveRecord не вывозит, и SQL учить таки приходится
Кроме того ActiveRecord сам по себе демонстрирует не самый удачный подход к построению ORM, и при достаточно сложной структуре базы даже при условии не сильно большой нагрузки работать становится неудобно
Разработка под windows = больРельсы — решето
Локальный мем в ruby комьюнити, носит схожий смысл с не падающей плазмой. Долгое время, рельсоводов не заботила ситуация с безопасностью: считалось, что уязвимости — удел пехапэ со всякими cms by Vasya Opasniy, а их это не касается. Внезапно это оказалось не так.
Истоки
Все началось, с того, что ояш школьник из этой страны Егор Хомяков обнаружил уязвимость, и отправил репорт в багтрекер rails на гитхабе. Но был послан контрибьютарами, после чего разгневанный школьник решил устроить экстерминатус и вообще показать кузькину мать. И таки сделал это, используя ту же самую уязвимость в гитхабе, который в качестве веб-фрейморка использует… да, анон, таки рельсы. После чего Егор смог отправить коммит в репозиторий rails, несмотря на то, что как таковых прав на данное действие он не имел. От этого и гитхаб, и контрибьюторы рельсов начали срать кирпичами, школьника на время забанили, а багу таки исправили.
Продолжение банкета
В целом весь последующий 2013 год, параллельно с 4 версией рельсов, пилились периодические секьюрити фиксы. А очередное обновление рельсов всегда сопровождалось фразами: решето, друшлак, рельсы решето, etc…
ХоливарыRuby vs Python
Так как оба языка довольно похожи, то периодически какой-нибудь пэхапэшник, уставший от постоянных унижений со стороны программистов, решается перейти на что-то крутое и, естественно, задает вопрос на какой-нибудь хабре [5], [6]. В качестве аргументов пистонщики традиционно тыкают в свою интерпрайзность, серьезность, четкий code-style и производительность (весьма относительную, но в сравнении с рубями таки нехилую). На что рубисты отвечают, что джанга хуйня, а рельсы рулят, и не забывают про давнюю боль пистона со второй и третьей версией, от которой питоноводы так и не избавились (справедливости ради, в рубях при переходе даже между минорными версиями можно огрести достаточно похожие проблемы). Потом обычно идут унылые обсуждения синтаксиса, отступов питона и библиотек. Стоит отметить, что в плане web-разработки большой разницы между этими двумя языками нет, а ни для чего, кроме этого, Ruby, в отличии от Python'а, практически не используется.
Rails != RubyТентакля«Ruby? Это такой DSL для написания Rails-приложений?»— lor
Несмотря на всю крутость раби как языка, не существует ни одной вакансии отличной от рельс (иногда может идти вместе с синатрой). При этом в качестве значимости фреймворка обычно указывается, что когда-то твиттер работал на сильно переписанных под себя рельсах, правда есть еще и гитхаб. Проектов же, написанных на самом раби, в природе достаточно мало, даже на cyberforum он лежит в разделе веб-языков, хотя это язык общего назначения, что символизирует и отлично троллит начинающих рельсоводов. Сами же рельсы ни чуть не менее няшные и удобные, чем раби, задают тренды среди веб-фреймворков и охуеть как тормозят даже на очень мощном железе, что лечится кэшированием всего и вся либо же переходом на синатру.
Ruby и Windows
Сущий ад и погибель ждут любого, кто попытается разрабатывать на этом языке под вендой. Суть в том, что Ruby разрабатывался как язык максимально открытый, и родная платформа для него Linux. Большинство гемов (местное название библиотек) просто не тестируется под вендой. Инсталлятор языка выглядит как убогий костыль, содержит в себе вперемешку исходники интерпретатора, компилятор Си и еще какие-то хаки, которые не работают, если, например, в пути к папке установки есть кириллица или пробелы (причем ошибка выяснится только при попытке установить какой-нибудь гем, написанный на Си и требующий нормального компилятора). А, например, драйвер для Mysql вообще не работает, пока не перекинешь dll из папки мускула в папку с гемами. Можно, конечно, использовать SQLite, но кому он нахуй нужен. А также отправка почты, настройка веб-сервера, отличного от стандартного, и еще тонна всяких проблем, о которых лучше не знать. Поэтому грамотный анон заранее ставит виртуальную машину с бубунтой и наслаждается разработкой под рельсы, ну или качает готовый образ с настроенным окружением [7].
Что в итоге
В реальности же руби вполне вменяемый язык с высокой зарплатой, почти как у жабы и шарпа, при этом в разы их няшнее и продуманнее, с кучей синтаксического сахара и годным, хоть и относительно небольшим комьюнити. Но, несмотря на простоту и юзерфрендливость, сделать что-то годное без полного понимания, что ты делаешь не получится: нужно будет читать и вникать в манулы на английском. Свой вклад вносит коварный Python — порог входа ниже, комьюнити сильно больше, как следствие предыдущего — наличие сотен библиотек и фреймворков на все случаи жизни, при этом область применения не ограничивается одним только вебом, а по количеству вакансий одна только Джанга сопоставима со всеми рубями. И все, чем придется пожертвовать за эту радость — это отсутствие некоторого синтаксического сахара, что на самом деле заставляет писать более однообразный и, соответственно, понятный код. Profit жи. И самое главное, почему начинающий быдлокодер не любит руби — это то, что поднять визитку и правда быстрее и легче на пыхе, а объяснить заказчику, почему первокурсник Вася может сделать сайт за 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 JavaFuckerinclude SingletonendЦиклы, moar10.times { p 'ima loop yo'}for i in 0..10p "another loop #{i}"
end
#это не цикл! это замыкание (closure)#а то что оно похоже на цикл и есть его главная синтаксическая прелесть#в отличие от богомерзких сотен вложенных фунуций как в этом вашем JavaScript'е#yield, господа!(0..10).each do |i|puts "Python sucks #{i} times"
end
Добавление методов к существующему объектуСпособ 1obj = SomeObject.new # Создание и инициализация объектаdef obj.new_method # Добавление нужных методов"do some things"
end
Способ 2module AdditionalMethods # Создание модуля с нужными методамиdef new_method
"do some things"
end
end
obj = SomeObject.newobj.extend(AdditionalMethods) # Пристыковали методы из AdditionalMethods к одному объектуИнтересные фактыХоть автор языка и против написание гуев на руби, клепать формочки можно на QT и WxWidgetНа руби можно писать игры Gosu
Только False и nil возвращают False, 0 == True, в отличие от Жабы, Цэ и вообще практически всех мейнстримовых языков, так что зачастую доставляет примерно такой же разрыв шаблона, как нумерация массивов с единицы в Pascalе.
Для руби есть интерпретатор, написанный на рубиЖаргонСсылкиОфициальный сайт языка, теперь и на русском67 000 дополнений!Ruby Warrior — интерактивный учебникДовольно годные статьи по Ruby на русском. На других страницах много инфы по RoR и прочему.См. такжеХипстерperl
RUBY - англоязычный вакланастер на четвёртый движок, ещё до своего выхода в свет успевший повидать скандал по поводу своей расово латиноамериканской мордашки[8]
Любой программист без словаря поймёт, что такое RubyЯзыки программирования
Промышленные: 1С • BAT • C# • C • C++ • Java • JavaScript (AJAX) • Pascal • Perl • PHP • Python • Ruby • ABAP • Ассемблер • Васик • Фортран
Эзотерические: BrainFuck • Erlang • Forth • Haskell • LISP (My other car) • Prolog • Tcl • TeXПрофессииБыдлокодер • Программист • Тестировщик • Хакер • Хеллоуворлдщик
Методы и стилиReverse Engineering • Анти-паттерн • Выстрелить себе в ногу • Грязный хак • Код (индусский) • Костыль • Метод научного тыка • Помолясь • Свистелки и перделкиПрочее++i + ++i • Deadline • %s • 640 килобайт • CMS • Dummy mode • ЕГГОГ • Foobar • God is real, unless explicitly declared as integer • GOTO • Ifconfig • KISS • RegExp • SICP • sql.ru • Xyzzy • Дискета • Инжалид дежице • КОИ-8 • Лог • Ман • Рекурсия • СУБД • Тест Тьюринга • Умение разбираться в чужом коде • Фаза Луны • Фатальный недостатокRuby имеет отношение к стране восходящего солнца, десу!МетаЯпония • ВапЯзыкГуро • Десу • Иероглиф • Именные суффиксы • Ковай • Мунспик • Нанодесу • Ня • Система ПоливановаКультураAMV • J-Rock • MAD • Paper Child • Айкидо • Аниме • Дзен • Дорама • Кавай • Косплей • Манга • Оригами • Синтоизм • Три обезьяны • Хагакурэ • ЭрогеТипажи
Айдору • Камикадзе • Лоли • Ниндзя • Отаку • ОЯШ • Самурай • ХиккиЛюдиHard Gay • Magibon • Zoomjap • Сатоси Кон • Лэйдзи Мацумото • Митрополит Токийский Даниил • Хаяо Миядзаки • Невада-тян • Хироо Онода • Макото Синкай • Кэри-Хироюки Тагава • Тиёми ХасигутиПродукцияDance Dance Revolution • Guilty Gear • IOSYS • Hello Kitty • MSX • Resident Evil • Silent Hill • Subaru • Super Sentai • Touhou Project • VHS • Бичпакет • Годзилла • Караоке • Катана • Консоли • Суши • Тамагочи • Фингербокс • ФугуИнтернеты
/ja/ • Lolifox • OS-tan • Ruby • Sage • Yaranaika • Гайдзин ёнкома • Длиннокот • Имиджборд (2channel • Futaba) • Канакапча • Моэ-антропоморфизм • Оэкаки • Педобир
Прочее
Geddan • Imaichi-tan • Special Feeling • Аокигахара • Аум Синрикё • Буккакэ • Имдинская война • Курильские острова • Мику Хацуне • Монорельс • Нека (Танака-нэко) • Рулесрач • Русско-японская война • Советско-японские войны • Схватка двух йокодзун • Флаг на Иводзиме • Фукусима 1