Потомки Ruby: Mirah, Reia, Rite

Высокая продуктивность программиста и удовольствие от разработки — оба эти достоинства присущи языку Ruby...

Posted by Марк Мельник on December 23, 2010

Высокая продуктивность программиста и удовольствие от разработки — оба эти достоинства присущи языку Ruby. Matz в обоих своих интервью делал большой акцент на философию языка Ruby в результате чего другие разработчики получили напутствие: Дизайн языка для людей! Не для машин! Впервые представленный в декабре 1995 Ruby (версия 0.95) значительно преобразился и окреп со времен того первого релиза. Теперь мы имеем полдюжины альтернативных реализаций (как например JRuby, Rubinius, Maglev, Ruby EE и т.д.), десятки тысяч библиотек и, возможно, одно из самых активных сообществ разработчиков.

Однако, так как Ruby создавался не в секретных лабораториях ЦРУ, заимствуя множество идей и идеологий от Smalltalk, Lisp, Perl и других языков, то теперь он таким же образом имеет влияет на новые языки программирования, которые идут дальше простого подражания, копирования MRI; Mirah, Reia, Rite и RubyGoLightly хорошие примеры таких новых языков. Некоторые из них разрабатываются только на бумаге, некоторые полностью экспериментальные, а некоторые реально работают и используются в продакшене. Давайте рассмотрим некоторых наиболее примечательных потомков Ruby поближе.

Mirah: незамысловатый Java

Mirah — продукт мозговой деятельности и упорного труда Чарльза Наттера (Charles Nutter) одного из разработчиков ядра JRuby. Mirah выгладит как Ruby, однако является статически типизированным языком и компилируется непосредственно в байт-код виртуальной java — машины. Фактически только синтаксис является тем общим, что объединяет Mirah и Ruby. Кстати, Mirah наследуется от ничего иного, как от парсера JRuby:

def fib(a:fixnum)
  if a < 2
    a
  else
    fib(a - 1) + fib(a - 2)
  end
end

puts fib(10) # => 55

Модель классов, типы и поведение объектов в Mirah полностью соответствуют модели и поведению классов в Java. Фактически благодаря тому, что код Mirah может компилироваться непосредственно в java байт-код (или java-souce) Mirah необходимы дополнительные runtime библиотеки. Mirah это упрощенный Java, Java с которым приятно работать. Самое приятное то, что Mirah уже сейчас полностью готов к реальному использованию и его можно просто установить в виде rubygem’а:

igrigorik ~> gem install mirah
Successfully installed bitescript-0.0.7
Successfully installed mirah-0.0.4-java
2 gems installed
igrigorik ~>
mirah -e ‘puts «Hello World»‘
Hello World

Одним из примеров использования Mirah в продакшене является проект Dubious — веб фреймворк написанный специально для GAP. Аналогично вы можете создавать приложения для платформы Android используя Mirah, который своим синтаксисом так сильно похож на наш любимый Ruby, однако компилируется в java. Благодаря активной группе, более чем 12 контрибюторам и недавнему переходу на лицензию Apache 2.0, язык определенно заслуживает внимания.

Reia: пишем скрипты для виртуальной машины Erlang.

ReiaReia — скриптовый язык на создание которого автора вдохновили такие языки как Ruby и Python. Reia предназначается для виртуальной машины Erlang (BEAM). Тонни Арчери (Tony Archeri) — автор языка, описывает его как лучший из обоих языков следующими словами: дружественный синтаксис, мета-программирование и могущество блоков унаследованное из Ruby, объединенное с параллелизмом Erlang, распределенностью и высокой ошибкоустойчивостью:

module Fibonacci
  def compute(a)
    if a < 2       
      a     
    else       
      compute(a - 1) + compute(a - 2)     
    end   
  end 
end 

"Fibonacci: #{Fibonacci.compute(10)}".puts() # => 55

