Язык Ruby: история становления и перспективы развития

Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы. Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому должен уметь быстро и эффективно объяснить ему, что делать.
Юкихиро Мацумото, создатель языка Ruby

Перед каждым, кто желает идти по пути программиста, рано или поздно встаёт вопрос выбора сферы разработки ПО (web, desktop, mobile, игровое, системное,..) и соответствующих инструментов (языков программирования, framework'ов, сред разработки...). Причём здесь, как и в строительстве, важную роль играют материалы и орудия, которые вы используете. По сути, они во многом определяют, что в конечном счёте будет построено, насколько быстро, какими свойствами оно будет обладать и т.д.

К примеру, строитель, работающий с деревом, будет склонен к спокойной и вдумчивой деятельности, кропотливой подгонке деталей, использованию ручного инструмента, индивидуальности в подходе. В то же время каменщик может действовать куда быстрее, пользуясь при этом электроинструментом и компенсируя некоторые неточности с помощью лишнего мастерка раствора :) Ну а бетонщик-монолитчик вообще не заморачивается, его задача — сделать всё максимально просто и надёжно в кратчайшие сроки, а кто уже там будет годами заниматься отделкой и дизайном помещений — его не интересует.

Так и с языками программирования: в каждой из сфер разработки ПО обычно есть минимум два-три языка, способных в принципе справиться с поставленной задачей. Однако подход к решению у этих языков обычно несколько отличается, и тут встаёт вопрос приоритетов в разработке и индивидуальных предпочтений программиста. В конечном итоге важно ваше мышление и понимание того, что нужно сделать и каким образом это потом поддерживать. Так что имеет смысл выбирать именно тот язык, на котором вам будет проще и удобней писать, который даст вам возможность раскрыть свой потенциал.

На то, чтобы более-менее близко познакомиться с новым языком, обычно уходит не менее месяца. Эта статья призвана ответить на вопрос, стоит ли потратить этот месяц на Ruby, или имеет смысл посмотреть в сторону других языков. Сам я сейчас также стою перед выбором: улучшать свои знания в PHP (пока я работал с ним самостоятельно во freelance'е — и на довольно простом уровне, сейчас же есть желание расти дальше) или попробовать «с нуля» в Ruby (сразу освоив с его помощью последние тренды в web-программировании и при этом получив, как я надеюсь, довольно современный и удобный инструмент для работы).

Попробовав разобраться, есть ли у Ruby будущее, и есть ли мне место в нём :), я перечитал несколько сотен статей, обсуждений, сравнений и т.д. Попробую привести мои мысли в более-менее системном виде:

1.
Ruby был задуман в 1993-м году японцем Юкихиро Мацумото, стремившимся создать язык, вобравший из других языков самые лучше подходы, облегчающие труд программиста. Он действовал во многом согласно постулату Абельсона и Сассмана: «Программы должны быть написаны так, чтобы их могли читать люди, и лишь иногда так, чтобы их могли выполнять машины». При этом Мацумото очень хотелось, чтобы это был истинно объектно-ориентированный, простой в использовании высокоуровневый язык. Таким образом, основное назначение Ruby — создание мощных и в то же время понятных программ, где важна не столько скорость работы программы, сколько малое время разработки, понятность и простота синтаксиса. Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Он также унаследовал идеологию языка Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими способами. Люди различны, и им для свободы необходима возможность выбирать: «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы те выбирали лучший путь, если это возможно».

2.
В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году (за период с 1995 по 2002 год в там вышло около двадцати книг о Ruby, и Ruby стал в этой стране более популярным языком, чем Python). Знакомство же международного сообщества началось после перевода его документации на английский язык и создания первых списков рассылки в 1998-м году. После 2000-го года началось распространение Ruby по всему миру, чему способствовало появление англоязычных книг, в первую очередь, «Programming Ruby: The Pragmatic Programmers' Guide» и «Why's (Poignant) Guide to Ruby». До 2004-го года Ruby не был широко известен в Европе и США, однако благодаря своим возможностям и большому количеству поддерживаемых платформ Ruby медленно, но верно умножал ряды своих приверженцев. Настоящий же всплеск интереса к Ruby спровоцировало появление Ruby-On-Rails (RoR) — framework'а для разработки web-приложений. RoR стал для Ruby т.н. killer application, катализатором, благодаря которому Ruby получил сейчас признание во всем мире.

