«Что за зверь?» — подумал я и полез искать информацию. То, что я нашел, меня, признаюсь, впечатлило.
Знакомьтесь — 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 в Праге.
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий