Медленно, но верно: о прошлом, настоящем и будущем Ruby
Часто людская молва годами приговаривает тот или иной IT-продукт к «смерти». Если этого не происходит, молва продолжает терпеливо ждать. А если когда-нибудь тот или иной проект закрывается, кто-нибудь обязательно выждет момент и скажет: «А мы ведь говорили, что это случится».
Сколько лет подряд языку PHP пророчат «смерть»? Но ему, кажется, хоть бы что. А в последнее время он даже стал развиваться активнее. Язык программирования Ruby развивается медленно, с неспешностью, свойственной восточному, а точнее, азиатскому мировосприятию. Естественно нашлись те, кто и ему предвещает скорый закат.
Однако сообщество Ruby живее всех живых, а некоторые исследования показывают, что его популярность вновь растет. Как бы там ни было, Ruby сумел занять особое место в сфере веб-разработки. Как его создателям удалось этого добиться? Что происходит с ним сейчас? Какое будущее ждет Ruby?
Создатель Ruby Юкихиро Мацумото (он же «Matz») попытался взять лучшее из своих любимых языков программирования (Perl, Smalltalk, Eiffel, Ada и Lisp) и соединить в рамках нового языка функциональную и императивную парадигмы программирования. Он часто повторял философскую мысль о том, что пытается сделать Ruby естественным, но не простым языком, который отражает жизнь.
Осенью Matz планирует посетить Россию. Его визит будет приурочен к очередной конференции, посвященной Ruby on Rails.
24 февраля 1993 года считается днём рождения языка Ruby. Но в тот день было придумано только название для этого языка, и никакого кода еще не существовало. Мацумото выбирал между двумя вариантами названия — «Ruby (рубин)» и «Koral (корал)». Был выбран первый вариант, потому что это был камень по гороскопу одного из сотрудников Мацумото.
Первый публичный релиз Ruby 0.95 был представлен на японской внутренней телеконференции 21 декабря 1995 года.
Впоследствии ещё три версии Ruby были опубликованы в течение двух дней. Даже в ранних версиях Ruby уже были заложены возможности, которым Мацумото придавал особенное значение: объектно-ориентированное проектирование, классы с наследованием, итераторы, замыкание, обработка исключений и сборка мусора.
За период с 1995 по 2002 год вышло около двадцати книг о Ruby. В Японии он стал более популярным языком, чем Python.
Знакомство же международного сообщества началось после перевода его документации на английский язык и создания первых списков рассылки в 1998-м году. После 2000-го года началось распространение Ruby по всему миру, чему способствовало появление англоязычных книг, в первую очередь, «Programming Ruby: The Pragmatic Programmers' Guide» и «Why’s (Poignant) Guide to Ruby».
После релиза Ruby 1.3 в 1999 году заработал первый список рассылок ruby-talk на английском языке, который свидетельствовал о росте интереса к языку за пределами Японии.
Однако до 2004 года Ruby не был широко известен в Европе и США. Благодаря своим возможностям и большому количеству поддерживаемых платформ Ruby постепенно завоевывал аудиторию.
В 2004 году появился фреймворк Ruby on Rails. Он был создан Давидом Хейнемейером Ханссоном совместно с 37signals, расширен и усовершенствован усилиями команды разработчиков ядра Rails и сотнями open source разработчиков.
Переломные моменты
Ключевыми событиями в истории Ruby стали выход Ruby 1.8.0 в 2003-м и новой версии framework’а Ruby on Rails 2.0 в 2007 году. В это время значительно усилился интерес к использованию языка для серьёзных коммерческих проектов.
«Итак, Rails сделал Ruby популярным. Это факт. Я стал Ruby-разработчиком, что в свою очередь изменило мою карьеру и дало мне много удивительных возможностей, именно благодаря Rails. Многие рубисты тех дней прошли по тому же пути. Мы все здесь благодаря Rails. Во многих случаях, Rails на самом деле оказал огромное влияние на людей, и буквально улучшил им жизнь. Люди получили лучшие рабочие места, лучшие возможности и хорошие деньги. Это было радикальной сменой условий «игры» для многих из нас», писал Piotr Solnica.
Если до версии 1.8 язык развивался, сохраняя совместимость с предыдущими версиями, то позже разработчики Ruby, во главе с Якихиро Мацумото, отказались от полной совместимости. Поэтому разработка Ruby разделилась на две ветви: поддержка версий 1.8.* и создание новых версий 1.9.*, которые являются предтечей следующей версии языка, Ruby 2.
Серьёзные изменения к лучшему произошли с выходом Ruby 1.9.1 в 2009-м и Rails 3.0 в 2010-м году, когда большинство замечаний были учтены и исправлены.
Достижения
К 2011 году в Ruby/Rails были реализованы практически все наиболее перспективные технологии и подходы к программированию, таких как разработка через тестирование (TDD), полноценная модель реализации концепции MVC, работа с базами данных через ORM (ActiveRecord), шаблоны проектирования (Design Patterns), использование удобного JavaScript-framework’а Prototype (для простой работы с AJAX), работа с распределённой системой контроля версий Git (Github.com).
Фреймворк нашел применение в разработке SaaS (Cloud computing).
Ruby on Rails использовался при создании таких популярных сайтов, как Твиттер, SoundCloud, Airbnb, Diaspora, Groupon, Basecamp, GitHub, Hulu, Scribd, Kickstarter, Change.org.
31 марта 2012 года по результатам голосования был принят стандарт ISO/IEC 30170 на язык Ruby.
В ноябре 2015 года вышла версия Ruby 2.3.0-preview1. Уже несколько месяцев сообщество следит за релизом Ruby on Rails 5.0.
Согласно данным на июнь 2016 года, индекс TIOBE, который измеряет рост популярности языков программирования, показал, что Ruby занимает 10 место. Однако, это на 6 позиций выше по сравнению с прошлым годом.
Разные Ruby
Существует несколько реализаций Ruby: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby, Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM, MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone, Blue Ruby — реализация Ruby для виртуальной машины ABAP, MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы, mruby — реализация для встраивания в программы.
За годы существования официального интерпретатора его успели портировать под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие. Для Windows существует специализированный установщик RubyInstaller и есть возможность запуска под Cygwin для большей совместимости с Unix.
Со временем Ruby и Ruby on Rails стали практически синонимами — особенно среди непосвященных. Дело в том, что фреймворк Ruby on Rails стал выбором программистов по умолчанию. Он продолжает развиваться и остается по-прежнему бесплатным. Этот фреймворк описывает компоненты веб-приложения в рамках шаблона MVC (Model-View-Controller), а также предоставляет готовую интеграцию с сервером приложения и интерфейс для доступа к базе данных. Указанного инструментария достаточно, чтобы в считанные часы создать и запустить простой блог или частную веб-страницу.
Существуют и другие Ruby-фреймворки.
«Merb — проект, созданный Ezra Zygmuntowicz. Он начался как хак, чтобы сделать загрузку файлов быстрой и потокобезопасной. И он прошёл интересный путь от этого хака до модульного, потокобезопасного, быстрого full-stack фреймворка для разработки веб-приложений. Merb имел 3 режима: режим полного стека, режим API и микро-режим, в котором он был урезан до минимума. Это было самой быстрой вещью, когда-либо существовавшей в Ruby-мире. Это было более 7 лет назад», — рассказывает Piotr Solnica.
В 2008 году команда Merb вошла в состав Ruby on Rails.
Sinatra — для микросайтов и микросервисов до 50 строк кода. EventMachine — для асинхронных долгоиграющих задач. Если нужно разработать небольшое веб-приложение, то можно использовать Padrino.
«Padrino — более «сахарный» Sinatra. Достаточно удобен для небольших сайтов. И создания api. Альтернатива, к более избыточному и тяжелому Rails», пишет пользователь «Тостера» под ником frolin.
Критика
Что думают пользователи «Тостера» по поводу недостатков Ruby on Rails?
«Недостаток, который для меня поставил крест на руби и рельсах — отсутсвие вменяемого DataMapping (чуть более сложный и действенный аналог ActiveRecord) со всеми его замечательными DAO\Repository, Registry и так далее». (Кирилл Саксин, PHP-developer, Backend)
1. Рельса кушает много памяти. Рельса вообще избыточна для мелких проектов. Там лучше идут всякие Синатры, Падрино и так далее.
2. Трудности долговременной поддержки больших проектов.
3. Проблемы для хостеров. Создать и обслуживать PHP-хостинг гораздо проще. Есть, конечно locum.ru и heroku, да и всё, пожалуй.
4. Кадровая проблема. Найти [разработчика] на PHP или Java проще.
(Дмитрий)
«После написания пары тройки сайтов понял, что в принципе Rails и Ruby не имеют для меня смысла, и вернулся на Django и Python. По мне, из скриптовых языков Python — наше все. И под Desktop можно писать уже и под мобильные можно с Kivy. Да и тут Node.js уже есть со своей асинхронностью и возможностями в реалтайм-приложениях. Если рубисты не придумают чего-нибудь в ближайшие годы сверх ординарного для популяризации Ruby, он просто умрет, так как он просто станет никому не нужен». (Raidhon)
Для клиента:
1. Нет Wordpress. Да! Как только Wordpress перепишут на Ruby, его сразу начнут использовать все, кому не лень.
2. А можно мне сайт на Joomla? Просто у нас контент-менеджер уже привыкла к её админке.
3. А почему хостинг стоит 200 рублей? У меня сосед по офису вон за 40 купил.
Для программиста:
1. А где фигурные скобочки?
2. Магия. Очень много магии. Оно всё делает «само», вплоть до квази-версионирования базы данных по датам. К этому надо привыкнуть, что не все готовы делать.
3. У меня заняло два дня, чтобы смочь подключиться к mysql. Возможно, я не самый опытный программист, но обилие вопросов на stackoverflow, и не только, наводит на мысль, что половина желающих отсеялась на этом этапе и пошла ставить Wordpress.
(iliyaisd)
Аргументы в защиту Ruby
Благодаря детально описанному стандарту, которому должны соответствовать все пакеты и библиотеки на Ruby, разработка дополнений не составляет особого труда. Поэтому среди так называемых Ruby Gems (от англ. — драгоценный камень) можно найти модули для решения практически любых задач — от интеграции с социальными сетями и сторонними сервисами до готовых платформ для электронной коммерции.
Все, что нужно для использования сторонней библиотеки — это описать зависимость своего проекта от какой-то библиотеки, находящейся в удаленном или локальном репозитории, и при следующей сборке эта библиотека автоматически загрузится в приложение. Это также упрощает миграцию проекта между разработчиками, так как нет необходимости вручную делиться зависимостями для сборки проекта, пишут в одном из обзоров Ruby.
По поводу преимуществ этого языка программирования пользователь «Хабра» под ником urvalla в своей статье пишет следующее:
Язык программирования — это не только синтаксис, сборщик мусора, не только парадигма языка, и даже не столько его философия, в первую очередь — это коммьюнити и та кодовая база, которую это коммьюнити создало. Особенно сейчас, в эпоху OpenSource. И тут у Ruby первый жирный плюс в карму.
Известно утверждение о том, что Ruby медленный. И поспорить сложно, ведь Ruby интерпретируемый язык. И что характерно, чаще всего я это слышу от тех, кто пишет (исключительно) на PHP, который тоже интерпретируем, и по скорости в синтетических тестах находится примерно на том же уровне. Скорее всего, это отголоски дурной славы старых версий.
По факту, мне приходилось работать и с Rails и с Symfony2 — на реальных приложениях Rails быстрее при одинаковом уровне оптимизации.
И не нужно забывать, что и главная нагрузка, и бутылочные горлышки, зачастую — это базы данных, а веб-приложение — это всего-лишь прослойка бизнес-логики. А такая прослойка неплохо масштабируется.
Настоящее и будущее
Конференция разработчиков на Ruby и Rails
Мы пообщались с некоторыми Ruby-разработчиками по поводу того, что происходит с Ruby сейчас, а также узнали их мнение о перспективах проекта.
Где востребован Ruby и фреймворки на его основе в наши дни?
— Ruby своей популярностью во многом обязан фреймворку Ruby On Rails, поэтому основная его сфера применения сейчас — это веб-разработка и всё, что с ней связано.
Какие у него перспективы?
— Вокруг Ruby сформировано очень сильное комьюнити. Несмотря на некоторый спад интереса к языку в последнее время, Ruby продолжает активно развиваться и двигаться вперед.
Какой-то язык или технологию можно считать возможным «убийцей» Ruby?
— Ничего конкретного на ум не приходит. Есть Elixir и Crystal, но они, на мой взгляд, еще довольно молоды, и использовать их можно только на свой страх и риск. Лично я сейчас смотрю в сторону Go, но не в качестве альтернативы, а скорее дополнения, для решения специфических задач.
(Александр Типугин. Ruby-разработчик компании «ТМ»)
Где востребован Ruby и фреймворки на его основе в наши дни?
— Основная специализация языка программирования Ruby и фреймвока Ruby on Rails — разработка стартапов. На Ruby on Rails очень просто и быстро создавать уникальные и технически сложные проекты, которые вышли за рамки стандартных движков. Нужен сайт визитка — бери Wordpress. Нужен интернет магазин — купи «Битрикс».
А вот если нужен уникальный стартап, который состоит из «семи красных линий и все они должны быть перпендикулярны друг другу, причем некоторые должны быть нарисованы зеленым цветом, некоторые — прозрачным, плюс одна — в форме котенка», — вот это задача для Ruby on Rails.
Какие у него перспективы?
— Язык и фреймворк продолжают развиваться, а комьюнити — расти. В этом году в Москву на http://railsclub.ru приезжает создатель языка Юкихиро Мацумото. Все ждут пятой версии Rails, которая должна быть готова в самое ближайшее время.
Какой-то язык или технологию можно считать возможным «убийцей» Ruby?
— Хайп вокруг Ruby, который был в прошлые годы, спадает. Ruby перестает быть модным, но продолжает быть эффективным инструментом для построения стартапов. Убийц нет.
(Олег Балбеков, CEO Evrone)
И в конце вновь предоставим слово пользователю «Хабра» под ником urvalla:
Есть множество прекрасных языков и фреймворков для написания веб-приложений, и Ruby с Rails не являются серебряной пулей, которая убьет всех кроликов-оборотней сразу. Просто, на мой взгляд, если брать совокупность важных критериев, а не пытаться выбрать по одному-двум из них, RoR набирает действительно много очков.
В том числе и по зрелости — это уже давно не хипстерская платформа, в которой есть только потенциал, но еще и не старичок (а примеров и тех и других уйма). И старичком, я думаю, еще долго не станет, так как потенциал для роста и развития еще есть и у Ruby, и у Rails.