Pull to refresh

Why Ruby Matters(and PHP doesn't)

Reading time 3 min
Views 1.4K
Chapaevнаписал интересную статью – если статья понравилась – плюсуем человеку карму, что бы он мог размещать статьи сам (North)

Заранее прошу беременных женщин и детей не приступать к чтению и комментированию этой статьи — внутри будет жарко. Так же прошу не спускать всех собак на North'a, который разместил эту статью, так как мне это не позволяет сделать карма. Эта статья о том, почему я люблю Ruby & Rails и активно слежу за их развитием.


Сам я всю свою разработку веду на Java. На Хабре одним из критериев технологии является «How many of top 10 web 2.0 sites run on it?». Java же участвует в другом конкурсе: «How many of Fortune top 1000 companies heavily use it?». Да, это не Digg & Wikipedia, это IBM, Oracle, Google, Accenture, Voca, Sabre, Wallmart, 9 из 10 крупнейших банков мира и многие-многие другие.

Собственно возникает вопрос — почему же я обратил внимание на Ruby. Вообще программисту рекомендовано изучать хотя бы по одному новому языку в год, но Ruby попал в круг моих интересов из-за Rails. Всё началось с того, как я в очередной раз натрахавшись с Web-разработкой на Java отправился в поиски нового Java Web-framework'a. На Java их настолько много, что Neal Ford(архитектор в ThoughtWorks) однажды даже написал книжку на эту тему, а Matt Raible(создатель Appfuse) ежегодно проводит презентации на эту тему. Наверное любая идея была или воплощена на Java первой, либо портирована на неё. У нас есть и дедушка Strus, один из первых MVC Web-framework'ов, и template engine Velocity(привет Smarty!) и JSF(привет ASP.NET) и ещё много-много других. Так вот в то время как раз был один из пиков Rails-hype, которая просочилась и на TheServerSide, и на JavaLobby, так что я решил — а почему бы и не попробовать?

С того времени я смотрю на все Java Web-framework'и с презрением, Web надо писать на Rails и только на нём, в данном случае именно Rails является «best tool for the job». Просто потому что это KISS & DRY, что так сложно получить во всех Java web-framework'ах. Да, на работе приходится писать Web на Java, поэтому я выбрал меньшее из всех зол — Google Web Toolkit, и мне теперь не приходится встречаться со всеми этими JSP+JSTL/JSF/Velocity, кучкой XML-файлов для конфига всего и вся + какой-нибудь Struts/Spring MVC/Tapestry, добавить ещё модного AJAX: JavaScript + jQuery/Prototype. GWT позволяет писать только на Java, и не думать об остальном, включая JavaScript)

Итак, вернёмся к Ruby. So why it matters?

Имплементация.

Ruby пошёл по правильному пути. С версии 1.9 в руках у разработчиков уже не интерпретатор, а виртуальная машина. Это даёт Ruby большое преимущество в производительности перед остальными интерпретируемыми динамическими языками, в частности — PHP. Интерпретатор никогда не будет быстрее виртуальной машины. Вторая радость — наличие JRuby & IronRuby. В Enterprise сейчас можно попасть двумя путями: придумать технологию которая будет looking as damn good as Java/.Net, или будет с ними очень тесно интегрироваться. Ruby выбрал второй путь и пока что делает на нём очень большие успехи. К слову JRuby-имплементация уже обгоняет практически во всех тестах MRI(Ruby 1.8.6), а недавно ещё и Rails Performance подтянули и единственным затыком сейчас является порт Oniguruma, RegExp-библиотека Ruby, которая активно используется в Rails.

Возможности DSL & Meta-programming.

Это одна из «the next big thing». Domain Specific Languages — это языки предметной области, созданные для решения каких-то конкретных задач. Так вот Ruby позволяет Вам за счёт своей структуры легко самому создавать такие языки. DSL в самом Ruby-мире тьма: ActiveRecord(всякие has_many :items), Rake, RSpec и многие-многие другие. Что же такое DSL и как оно выглядит? DSL может выглядить так в каком-либо бизнес-приложении, где надо пополнить счёт пользователю и отправить ему соответствующее уведомление.

with Client «1234-567890» do
pay 500
send_mail :new_payment
end

Возьмём пример из Hpricot, HTML-парсера. Данный код загружает страничку, изменяет CSS-класс у ссылки и выводит результат на экран.

doc = Hpricot(open(«redhanded.hobix.com/index.html»))
(doc/«span.entryPermalink»).set(«class», «newLinks»)
(doc/"#sidebar").remove
puts doc

Вообще тема DSL заслуживает отдельного рассмотрения, и наверное когда-нибудь я напишу об этом отдельную статью.

Сообщество.

Rails-community чем-то напоминает мне Индийскую культуру с тремя её столпами: традиции, единство и многообразие. Наверное только с Rails вместе продуктивно могут работать такие люди как Matz, why the lucky stiff, DHH, Martin Fowler соблюдая DRY & KISS традиции и двигаясь вперёд, преподнося всё новые и новые идеи. Именно после Rails стал популярен REST, именно после Ruby адепты Smalltalk возрадовались возрождению DSL и мета-программирования, именно Ruby & Rails дали мне глоток воздуха после Java. И безоговорочно Ruby & Rails это следующая эволюционная ступень после Java к мечте всех имперских программистов Lisp)

На этом пока всё. Всем спасибо за внимание!
Tags:
Hubs:
+2
Comments 28
Comments Comments 28

Articles