3.
Настоящий скачок в развитии и интерес к использованию языка для серьёзных коммерческих проектов начался после выхода Ruby 1.8.0 в 2003-м и новой версии framework'а Ruby on Rails 2.0 в 2007-м году, что вывело программирование на Ruby на новый уровень. Ruby on Rails включает в себя заготовленный функционал для решения практически всех обыденных задач, с которыми сталкиваются современные веб-специалисты. Это значит, что и скорость разработки заметно возрастает. В качестве доказательства можно посмотреть видеоролик, в котором при помощи Ruby on Rails создается полноценный блог всего за пятнадцать минут. К сожалению, скорость работы самого приложения оставалась ещё довольно низкой, и это было одной из причин того, что популярность языка росла довольно медленно. Как заявлял в 2007-м году один из российских разработчиков: «Если говорить о рельсах, то это естественно прорыв. Всё, что я делал для себя на коленке 5 лет, вдруг преподнесли в рамках единого отличного фреймворка. Расстраивает производительность. Причем масштабируемость вполне себе приличная, но наращивать серверы для рельсовых приложений приходится чаще, чем для пайтоновских и перловых аналогов. Если бы не это, мы бы уже перешли на рельсы. Пока используем в целях обучения новых разработчиков правильным подходам к разработке и для прототипирования». К тому же ещё было проблематично найти хостинг (тем более бесплатный), на котором можно было бы разместить приложение на Ruby.

4.
Если до версии 1.8 язык развивался, сохраняя совместимость с предыдущими версиями, то позже разработчики Ruby, во главе с Якихиро Мацумото, решили, что для дальнейшего движения вперёд следует отказаться от 100%-й совместимости. Поэтому разработка Ruby разделилась на две ветви: поддержка версий 1.8.* и создание новых версий 1.9.*, которые являются предтечей следующей версии языка, Ruby 2. Серьёзные изменения к лучшему произошли с выходом Ruby 1.9.1 в 2009-м и Rails 3.0 в 2010-м году, когда большинство упрёков к языку потеряли основание и больше ничего не мешало Ruby занять достойное место среди остальных языков программирования.

Вот пример существенных изменений в скорости выполнения приложений на Ruby:




Согласно рейтингу TIOBE Programming Community Index, на сентябрь 2011-го года Ruby занимает 11-е место (Python — 8-е, PHP — 5-е), а это 1,5% всего рынка, что в мировом масштабе совсем неплохо ;) К тому же, если обратиться к аналитике Web And Scripting Programming Language Job Trends, то на август 2011-го ситуация будет такой:



Первый график показывает количество предложений работы, и с ним, в принципе, всё понятно, он совпадает с выводами TIOBE Index — спрос на Ruby-программистов есть, и довольно высокий, но он ниже, чем спрос на Python, и значительно ниже, чем на PHP, что и понятно — несравнимы сроки активного использования этих языков.



А вот здесь видно, как растёт интерес к различным языкам, и темпы развития Ruby впечатляют: за последние 2,5 года они возросли в 2,5 раза! Это даёт надежды на то, что у Ruby есть все шансы в скором времени занять свою нишу и в дальнейшем держать довольно большую часть рынка web-разработок. И если ещё в 2009-м году издательство «Питер» сомневалось, есть ли смысл издавать книгу «The Ruby Programming Language» на русском языке, то в начале 2011-го она всё-таки вышла в свет, что говорит о наличии возрастающего интереса к данному языку и среди русскоязычных программистов. Тем более вдохновляют заметки наподобие таких.

Есть и доступная аналитика с репозиториев Open Source проектов.



По статистике компании Black Duck Software, в январе-мае 2011 года на Github было опубликовано 1 153 059 коммитов (записей), на Sourceforge — 624 989, на Google Code — 287 901 и на CodePlex — 49 839. Вот статистика по языкам программирования:
  • C++ (362 077 коммитов)
  • Java (335 992 коммитов)
  • Python (296 896 коммитов)
  • C (264 468 коммитов)
  • JavaScript (251 557 коммитов)
  • Ruby (234 980 коммитов)
  • PHP (154 250 коммитов)
  • C# (125 848 коммитов)
  • Perl (89 720 коммитов)

К тому же Ruby/Rails на данный момент представляют реализацию практически всех наиболее перспективных технологий и подходов к программированию, таких как разработка через тестирование (TDD), полноценная модель реализации концепции MVC, работа с базами данных через ORM (ActiveRecord), шаблоны проектирования (Design Patterns), использование удобного JavaScript-framework'а Prototype (для простой работы с AJAX), работа с распределённой системой контроля версий Git (Github.com), ну и, конечно, его применение в разработке SaaS (Cloud computing), к примеру, на таких проектах, как Heroku.com, Engineyard.com, Basecamphq.com.