Reia предлагает широкий диапазон собственных типов данных: числа, булевы значения, списки, кортежи, словари, диапазоны, бинарные данные и регулярные выражения. Объедините все это с поддержкой модулей, классов, переменных экземпляров классов, анонимными функциями и у вас есть многообещающий язык, работающий на виртуальной машине Erlang (и если вы когда-либо программировали на Erlang’e, то вы однозначно оцените отличный синтаксис Reia).

В данный момент нет официального релиза Reia, но если вы хотите поэкспериментировать с ним, то просто скопируйте репозиторий, запустите rake и через несколько минут вы сможете поиграться с интерпретатором Reia:

grigorik /git/reia> bin/ire
Reia Interactive Shell (prerelease)
Running on Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:true]

>> «Hello World».puts()
Hello World

Многие последовательные возможности Erlang’а уже отлично работают, в то время, как возможности параллельного программирования уже находятся на подходе. Если наличие силы OTP библиотеки Erlang и синтаксис Ruby кажется вам интересной идеей, то вы можете посетить гуглогруппу Reia.

RubyGoLightly: простой параллелизм с Go

Go — системный язык разработанный в стенах «корпорации добра» — Google, который разработан с целью улучшения производительности, оптимизации работы и упрощения параллелизма. Конструктор GoLight VM Элеонор МакХаг (Eleanor McHurgh), описывает язык Go так: легче чем Java, безопасней чем Си. Основанный на ее виртуальной машине GoLightlyVM, RubyGoLightly является экспериментальной переделкой tiny.rb, который сам по себе является подмножеством реализаций Ruby 1.8.

По возможностям RubyGoLightly является тем же tiny.rb, за исключением того, что весь код на Си заменен на соответствующий код на Go и запускается под GoLightly VM. Проект в последний год не обращал на себя внимания, так как Елеонор была сосредоточена на разработке VM. RubyGoLightly — это замечательный пример реализации нового, производного от Ruby языка для изучения которого вы можете последовать сюда.

Rite: встраиваемый Ruby от Matz’а

На последней RubyConf X Matz сообщил о том, что в данный момент он занимается разработкой Rite — встраиваемого Ruby, который должен будет превзойти Lua (который, как известно, является одним из лидеров скриптовых языков, например при написании скриптов для игр). Rite представляет собой потомка Ruby, с фокусом на предоставление легковесной и портируемой среды для встраивания в простые устройства, цифровые приборы, игры и т.д. 

Разработка Rite спонсируется японским правительством (проект на 2 года, с 2010 по 2011). Пока никаких исходников не было представлено публике и не будет до даты окончания разработки, однако Matz пообещал выпустить в мир Rite под лицензией MIT или GPL, а также создать публичный репозиторий на GitHub, возможно до конца 2011 года. Пока вы не можете видеть плоды работы Matz’а, но не все так печально, так как вы можете посмотреть его презентацию к выступлению о Rite на RubyConf X.

Взгляд в будущее

Каждый из представленных выше языков отличный в своем подходе, возможностях и даже проблемах, которые он пытается решить. Однако, независимо от того, делает ли он java проще, усиливает ли параллелизм Erlang или Go, или предназначается для встраивания в различные девайсы, общее в них — это фокус на продуктивности программиста и удовольствии которое мы получаем, когда быстро создаем отличные программы, поэтому почему бы не нести эту философию и эти концепции в другие языки?!

Возможно, в не таком далеком будущем мы будем писать приложения, работающие на JVM на Mirah, разрабатывать распределенные приложения на Reia и связывать наши цифровые приборы с веб при помощи Rite. Ruby как и любой другой язык всего лишь еще одна ступенька на пути к более лучшим языкам программирования.

Оригинал статьи на английском:  Beyond Ruby: Mirah, Reia, Rite

Нашли в тексте ошибку или неточность? — Напишите в комментариях.

Лучшая благодарность автору блога — ваши комментарии!