Язык программирования Crystal

Читая статью Интервью с Эриком Михаельс-Обером, RubyHero-2014 наткнулся на упоминание ЯП Crystal.«Что за зверь?» — подумал я и полез искать информацию. То, что я нашел, меня, признаюсь, впечатлило.Знакомьтесь — CrystalСоздавая язык, авторы задавались следующими целями: иметь максимально похожий на Ruby синтаксис иметь вывод типов вызывать код на C с помощью написания байндингов иметь возможность выполнения кода и кодогенерации на стадии компиляции компилировать все это в нативный код Лаконичность синтаксиса Ruby + скорость C? Как по мне — звучит неплохо.

Первый коммит в репозиторий на гитхабе был сделан 2-го сентябра 2012 года. На данный момент разработка языка находится на стадии альфы версии 0.7.1 — синтаксис и стандартная библиотека могут подвергаться изменениям.

Интересно, что в версии 0.7.0 весь IO по-умолчанию стал асинхронным. В Crystal, как и в Go, для укрощения многопоточности можно использовать каналы. Вот как выглядит использование каналов на примере вычисления простых чисел (пример из репозитория, портирован с Go):

def generate (chan) i = 2 loop do chan.send (i) i += 1 end end

def filter (in_chan, out_chan, prime) loop do i = in_chan.receive if i % prime!= 0 out_chan.send (i) end end end

def run_filter (in_chan, out_chan, prime) spawn { filter (in_chan, out_chan, prime) } end

ch = Channel (Int32).new spawn { generate (ch) }

100.times do prime = ch.receive puts prime ch1 = Channel (Int32).new run_filter (ch, ch1, prime) ch = ch1 end В репозитории можно найти внушительное количество примеров использования языка для решения самых разных задач, в их числе реализация красно-черных деревьев, трассировка лучей, решение задачи N тел, нейронная сеть, интерпретатор brainfuck. Также есть пример простого http-сервера.

6-го июля разработчики выступают с докладом о языке на конференции Curry On в Праге.

© Habrahabr.ru