Pull to refresh

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

Reading time2 min
Views44K
Читая статью Интервью с Эриком Михаельс-Обером, 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 в Праге.
Tags:
Hubs:
+25
Comments37

Articles