Однако здесь нужно понимать, что изучение языков и изучение новых технологий — разные вещи. Изучать новые технологии стоит всегда! Изучение технологии даёт знания и опыт (главное, чтобы ваш язык программирования эту технологию поддерживал). А опыт в нашем нелегком деле — ценнее сертификатов. Конечно, новые cutting-edge-технологии — это всегда какие-то риски, какими бы хорошими словами ни расписывались такие технологии и какими бы качествами они ни обладали. Это риски, связанные со сроками, с кадрами на рынке, с их опытом и уровнем и много других проблем. Однако в качестве заключения я хотел бы привести слова Yehuda Katz (главный разработчик и архитектор Ruby on Rails в EngineYard), сказанные им на RailsConf в 2010-м: «I don't know any Ruby developers who are unemployed» ;)
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 105
  • –7
    > Ruby был задуман в 1993-м году японцем Юкихиро Мацумото, стремившимся создать язык, вобравший из других языков самые лучше подходы, облегчающие труд программиста.

    HTML version timeline
    November 24, 1995
    HTML 2.0 was published as IETF RFC 1866.
    • +8
      Тут дело вкуса, конечно, но языки со статической типизацией нравятся мне намного больше. В основном, из-за боле жесткого «каркаса» кода, как бы сказать. В языках типа Ruby или PHP никогда не знаешь, когда подорвешся на ошибке, вызванной неправильным написанием функции или переменной. Конечно, написание тестов лечит, но в компилируемых языках таких ошибок все равно на порядки меньше. Соответственно, прогонов тестов и их исправление меньше тоже. И за счет большей информации о структуре кода refactoring его значительно проще. И сопровождение легче. И вообще… :)
      • –4
        Это как раз не минус а плюс языку. Тот же .net с каждым релизом становится все более лояльнее к динамической типизации (var, dynamic).
        Тут дело не вкуса а опыта. У меня, например, вообще не возникает никаких проблем вызванных неправильным написанием функции или переменной. Я просто проверяю перед тем как коммитить ;)
        • 0
          var — это скорее синтаксис. dynamic — да, нечто вроде variant.

          > Тут дело не вкуса а опыта. У меня, например, вообще не возникает никаких проблем вызванных неправильным написанием функции или переменной. Я просто проверяю перед тем как коммитить ;)

          Согласен, с опытом придет понимание, что статика лучше :-P Потому что проверять перед коммитом надо меньше :)
          • +2
            Я как раз наоборот с senior .net developer-а на php перешел, так что могу со всей ответственностью заявить, что динамика таки удобнее для меня ;)

            > Потому что проверять перед коммитом надо меньше
            Ну вы же не с закрытыми глазами коммитете, все равно проверяете ;)
            • +1
              > Я как раз наоборот с senior .net developer-а на php перешел, так что могу со всей ответственностью заявить, что динамика таки удобнее для меня ;)

              Дело вкуса. :)

              >> Потому что проверять перед коммитом надо меньше
              >Ну вы же не с закрытыми глазами коммитете, все равно проверяете ;)
              Ну да. Проверяю. Но не все покрыто тестами. Плюс все тесты прогнать — это около 2-х часов времени. Слишком высока цена оишкби. Да.
              • 0
                Я тоже, в бытность дотнетчика, на себе тельняшку рвал и доказывал своему другу (php-ку), что строгая типизация это наше все, и что с ней жить проще, удобней и спокойней.

                Но если бы у вас был опыт в обоих сверах, и в .net и в php, то вы могли бы объективно сравнивать динамическую со статической типизацией. А так как у вас опыт только в дотнете то ваше мнение субъективно ;)
                • +1
                  Та я вообще-то ZCE. С опытом программирования на PHP около 7 лет. Да и сейчас на нем пишу. Так что не извиняйте…
                  • +1
                    Кстати, опыт программирования на .NET около 4-x лет.
                    • 0
                      Дело вкуса. :)
            • +1
              Учили в школе по физике, что нельзя получить выигрыш в работе (A = F·s)? Можно лишь в силе или в расстоянии. Вот здесь то же самое. С одной стороны плюс, с другой минус… Это как посмотреть.
              • 0
                А вы в школе учили что можно выиграть в производительности или в кпд?
                • +1
                  Учил. Как говорится… и чё?
              • +1
                C# является только статически типизированным языком. dynamic — опирается на возможности самой CLR 4 (путем своего рода интроспекции). при компиляции переменной объявляется тип object.
              • 0
                Понятно, какие тогда есть по-твоему альтернативы? Java + Spring/Tapestry/JSF?
                • 0
                  мб Java/Scala + Play framework?
                • +1
                  Не силен в Java. Пока ушел в стек MS. Не жалею. Но под Web пишу мало, только для интранета на ASP.MVC немного.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Десктоп, в основном. Даже не GUI, а, скорее, логику. Ну и всякими разными вопросами занимаюсь. Вот сегодня копался в .NET interop — CCW, RCW, WinDBG и все в таком-же духе.
              • 0
                это в честь выхода 1.9.3? неплохо было бы пару слов про него, а так спасибо, интересно
                • 0
                  Нет, просто так случайно получилось, что эти два события совпали :)) Я пока не так хорошо разбираюсь в Ruby, чтобы писать что-то про особенности 1.9.3, тем более что судя по описанию, там нет особых «революционных» изменений. Зато выход новой версии подтвреждает тот факт, что язык жив и развивается ;)
                • +6
                  Руби клевый. В нем есть блоки и он хорошо заточен для создания eDSL. Я в целом по работе использую python (по ряду причин), а для себя ruby (потому что нравится) — за последние несколько лет их довольно хорошо сравнил. Ruby в целом производит благоприятное впечатление — лучше работает с вызовом shell (короче синтаксис, корректно обрабатывает пробелы), лучше интерполирует строки (при интерполяции можно вставлять произвольный код), DSL опять же. Но библиотек в комплекте поменьше и менее распространен как default scripting language (например, скачивая VirtualBox можно ожидать готовых биндингов для python).
                  • 0
                    Предлагаю для заинтересовавшихся закинуть в комментах список хороших книжек по последним версиям Ruby/RoR.
                    Я как раз такой заинтересовавшийся :)
                    • +2
                      Флэнаган Д., Мацумото Ю… Язык программирования Ruby (http://elbooka.com/raznaja-literatura/kniga-uchebnik/10648-flenagan-d-macumoto-yu-yazyk-programmirovaniya-ruby.html) — полагаю, эта вещь обязательна для прочтения :)
                      • +2
                        Yehuda Katz, Ryan Bigg. Rails 3 in Action (http://mirknig.com/knigi/programming/1181441404-rails-3-in-action.html) — пусть и на английском, но зато от основателя :)
                        • +2
                          > пусть и на английском,

                          ИМХО, для материалов про Ruby это не должно быть минусом. Когда искал, заметил что всякого на русском гораздо меньше чем на английском. Понятно, что так будет для любого языка, но все же тут совсем мало. Я б не стал на него смотреть, если бы не знал хоть как-нибудь английский. Или японский :)
                          • +1
                            Естественно, просто одно дело изучение нового языка, а другое — углубление в нём. Для того, чтобы начать, хочется чего-то простого и понятного, а не разбираться ещё к тому же с языком. Другой вопрос что те книги, что есть у нас переведённые, иногда ОЧЕНЬ сильно отстают по времени — переведено какое-нибудь 2nd Edition за 2009-й, а не переведённое 4th Edition — от 2011-го. А если за это время успел выйти Rails 3, к примеру — то это всё очень сильно меняет ;)
                        • +1
                          Sam Ruby — Agile web development with rails (http://www.torrents.net/torrent/1931845/Agile-Web-Development-with-Rails-4e-%28Rails-3.1%29---Ruby,-Thomas,-Hansson---Pragmatic-%282011%29.epub/) — тоже весьма полезная книга, насколько я могу судить.
                          • +2
                            Programming Ruby 1.9: The Pragmatic Programmers' Guide (http://rutracker.org/forum/viewtopic.php?t=3768727) — и ещё одна книга, на последок. Думаю, этих четырёх вполне хватит для начала ;)
                            • 0
                              Всем спасибо :)
                              • +1
                                Мне кажется, что стоит начать с этого — mislav.uniqpath.com/poignant-guide/
                                Перевод книг по руби на русском (которые видел я) просто отвратителен.
                              • +6
                                Я пишу на С++ (который очень люблю), изучаю и понемногу пишу на Haskell (который люблю не меньше, но понимаю пока похуже:)). Моё знакомство с Ruby состоялось полмесяца назад при помощи книги «Seven Languages in Seven Weeks». Так вот первое впечатление: язык реально создан для понимания программистами, а не компьютерами. Хороший код на Ruby читается практически так же легко, как текст на английском. Мне очень понравилось.
                                • 0
                                  Расскажите почему любите С++. А то мне тут в блог понабросали комментариев что С++ типа отстой и должен умереть и все такое…
                                  • 0
                                    Потому что он сложный (и тем не менее я его знаю), мощный, позволяет контролировать всё на низком уровне, но при этом не заставляет, программы на нём работают быстро.
                                    • 0
                                      Ваше сообщение ну как-будто про ассемблер написано.
                                      • 0
                                        Хотите сказать, что С++ — простой язык? ))
                                    • 0
                                      Why do they program in C++? lambda-the-ultimate.org/node/663
                                  • –2
                                    Очень нравится Руби, но вот производительность до сих пор отталкивает :(
                                    • 0
                                      Интересно, а поподробнее можно? С чем сравнивали, на каких проектах?
                                      • –2
                                        Сравнивал с тем, что знаю — пхп)) Не на проектах, простые синтетические тесты (знаю что они не очень то показательны) по типу перебора массива в несколько сотен тысяч элементов и прочее. В добавок сколько не читал про руби, в том числе и здесь, на хабре, все время натыкался на утверждение что руби скорее удобен чем производителен (в разных вариациях, но схожих по смыслу). Честно, буду очень рад увидеть воочию опровержение всего выше сказанного :)
                                        • +2
                                          Возьмите реальный тест и убедитесь :)

                                          В мире .NET тот же NHibernate, в сравнении с прямым доступом к БД, тоже тормозит на загрузке 1000 объектов. Причем (по моим тестам) на порядок, минимум раз в 10, а то и в 50. В пятьдесят. Медленнее. 50 мс заместо 1 мс. Зато экономит много часов разработки :)
                                          • +1
                                            Понятно, на тестах он уже не сильно уступает, да и со времени 1.8 Ruby успел немного реабилитироваться, а в последней версии 1.9.3 скорости уделено довольно большое внимание (http://linux.org.by/blog/1626/ruby-1-9-3/)
                                            • +1
                                              А вам не приходило в голову что время программиста намного дороже чем железяки?
                                              • 0
                                                Ответил чуть ниже :)
                                              • 0
                                                В веб-приложениях язык почти никогда не лимитирует производительность. На неграмотно составленном запросе теряешь гораздо больше. Если где-то получаются тормоза из-за самого Ruby, значит вы делаете это неправильно (или, как вариант, уже есть C-шное расширение для этой цели).
                                                • +3
                                                  Петя, и это опять не так.

                                                  Рельсы реально тормозят. Очень неприятно. Сложное приложение тратит по 500 мс на рендеринг шаблонов. Причем, тормоза такие: убираем везде блоки вида content_tag do end и в два раза ускоряем приложение.

                                                  500 мс на просто перекладывание данных в памяти — это чудовищное время.

                                                  Ruby 1.9 тут ничуть не быстрее 1.8. Ровно те же результаты в рамках 40%-ной погрешности.

                                                  Вопрос в том, что такие жуткие тормоза можно простить за те удобства, которые дают рельсы.
                                                  Тормозят и хер бы с ними.
                                                  • 0
                                                    Я потому и написал «почти». Про тормоза с шаблонами (правда, я натыкался на них с большими уровнями вложенности) я знаю.
                                                    • +1
                                                      По 1.9 vs 1.8 ваше мнение понятно. Вам — верю :) А вот по поводу рельс. Все эти печальные факты про вторые рельсы или про тройку? Вроде как в третьей версии очень много сделали для оптимизации.
                                                      • 0
                                                        Я не заметил серьезного изменения в скорости работы при смене 1.8 на 1.9

                                                        Под серьезным изменением я подразумеваю не единицы процентов, намерянные на синтетических тестах, а общее ускорение системы хотя бы в 2-4 раза.

                                                        Это я говорю про сайт среднего размера в котором используется порядка 40 паршиалов и темплейтов для генерации страницы.
                                                        • 0
                                                          Я не заметил серьезного изменения в скорости работы при смене 1.8 на 1.9

                                                          Эм, я спрашивал именно про разницу между RoR 2.x и 3.x

                                                          И если уже затронули тему интерпретаторов, а JRuby не пробовали в боевых условиях?
                                                          • 0
                                                            С 2 на 3 тоже разницы серьезной не заметно.

                                                            JRuby не пробовал, но я так понимаю, что и там никакой серьезной разницы нет.
                                                  • +3
                                                    к чертям синтетические тесты, это для тех, кто в форумах терплется, а не сайты делает.
                                              • 0
                                                В настоящее время производительность языка не так важна, как скорость разработки. Если, скажем, программист сможет справиться с заданием за месяц разработки на Ruby вместо двух, чем на более производительном языке, то покупка/аренда дополнительного оборудования(чтобы компенсировать медлительность языка) все равно будет дешевле, чем лишний месяц работы программиста.
                                                • 0
                                                  Для меня важнее производительность, в данный момент, ибо сейчас я работаю над своим проектом, а не в компании т.к. учеба и основная работа присутствуют :)
                                                  • 0
                                                    Тем более вы должны ценить свое время :)
                                              • +3
                                                >использование удобного JavaScript-framework'а Prototype
                                                в актуальной версии рельс 3.1 по-умолчанию используется jquery, ну и про удобство прототайпа в наше время говорить как-то не очень.
                                                Такое ощущение, что автор не работал плотно с рельсой
                                                • 0
                                                  Ну, если бы ты внимательно читал статью (5 абзац сверху), то заметил бы, что я пока подошёл к вопросу со стороны перспектив развития, а не нюансов языка. Я буду благодарен за любые стоящие дополнения, тем более что с JavaScript я работал немного. Может, подскажешь, что есть из более удобных инструментов для работы с ним?
                                                  • 0
                                                    www.quora.com/Is-Underscore-js-+-Backbone-js-+-jQuery-Prototype-js — я так понял, ты клонишь куда-то в эту сторону?
                                                    • +2
                                                      не совсем. Jquery по-умолчанию в рельсе используется для реализации всяких вспомогательных штук, вроде remote => true. Backbone.js — это в другую сторону (кстати, для него есть gem backbone-rails).
                                                      Опять же в 3.1 добавили поддержку coffeescript и asset pipeline. С одной стороны, это круто. Лично мне писать на кофескрипте приятнее, чем на чистом JS. Asset pipeline — забавная штука, но пока с ней разберешься в продакшене — наматеришься. С другой стороны, все эти навороты добавляют лишних зависимостей к рельсе, что медленно и, иногда, глючно.

                                                      А про руби написано клево. Правда, можно было бы рассказать про Матза, какой он хороший-нехороший, что он всячески не хотел видеть руби для веба и тд и тп. Ну и что он работает сейчас в хероку :)

                                                      Еще можно упомянуть руби/рэйлз сообщество, вроде Аарона «Сосисочная вечеринка» Патерсена, Хосе Валима, разные пипкоды и рейлзкасты. Ну да статья ваша
                                                      • 0
                                                        Думаю, если я всё-таки свяжу свою дальнейшую жизни (ну, или хотя бы часть её :) с Ruby, то тогда уже смогу написать что-то более глубокое и интересное, а пока это так, общий обзор ;) Но всё равно благодарю за участие и пояснения, буду думать!
                                                        • 0
                                                          А что за история с «Сосисочная вечеринка»? Это ведь не перевод тендерлав'а?
                                                          • 0
                                                            он частенько в твиттере пишет про сосисочные вечеринки и про мясо
                                                    • +1
                                                      Руби клёвый. Мы свинтили на него с Erlang (!!) и пока не жалеем.
                                                      • +4
                                                        Значит вы просто выбрали эрланг для не его задачи, либо не вышли в продакшн.
                                                        • 0
                                                          Макс? :)

                                                          Эрланг стоял у истоков той экспертной системы, о которой я спрашивал в ror2ru. Он там был реально в тему, использовался ERESYE, exmpp, процессы-сообщения. Руби здесь реально на грани применимости, но простота разработки победила здравый смысл. Реально, не жалею!

                                                          P.S. Все в продакшне :)
                                                      • 0
                                                        Использую Ruby 1.8.7 в связке не с RoR, а Sinatra. Доволен как слон. Скорость работы благодаря отсутствию лишних компонентов и присутствию Rake и DSL меня вполне устраивает.

                                                        А что нравится еще больше — это огромная скорость разработки благодаря множеству плюшек языка.
                                                        • 0
                                                          Переходите на 1.9.3. Версии 1.8.7 (и всей ветке 1.8 вообще) уже больше двух лет, и не осталось ни одной причины ее использовать.
                                                          • 0
                                                            есть REE, который якобы кушает меньше памяти, но проигрывает в производительности 1.9.2 и 1.9.3.
                                                            Хотя, я его год уже не использую
                                                            • 0
                                                              Основной источник экономии памяти — патч, позволяющий ОС использовать copy-on-write при fork()-е — уже давно внедрен в 1.9.

                                                              В REE есть кое-какие крутилочки, отсутствующие в 1.9, но если вы не Твиттер, то вряд ли они вам нужны. А если и нужны, то они подключаются обратно одной строкой в консоли через rvm.
                                                            • –2
                                                              Петя, это не так. Во-первых, в 1.9 до сих пор УЖАСНЫЕ проблемы с кодировкой. И они останутся навсегда.

                                                              Во-вторых, не весь софт с экстеншнами переведен на 1.9

                                                              Собственно, нет ни одной причины _апгрейдиться_ до 1.9 Начинать новый проект — скрепя сердце можно, апгрейдить — нет смысла.
                                                              • +1
                                                                Да? И в чем же заключаются УЖАСНЫЕ проблемы? Вот 1.8 — это и правда одна большая проблема с кодировками, а точнее полным их отсутствием.

                                                                Экстеншны «портируются» на 1.9 путем однокнопочной замены RString(value)->x на RSTRING_x(value). Не вижу в этом проблемы.
                                                                • 0
                                                                  Петя, от того что ты не видишь проблем, они не исчезают.

                                                                  Портировано не всё, причем со словами «портировать и не будем, потому что 1.8 работает». И это правда.

                                                                  В 1.8 проблем с кодировками не было в принципе. Всё было идеально. Просто идеально.

                                                                  1.9 с его дебильно задизайненной недосистемой недокодировок (юникода ведь в 1.9 как не было, так и нет) привел к тому, что многие вещи поломались непредсказуемо. Например, у меня был код, пакующий объекты в эрланговые термы. Он разломался непредсказуемо, понавтыкались везде лишние байтики на полуволшебной трансформации юникода в ASCII и обратно.

                                                                  Так что Петя, что касается того, что сломалось или нет и что было удобно или нет, то ты ещё просто зеленоват для этих суждений и у тебя явно маловато опыта собственно в рельсах.
                                                                  • 0
                                                                    Прежде чем переходить на личности, неплохо было бы, ну, для разнообразия, показать примеры неработающего кода и экстеншнов. Просто чтобы не выглядеть аггрессивным троллем, который не осилил 1.9.
                                                                    • 0
                                                                      Так ведь никто и не обещал полной обратной совместимости при переходе на 1.9, ведь правда?
                                                                      И очень хотелось бы посмотреть на правильно и грамотно задизайненную систему кодировок.

                                                                      P.S. У нас уже год работает сайт на 1.9, где люди пишут на ~20 разных языках помимо английского. Никаких ужасных проблем с кодировками мы так и не увидели.
                                                                      • 0
                                                                        Собственно да, я думаю чуть боле детальное описание проблем было бы очень полезным. Что называется «наступил на грабли сам, предупреди другого».
                                                                        • 0
                                                                          правильная и грамотно задизайненная система кодировок в 1.8

                                                                          opaque байтовый массив без магических трансформаций и аксессоры для юникода.

                                                                          99% людей, кричащих о юникодных строках даже близко не понимают масштаба проблем с юникодом. Ведь в нём нет букв. Вообще. Есть несколько слоёв разных абстракций, которые крайне сложны в обработке. А букв в юникоде нет. Все эти тонкости даже и не планировалось решать в ruby 1.9
                                                                    • –1
                                                                      >Петя, это не так. Во-первых, в 1.9 до сих пор УЖАСНЫЕ проблемы с кодировкой. И они останутся навсегда.

                                                                      Указывать кодировку в каждом файле такая большая проблема?
                                                                • +3
                                                                  Ратмир. Слова про «до версии 1.8 язык развивался, сохраняя совместимость с предыдущими версиями» — это ложь.

                                                                  С появлением и развитием рельс Матцумото начал умышленно вносить патчи типа chars и length, умышленно ломающие рельсы, причем в минорных версиях (патчлевелах)
                                                                  • +2
                                                                    Он так ненавидел веб?
                                                                    • +1
                                                                      дак да!
                                                                      • 0
                                                                        Но сейчас все немного поменялось, надеюсь. Он и на мобильные технологии, и на облака смотрит. Поправте если я не прав.
                                                                        • 0
                                                                          вроде как сообщали, что теперь Матц работает в heroku, и вроде бы как теперь можно надеяться на какие-то классные изменения, но лично я немного пессиместично настроен. А что творится в голове у Матца и как оно поменялось после трудоустройства — знает только он :)
                                                                      • +4
                                                                        Проблема в том, что он ненавидел рельсы. Это странное поведение, но может связано с фашизмом японцев.

                                                                        Он никогда не общался ни с кем из рельс, никогда не проводил совместные встречи или чего-то подобного и не координировал выпуск версий руби с единственным практическим применением своего творения.

                                                                        Более того: он вообще не считает, что рельсы — единственное благодаря чему мир узнал про руби. Наверное, это связано с конфликтом в голове, в которой с одной стороны мир заканчивается островом, а дальше живут варвары, а с другой стороны это совсем не так.

                                                                        Короче, чужая душа потемки, гадать можно о причинах сколько угодно. Результат прост: Матц принципиально не признает Rails в качестве killer app для Ruby, но реально это понимает и это его нервирует.

                                                                        Итоги простые: например выкатывают патч с методом Array#length, который _очень_ тонко ломает функциональность рельс. Я провозился почти день с дебаггером.

                                                                        Или chars. Юлик Тарханов делает прекрасную поддержку юникода в рельсы, Матц выкатывает апдейт, который целенаправленно использует те же методы, которые использует Юлик и тонко ломает его.

                                                                        Кодировки. Это просто нет цензурных слов. Всё работает. В 1.8 всё прекрасно и идеально работает. Ни у кого нет никаких проблем. Вообще. Матц выкатывает нечто, что требует уже больше полутора лет для адаптации. Полтора года возни с неработающей системой кодировок и всё ради того, что бы у белых варваров было побольше проблем с рельсами.

                                                                        Очень надеюсь, что сотрудничество в Хероку исправит эту ситуацию.
                                                                        • 0
                                                                          Весьма интересные вещи ты пишешь, если дела обстаят действительно так, то мой прогноз нуждается в корректировке. Попробую последить, как сейчас развивается ситуация, может действительно всё более-менее пришло в норму. С Синатра, я надеюсь, он не враждует? :)
                                                                          • 0
                                                                            говорю же: чужая душа потемки.
                                                                            • +3
                                                                              Интересный топик получился… читаешь сам топик — хочется писать на Руби, читаешь последние комментарии — полностью отбивает желание писать на Руби :(
                                                                              • 0
                                                                                Ну на самом деле все не так плохо. erlyvideo описывает политические игры людей. Это не мешает ему успешно использовать рельсы, насколько я понимаю. Разные подковерные игры есть всегда, там где есть люид. Не стоит мешать это с конечно технологией.

                                                                                Этак, надо отказаться от питона потому что гугль как то забил на unladen-swallow. Отказаться от JVM, потому что гладиолус оракл тот еще патентный тролль. PHP не использовать, потому что полезнейший функционал php-fpm долго не могли пропихнуть в апстрим. А от linux надо просто бежать, потому что там полный террариум в плане, какие патчи включать в ванильное ядро, а какие нет.

                                                                                Рельсы весьма хороши, просто нужно понимать их нишу и ограничения.

                                                                                • +1
                                                                                  Это все понятно, но когда создатель языка намеренно (?) ломает функционал инструментария — это как-то не комильфо все же. Если действительно такие косяки с кодировкой и UTF8 не поддерживается то я лучше подожду когда они там угомонятся :)
                                                                                  • 0
                                                                                    1) «Создается впечатление», а не «намеренно»
                                                                                    2) У руби код открыт, и матц — не единственный разработчик )))

                                                                                    Короче, не надо волноваться, белых варваров слишком много на одного гордого самурая, и кнопку форк еще никто не отменял.
                                                                                • 0
                                                                                  это неверное понимание. Всё таки есть рельсы и их авторы делают огромный объём работы, что бы всё работало.

                                                                                  Чего не скажешь об авторе руби.
                                                                        • –3
                                                                          Даже читать смешно. matz такой нехороший, аж костыли в языке стал убирать, лишь бы dhh напакостить :D
                                                                        • 0
                                                                          Кстати, товарищи — на днях было офф заявление, что ветка 1.8.7 будет поддерживаться до 2012 года. Потом багфиксы уже не будут на нее выпускать.
                                                                          Это плохая новость.
                                                                          А хорошая — на днях вышел руби 1.9.3!

                                                                          И я что-то не выкупил почему люди на ветке 1.9 плачут о кодировке — почти единственное отличие 1.8 и 1.9 как раз в введении НОРМАЛЬНОЙ поддержи разных кодировок. Епть.
                                                                          Раньше нужно было побайтово что-то пересобирать, или кучу костылей городить, теперь же есть
                                                                          #encoding:utf-8
                                                                          Неужели это плохо?
                                                                          А если нужно баловаться с регистром или вводом пользовательских данных — есть же гемы. Подключи и работай.
                                                                          • 0
                                                                            Имхо, С++, С# и Java в их современном виде достаточно для разработчика, не работающего под WEB.
                                                                            • 0
                                                                              Принцип «наименьшей неожиданности»??? да вы шутите! А вы пробовали разделить 3 на 2?
                                                                              • 0
                                                                                получается 0. И что? Для строго типизированного языка, коим руби является, это вполне ожидаем результат. Для того что бы ожидать, чтото все же нужно знать исходные данные. В манах на руби это описано.
                                                                                • 0
                                                                                  Вообще-то, 3/2 = 1… согласитесь — неожиданно? Тем более если ожидался 0, как вы утверждаете:)
                                                                                  • 0
                                                                                    Поймали, поймали :) Я второпях почему то поделил 2 на 3, и конечно получился 0. Но что 2 / 3 = 0, что 3 / 2 = 1 лично для меня вполне ожидаемо. int / int = int

                                                                                    Но это бессмысленный спор… Я вот могу ожидать, что руби мне будет кофе вариать. Беда ли это руби, что оно это не делает? Тут скорее вопрос бэкграунда. Для статической типизации вполне нормально. Кто работал до этого с ЯП со статической типизацией — тем привычно. Кто привык к динамической — конечно будет казаться странным. На вкус и цвет все фломастеры разные…
                                                                              • +1
                                                                                irb(main):001:0> 3/2
                                                                                => 1
                                                                                irb(main):002:0> 3/2.to_f
                                                                                => 1.5
                                                                                irb(main):003:0>

                                                                                ЧЯДНТ?
                                                                                (Ввиду моей кармы на Хабре, писать могу раз в час, так что звыняйте.)
                                                                                • 0
                                                                                  А мне вот кажется странным это поведение :) Я бы скорее ожидал ошибку для (3/2.to_f) ибо делим int на float (2.to_f — я так понимаю это вещественное) :)
                                                                                  • 0
                                                                                    Вообще-то мы делим объект на объект.
                                                                                    В руби же все объекты, сколько можно.

                                                                                    Когда в школе сначала Вас учат, что есть только положительные цифры и ноль — вы понимаете и кайфуете.
                                                                                    Через 5 лет Вам покажут, что есть еще и отрицальные числа — это ппц. Их же не видно!
                                                                                    Еще через 3 года Вам скажут, что считать нужно не с 1, а с 0 — это разрыв мозга. Что И и ИЛИ — это не то, что Вы всю жизнь знали. Апогей апофеоза будет откровение, что «0», зерро который, не такой уже и полный ноль. Потому что есть nill или null.
                                                                                    Потом, в конце — покажут двоичную систему и хекс. Если попадется олдскульный препод — он еще и про советскую троичную раскажет. И тд. и тп…

                                                                                    Вам каждые пару лет ломают стереотипы.

                                                                                    Если Вам мозолит глаза синтаксис — вот:
                                                                                    irb(main):001:0> 3/2
                                                                                    => 1
                                                                                    irb(main):002:0> 3/2.0
                                                                                    => 1.5
                                                                                    irb(main):003:0>
                                                                                    Так ведь проще?

                                                                                    Пора бы уже привыкнуть ) Принимать, юзать и кайфовать ^-^
                                                                                  • +1
                                                                                    у "." более высокий приоритет чем у "/", поэтому 3/2.to_f нужно читать как 3/(2.to_f)
                                                                                    • 0
                                                                                      Спасибо, буду знать :)

                                                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                  Самое читаемое