Язык программирования 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 в Праге.

ссылка на оригинал статьи http://habrahabr.ru/post/258083/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *