| [досмотренная версия] | [ожидает проверки] |
|
|
| | | | |
| | == История == | | == История == |
| − | Некий расовый японский программист [[:w:Мацумото, Юкихиро|Юкихиро Мацумото]] aka Matz, несмотря на более чем десятилетний опыт разработки, так и не смог осилить ни один из скриптовых языков и, сославшись на их ущербность, создал свой собственный язык, состоящий почти полностью из ништяков, спиженных из других популярных языков, чего и не скрывает. При этом на данный момент языку уже 20 лет, а известен он стал буквально последние несколько лет, и то благодаря написанному на нем фреймворку Rails и наконец-то доведенной до ума документации. | + | Некий [[расовый]] японский [[программист]] [[:w:Мацумото, Юкихиро|Юкихиро Мацумото]] aka Matz, несмотря на более чем десятилетний опыт разработки, так и не смог осилить ни один из скриптовых языков и, сославшись на их ущербность, создал свой собственный язык, состоящий почти полностью из ништяков, спиженных из других популярных языков, чего и не скрывает. При этом на данный момент языку уже 20 лет, а известен он стал буквально [[Недавно|последние несколько лет]], и то благодаря написанному на нем фреймворку Rails и наконец-то доведенной до ума документации. |
| | | | |
| | == Плюсы и минусы == | | == Плюсы и минусы == |
| | | | |
| | === За что любят === | | === За что любят === |
| − | * ООП, причем в стиле [[SmallTalk]], а не [[C++|крестов]] | + | * ООП, причем в стиле [[Java|SmallTalk]], а не [[C++|крестов]] |
| | * Активное комьюнити | | * Активное комьюнити |
| | * Няшный синтаксис | | * Няшный синтаксис |
|
|
| | * Поддержка кучи модных фич | | * Поддержка кучи модных фич |
| | * Rails | | * Rails |
| − | * Гемы, тысячи их | + | * Гемы, тысячи их (хотя по сравнению с другими языками, либ в рубях таки маловато) |
| | + | * Можно пилить либы на [[C]], что выводит производительность приложения на космический уровень (если [[Выстрелить себе в ногу|не наговнокодить]]) |
| | * Поднимает [[ЧСВ]] пишущих на нем | | * Поднимает [[ЧСВ]] пишущих на нем |
| | | | |
|
|
| | * Плохо работает на венде | | * Плохо работает на венде |
| | * Отсутствие реальной многопоточности и этот ваш GIL [http://habrahabr.ru/post/189320/] | | * Отсутствие реальной многопоточности и этот ваш GIL [http://habrahabr.ru/post/189320/] |
| − | * Очень мало вакансий | + | * Очень мало вакансий и 95% из них на рельсы [https://ru.wikipedia.org/wiki/Ruby_on_Rails] |
| | * Родной интерпретатор MRI достаточно медленный, и умеет использовать только одно ядро процессора | | * Родной интерпретатор MRI достаточно медленный, и умеет использовать только одно ядро процессора |
| − | * Проект, написанный ранее на руби и получивший должное развитие, как правило, переписывается на [[java|жабу]] [http://carlosbecker.com/posts/twitter-drops-ruby-bullshit/] | + | * Жрет памяти, как не в себя |
| | + | * Проект, написанный ранее на руби и получивший должное развитие, как правило, переписывается на [[java|жабу]] или скалу [http://carlosbecker.com/posts/twitter-drops-ruby-bullshit/] |
| | * Нету нормальных доков на русском | | * Нету нормальных доков на русском |
| | * Высокий порог входа | | * Высокий порог входа |
| | + | * Минималистичная стандартная библиотека, из-за чего на любой чих приходится доставлять сторонние либы, каждая из которых, в свою очередь, зависит еще от десятка-двух, что приводит к настоящему аду зависимостей в проекте |
| | + | * Стандартная библиотека, а вслед за ней и все остальные жутко любят менять API, что ломает не только обратную, но и прямую совместимость, причем в минорных версиях — проект, написанный на 2.1.5, вполне может не запуститься на 2.2.0 |
| | + | * Одиночное наследование без абстрактных классов и интерфейсов порою может вылезти боком |
| | + | * Некоторые [[Малолетний долбоёб|новоиспеченные адепты]] настолько увлекаются переопределением всего и вся и конструированием классов на лету, что порождают тонны абсолютно нечитаемого кода в лучших традициях [[Perl]]'а |
| | * [[Хипстер]]ский | | * [[Хипстер]]ский |
| | | | |
| | == Чем доставляет == | | == Чем доставляет == |
| − | Руби ценится в первую очередь за скорость [[PHP|разработки]], [[Python|синтаксис]], ориентированный на [[perl|рутину]], кучу [[C Sharp|готовых]] решений, а так же уникальное сочетание поддержки всякой функциональной [[Haskell|модноты]] и традиционного императивного [[C++|подхода]]. Встроенная в язык поддержка профайлеров и тестов заставляет здорово оргазмировать тех, кто знает, что это такое, и просто повышает ЧСВ у остальных. При этом степень задротства регулируется в зависимости от задач, а наличие хорошей документации на английском, а иногда и на русском, снижает порог входа до [[Pascal|минимума]]. Скорость работы скриптов на руби сливает аналогичным пистоновским всего в 6 из 10 [http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=yarv&lang2=python3&data=u64q тестов], что вполне вменяемый результат для [[Java|интерпрайзного]] языка. Ну а еще говорящие на [[Pure C|C]] могут высказаться [https://github.com/ruby/ruby тут], и если повезет, то стать соавтором языка. | + | Руби ценится в первую очередь за скорость [[PHP|разработки]], [[Python|синтаксис]], ориентированный на [[perl|рутину]], кучу [[C Sharp|готовых]] решений, а так же уникальное сочетание поддержки всякой функциональной [[Haskell|модноты]] и традиционного императивного [[C++|подхода]]. Встроенная в язык поддержка профайлеров и тестов заставляет здорово оргазмировать тех, кто знает, что это такое, и просто повышает ЧСВ у остальных. При этом степень задротства регулируется в зависимости от задач, а наличие хорошей документации на английском, а иногда и на русском, снижает порог входа до [[Pascal|минимума]]. Скорость работы скриптов на руби сливает аналогичным пистоновским всего в 7 из 10 [https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby.html тестов], что вполне вменяемый результат для [[Java|интерпрайзного]] языка. Ну а еще говорящие на [[Pure C|C]] могут высказаться [https://github.com/ruby/ruby тут], и если повезет, то стать соавтором языка. |
| | | | |
| | == Имплементации == | | == Имплементации == |
|
|
| | | | |
| | * MRI — Matz ruby implementation, является тем самым православным и расово верным руби интепретатором японца | | * MRI — Matz ruby implementation, является тем самым православным и расово верным руби интепретатором японца |
| − | * JRuby — Интерпретатор, выполняющий ruby код в JVM машине, за счет чего получает реальную многопоточность и возможность юзать ништяки из [[java|жабы]] | + | * JRuby — Интерпретатор, выполняющий ruby код в JVM машине, за счет чего получает реальную многопоточность и возможность юзать ништяки из [[java|жабы]]. Используется, впрочем, редко, так как во-первых, теряется возможность юзать библиотеки, напиленные с рассчетом на MRI, а во-вторых, по отжиру памяти и тормознутости является бесспорным лидером среди большого семейства интерпретаторов, использующих JVM |
| | + | * IronRuby — то же, что и JRuby, только под [[C#|.Net]] |
| | * Rubinius — уже давно грозится показать все другим имплементациям кузькину мать, но на данный момент так и не взлетел, не смотря на большое кол-во инвестиций. | | * Rubinius — уже давно грозится показать все другим имплементациям кузькину мать, но на данный момент так и не взлетел, не смотря на большое кол-во инвестиций. |
| | | | |
| | == Rails == | | == Rails == |
| − | Веб-фреймворк некой компании <del>37signals</del> Basecamp, [[внезапно]] вызвавшая интерес, как и к самому фреймворку, так и в целом к языку ruby. Бытует мнение, что, если б не рельсы, вполне вероятно, что о японской поделке никто бы и не узнал. На данный момент по праву считается одним из самых развитых веб-фреймворков, конкруировать с которым может разве что [[Django|джанга]], и то сливая по многим пунктам, от чего у [[Python|питонистов]] вызывает знатное [[баттхерт|жжение в области ануса]]. | + | Веб-фреймворк некой компании <del>37signals</del> Basecamp, [[внезапно]] вызвавшая интерес, как и к самому фреймворку, так и в целом к языку ruby. Бытует мнение, что, если б не рельсы, вполне вероятно, что о японской поделке никто бы и не узнал. На данный момент по праву считается одним из самых развитых веб-фреймворков, однако пальма первенства уже давно и успешно [[Полимеры|проебана]]: та же [[Python|питоновская]] Джанга развивается в разы быстрее и обрастает фичами чуть ли не каждый день, да и всякие [[PHP|похапешные]] поделки типа Symfony и Yii и даже серверный [[Javascript|жабоскрипт]] в лице Node.js уже обогнали Рельсы по популярности [http://tagline.ru/backend-frontend-frameworks-rating/]. |
| | | | |
| | '''Рельсы любят''': | | '''Рельсы любят''': |
|
|
| | * Рельсы решето | | * Рельсы решето |
| | * Для масштабирования проекта на рельсах требуется вливание [[сотни нефти|тонн нефти]], алсо это проблема скорее интерпретатора MRI, чем веб-фрейморка и языка в целом | | * Для масштабирования проекта на рельсах требуется вливание [[сотни нефти|тонн нефти]], алсо это проблема скорее интерпретатора MRI, чем веб-фрейморка и языка в целом |
| | + | * Хоть сколько-нибудь серьезную работу с базой ActiveRecord не вывозит, и [[SQL]] учить таки приходится |
| | + | * Кроме того ActiveRecord сам по себе демонстрирует не самый удачный подход к построению ORM, и при достаточно сложной структуре базы даже при условии не сильно большой нагрузки работать становится неудобно |
| | * Разработка под windows = боль | | * Разработка под windows = боль |
| | | | |
|
|
| | ==== Истоки ==== | | ==== Истоки ==== |
| | [[Файл:homakov.jpg|thumb|]] | | [[Файл:homakov.jpg|thumb|]] |
| − | Все началось, с того, что <del>[[ояш]]</del> [[школьник]] из [[Эта страна|этой страны]] Егор Хомяков обнаружил уязвимость, и отправил репорт в багтрекер rails на гитхабе. Но был послан контрибьютарами, после чего разгневанный школьник решил устроить [[экстерминатус]] и вообще показать кузькину мать. И таки сделал это, используя ту же самую уязвимость в гитхабе, который в качестве веб-фрейморка использует… да, анон, таки рельсы. После чего Егор смог отправить коммит в репозиторий rails, несмотря на то, что как таковых прав на данное действие он не имел. От этого и гитхаб, и контрибьюторы рельсов начали [[срать кирпичами]], [[Школьник|школьника]] на время забанили, а багу таки исправли. | + | Все началось, с того, что <del>[[ояш]]</del> [[школьник]] из [[Эта страна|этой страны]] Егор Хомяков обнаружил уязвимость, и отправил репорт в багтрекер rails на гитхабе. Но был послан контрибьютарами, после чего разгневанный школьник решил устроить [[экстерминатус]] и вообще показать кузькину мать. И таки сделал это, используя ту же самую уязвимость в гитхабе, который в качестве веб-фрейморка использует… да, анон, таки рельсы. После чего Егор смог отправить коммит в репозиторий rails, несмотря на то, что как таковых прав на данное действие он не имел. От этого и гитхаб, и контрибьюторы рельсов начали [[срать кирпичами]], [[Школьник|школьника]] на время забанили, а багу таки исправили. |
| | | | |
| | ==== Продолжение банкета ==== | | ==== Продолжение банкета ==== |
|
|
| | | | |
| | === Ruby vs Python === | | === Ruby vs Python === |
| − | Так как оба языка довольно похожи, то периодически какой-нибудь пэхапэшник, уставший от постоянных унижений со стороны программистов, решается перейти на что-то крутое и, естественно, задает вопрос на какой-нибудь [[хабр]]е [http://toster.ru/q/49580], [http://toster.ru/q/17596]. В качестве аргументов пистонщики традиционно тыкают в свою интерпрайзность и серьезность, а руби нужен сугубо для понтов и хипстерских митапов, на что рубисты отвечают, что джанга хуйня, а рельсы рулят, и не забывают про давнюю боль пистона со второй и третьей версией, от которой питоноводы так и не избавились. Потом обычно идут унылые обсуждения синтаксиса, отступов пистона и библиотек. | + | Так как оба языка довольно похожи, то периодически какой-нибудь пэхапэшник, уставший от постоянных унижений со стороны программистов, решается перейти на что-то крутое и, естественно, задает вопрос на какой-нибудь [[хабр]]е [http://toster.ru/q/49580], [http://toster.ru/q/17596]. В качестве аргументов пистонщики традиционно тыкают в свою интерпрайзность, серьезность, четкий code-style и производительность (весьма относительную, но в сравнении с рубями таки нехилую). На что рубисты отвечают, что джанга хуйня, а рельсы рулят, и не забывают про давнюю боль пистона со второй и третьей версией, от которой питоноводы так и не избавились (справедливости ради, в рубях при переходе даже между минорными версиями можно огрести достаточно похожие проблемы). Потом обычно идут унылые обсуждения синтаксиса, отступов питона и библиотек. Стоит отметить, что в плане web-разработки большой разницы между этими двумя языками нет, а ни для чего, кроме этого, Ruby, в отличии от Python'а, практически не используется. |
| | | | |
| | === Rails != Ruby === | | === Rails != Ruby === |
|
|
| | | | |
| | == Что в итоге == | | == Что в итоге == |
| − | [[На самом деле|В реальности]] же руби вполне вменяемый язык с высокой зарплатой, почти как у жабы и шарпа, при этом в разы их няшнее и продуманнее, с кучей синтаксического сахара и годным комьюнити. Но, несмотря на простоту и юзерфрендливость, сделать что-то годное без полного понимания, что ты делаешь не получится: нужно будет читать и вникать в [[манул]]ы [[ENGLISH MOTHERFUCKER DO YOU SPEAK IT|на английском]]. И самое главное, почему начинающий быдлокодер не любит руби — это то, что поднять визитку и правда быстрее и легче на пыхе, а объяснить заказчику, почему первокурсник Вася может сделать сайт за 5к рублей, а ты за 50к, очень сложно. При этом, когда твой уровень и уровень твоих заказчиков поднимается до такого, что за указание пыха в твоем резюме будут громко смеяться, ты уже вряд ли захочешь вообще программировать, и скорее всего будешь каким-нибудь анал-итиком или менеджером проекта, которому уже глубоко похуй, на чем там пишут его прогеры, да и зарплата там уже совсем другая. С другой стороны, если ты [[Нуб|джуниор]] и готов учиться, то руби научит писать более-менее красивый код. Ну или не научит ничему. | + | [[На самом деле|В реальности]] же руби вполне вменяемый язык с высокой зарплатой, почти как у жабы и шарпа, при этом в разы их няшнее и продуманнее, с кучей синтаксического сахара и годным, хоть и относительно небольшим комьюнити. Но, несмотря на простоту и юзерфрендливость, сделать что-то годное без полного понимания, что ты делаешь не получится: нужно будет читать и вникать в [[манул]]ы [[ENGLISH MOTHERFUCKER DO YOU SPEAK IT|на английском]]. Свой вклад вносит коварный [[Python]] — порог входа ниже, комьюнити сильно больше, как следствие предыдущего — наличие [[Over 9000|сотен]] [[Свистелки и перделки|библиотек и фреймворков]] на все случаи жизни, при этом область применения не ограничивается одним только вебом, а по количеству вакансий одна только Джанга сопоставима со всеми рубями. И все, чем придется пожертвовать за эту радость — это отсутствие некоторого синтаксического сахара, что на самом деле заставляет писать более однообразный и, соответственно, понятный код. [[Profit]] жи. И самое главное, почему начинающий быдлокодер не любит руби — это то, что поднять визитку и правда быстрее и легче на пыхе, а объяснить заказчику, почему первокурсник Вася может сделать сайт за 5к рублей, а ты за 50к, очень сложно. При этом, когда твой уровень и уровень твоих заказчиков поднимается до такого, что за указание пыха в твоем резюме будут громко смеяться, ты уже вряд ли захочешь вообще программировать, и скорее всего будешь каким-нибудь анал-итиком или менеджером проекта, которому уже глубоко похуй, на чем там пишут его прогеры, да и зарплата там уже совсем другая. С другой стороны, если ты [[Нуб|джуниор]] и готов учиться, то руби научит писать более-менее красивый код. Ну или не научит ничему. |
| | | | |
| | == Примеры использования == | | == Примеры использования == |
|
|
| | p "another loop #{i}" | | p "another loop #{i}" |
| | end | | end |
| | + | |
| | + | #это не цикл! это замыкание (closure) |
| | + | #а то что оно похоже на цикл и есть его главная синтаксическая прелесть |
| | + | #в отличие от богомерзких сотен вложенных фунуций как в этом вашем JavaScript'е |
| | + | #yield, господа! |
| | | | |
| | (0..10).each do |i| | | (0..10).each do |i| |
|
|
| | * Хоть автор языка и против написание гуев на руби, клепать формочки можно на [http://rubyforge.org/projects/korundum/ QT] и [http://wxruby.rubyforge.org/ WxWidget] | | * Хоть автор языка и против написание гуев на руби, клепать формочки можно на [http://rubyforge.org/projects/korundum/ QT] и [http://wxruby.rubyforge.org/ WxWidget] |
| | * На руби можно писать игры [https://github.com/jlnr/gosu Gosu] | | * На руби можно писать игры [https://github.com/jlnr/gosu Gosu] |
| − | * Только False и nil возвращают False, 0 == True, в отличие от Жабы и Цэ | + | * ВНЕЗАПНО является скриптовым языком плагинов для [[:w:RPG Maker]] по VX ACE включительно и вполне успешно работает там под виндой. Более поздние версии (начиная с MV) таки сдались под напором [[Web 2.0]] и используют [[JavaScript]] |
| | + | * Только False и nil возвращают False, 0 == True, в отличие от Жабы, Цэ и вообще практически всех мейнстримовых языков, так что зачастую доставляет примерно такой же разрыв шаблона, как нумерация массивов с единицы в [[Pascal]]е. |
| | * Для руби есть интерпретатор, [http://rubini.us/ написанный на руби] | | * Для руби есть интерпретатор, [http://rubini.us/ написанный на руби] |
| | * [http://ru.wikibooks.org/wiki/Ruby/%D0%96%D0%B0%D1%80%D0%B3%D0%BE%D0%BD Жаргон] | | * [http://ru.wikibooks.org/wiki/Ruby/%D0%96%D0%B0%D1%80%D0%B3%D0%BE%D0%BD Жаргон] |
|
|
| | * [http://rubygems.org/ 67 000 дополнений!] | | * [http://rubygems.org/ 67 000 дополнений!] |
| | * [https://www.bloc.io/ruby-warrior/ Ruby Warrior — интерактивный учебник] | | * [https://www.bloc.io/ruby-warrior/ Ruby Warrior — интерактивный учебник] |
| | + | * [http://blog.topolyan.com/tag/ruby/ Довольно годные статьи по Ruby на русском]. На других страницах много инфы по RoR и прочему. |
| | | | |
| | == См. также == | | == См. также == |
| | * [[Хипстер]] | | * [[Хипстер]] |
| | * [[perl]] | | * [[perl]] |
| − | | + | * RUBY - англоязычный [http://vocaloid.wikia.com/wiki/VOCALOID вакланастер] на четвёртый движок, ещё до своего выхода в свет успевший повидать скандал по поводу своей [[расово]] латиноамериканской мордашки<sup>[http://vocaloid.wikia.com/wiki/RUBY_(VOCALOID4)викия] |
| − | | + | </sup> |
| | {{Языки программирования}} | | {{Языки программирования}} |
| | {{Япония}} | | {{Япония}} |
| | | | |
| | [[w:Ruby]] [[en.w:Ruby (programming language)]] [[ae:Ruby]] | | [[w:Ruby]] [[en.w:Ruby (programming language)]] [[ae:Ruby]] |