Статьи

Будущее JRuby с Томасом Энебо — разработчиком ядра JRuby

[img_assist | nid = 3197 | title = | desc = | link = none | align = right | width = 80 | height = 100] JRuby на сегодняшний день является самой популярной Java-реализацией языка программирования Ruby. Версия 1.1.2 была только что выпущена с улучшениями времени запуска, производительности и многопоточности. Томас Энебо, один из главных разработчиков JRuby, недавно рассказал мне о популярности языка, проекте JRuby и о том, когда можно использовать Ruby поверх Java.

Томас Энебо:  Ruby — это чисто объектно-ориентированный язык программирования с динамической типизацией. Он был написан так, чтобы чувствовать себя естественным и забавным для программиста, а не быть продуктивным (или заменить его другим отраслевым термином). В результате, это красивый, продуктивный язык, который, кажется, привлекает внимание большинства людей, которые его пробуют.

Ruby имеет полный набор библиотек, которые входят в дистрибутив Ruby (например, JRuby). Это похоже на Java в том, что вы можете ожидать приличный выбор API, который, как вы знаете, будет в любой установке Ruby. Дополнительные библиотеки устанавливаются с помощью простого средства упаковки, известного как ruby ​​gems. Вы всего в одной команде от новой библиотеки, которую вы хотите (и никаких кошмаров пути к классам).

Ruby в значительной степени популяризируется полнофункциональным веб-фреймворком Ruby on Rails. Сам Ruby начинал как язык в 1993 году, тогда как Ruby on Rails был запущен в 2004 году. Rails в настоящее время является «убийственным приложением» Ruby и помогает привлекать множество новых Rubyists. Люди, желающие ознакомиться с обзором Rails, должны зайти на http://www.rubyonrails.org/ .

Сагру: Каковы основные изменения после JRuby1.0?

Enebo: JRuby 1.1 был в основном ориентирован на производительность. У JRuby 1.0 был частичный компилятор, а у JRuby 1.1 был полный компилятор, который работает в режимах AOT или JIT. Компилятор — благо для производительности. Помимо компилятора, мы просмотрели большинство наших стандартных библиотек, от Array до Zlib, и настроили их так, чтобы они работали быстрее.

За это время мы также исправили тысячи проблем с совместимостью. Наша уверенность в совместимости с Ruby всегда высока. Люди могут запускать свои приложения, написанные для C-реализации Ruby, и это работает только на JRuby.

Сагру: Что будет в ближайшие несколько месяцев для JRuby?

Enebo: Следующая большая задача — переписать / реорганизовать нашу поддержку Java Integration (JI). JI — наша способность общаться с классами Java из Ruby. JI работает достаточно хорошо для всего, что я сделал с этим, и я думаю, что большинство людей довольны этим, но у нас есть много вопросов, поданных для более неясных угловых случаев. Реализация также грязная. Нам нужно вернуться и очистить вещи так же, как мы делали для других наших подсистем при разработке JRuby 1.1.

Мы также постоянно совершенствуемся. Ожидайте дальнейшего улучшения скорости в течение года.

И баги … ?

Сагру: С какими самыми большими проблемами вы сталкивались при написании JRuby?

Enebo: Огромная проблема с реализацией альтернативной реализации Ruby заключается в том, что спецификация Ruby является реализацией C. Не существует формальной спецификации для языка или основных библиотек. Это включает в себя разработку множества тестов. Это также включает в себя выбор библиотеки, которая не работает, а затем просто взломать, пока это не сработает. После многих лет разработки мы завоевали эту область, но это был болезненный процесс.

Я также впервые работал над реализацией языка. Подбирать материал и учиться в пути — это весело, но также и сложно, поскольку это может означать, что в конечном итоге вы меняете реализацию какой-то части каждый раз, когда узнаете что-то новое.

Сагру: Когда это правильный переход с Java на Ruby? В каких случаях Ruby имеет преимущество?

Enebo: Я думаю, что на эти вопросы сложно ответить. Я ежедневно программирую на Java и Ruby и иногда не уверен, какой из них выберу. Я скажу, что сложно сравнивать Java с точки зрения скорости в сравнении яблок с яблоками. OTOH, Ruby гораздо более выразителен, так что вы, вероятно, можете сделать более изощренное решение, чтобы превзойти Java в сравнении яблок и апельсинов. Ruby чувствует себя более легким с точки зрения ограничений, которые он налагает на вас как на программиста. Я могу написать что-то в части количества строк в Ruby, что я могу в Java. Я также считаю, что это может быть более читабельным. OTOH, статическая типизация Java допускает еще одну степень сложности в поддержке инструментов; поэтому такие вещи, как рефакторинг, довольно просты в Java. Таким образом, наличие большего, менее читаемого решения не так уж и вредно.

По сути, я бы порекомендовал людям опробовать язык и посмотреть, как им нравится язык Ruby. Мне нравится этот язык, и я бы не стал тратить так много времени на его реализацию на Java, если бы не делал этого (поэтому я предвзят).

Сагру: Светло ли будущее для Руби?

Энебо: ДА! Серьезно, это фантастический язык, который хорош не только для написания веб-приложений. С учетом сказанного, я считаю, что Ruby on Rails будет самой большой движущей силой для программистов, изучающих Ruby на данный момент. Для людей, которым надоело читать все это … Ruby — чрезвычайно мощный язык с приличным набором API. Вам НЕ нужно изучать Rails, чтобы использовать Ruby. Вот фрагмент библиотеки для работы с изображениями для JRuby (это всего 200 строк Ruby + Java2d под названием image_voodoo [на самом деле, вероятно, менее 60 строк составляют то, что делает этот пример]):

require 'image_voodoo'

file = ARGV[0]
ImageVoodoo.with_image(file) do |image|
image.cropped_thumbnail(100) { |img2| img2.save "#{file}_cropped.jpg" }
image.resize(100, 150) do |img2|
img2.save "#{file}.jpg"
img2.save "#{file}.png"
end
end

Я уверен, что каждый может прочитать этот код, даже не увидев Ruby. Можете ли вы представить, как написать что-то столь же мощное и выразительное, как эта библиотека, в 60 строк Java?