Monday, March 2, 2009

Reia - скриптовый язык для виртуальной машины Erlang`а

Лично я считаю Erlang одним из самых простых яызков программирования, а среди знакомых мне функциональных языков - самым простым. К тому же на Erlang благодаря его направленности на создание конкурентных приложений написано уже множество проектов, таких как Yaws, CouchDB, ejabberd, которые являются для него наилучшей рекламой.
Таким образом, Erlang - функциональный язык с простым и понятным синтаксисом, который нашёл свою нишу, и если вы интересуетесь созданием масштабируемых конкурентных систем - вам стоит выучить его. Однако из-за того, что Erlang - функциональный, его синтаксис и стиль понятен не всем - он слишком отличается от императивных языков(таких как С и подобные) и даже от Ruby/Python, которые включают в себя частицы функционального подхода.
Если Вы столкнулись с такой проблемой - обратите внимание на Reia - скриптовый Ruby/Python like язык для виртуальной машины BEAM(эта виртуальная машина используется также и в Erlang). Язык Reia совместим с Erlang и может использоваться для создания конкурентых приложений, однако используя при этом скриптовый синтаксис. Вот простейший пример:

module Foo
def bar
receive
when msg
["Received ",msg].join().puts()
bar()
pid = Process.spawn(fun {Foo.bar()})
pid ! "Hello"
pid ! "World"
Результат:
Received Hello
Received World
В язык заложено очень много возможностей(как по мне - слишком много :) ): отсылка сообщений процессам и объектам, встроенные регулярные выражения, pattern matching, асинхронные вызовы функции, лямбда функции, а также многое-многое другое. Многое из этого не реализовано(например, циклы), но часть функциональности уже существует и работает, как можно увидеть из примера.

Выводы

  1. Reia - многообещающий ЯП, которому, однако, не хватает разработчиков. Возможно, если реализации будет уделяться больше времени, то этот ЯП станет мостиком, по которому толпы приверженцев императивного подхода ринутся в страну Erlang
  2. Как по мне, синтаксис Reia перегружен. Этот вывод только подкрепляет моё убеждение, что Erlang - отлично спроектирован и очень элегантен

2 comments:

  1. Циклы, конечно, хочется, но пока под reia программлю уже месяца 3-4, ни разу не потребовались. Есть .each и .map

    Разработчиков для языка очень даже хватает.
    Просто хитрец Tony никому commit rights не даёт пока spec suite для языка не прописана до деталей.

    А Reia следует правилу: хочешь пользуйся [вставить нужное, например regexp, блоки, лямбды, сообщения], хочешь - не пользуйся.
    Синтаксис от этого не ухудшился.
    А по поводу pid!msg и receive, думаю, синтаксис ещё поменяется. ведь каждый объект - это процесс отдельный (не путать с системным процессом), и соответственно можно сделать obj.send(msg)
    в качестве receive - метод dispatch или receive, например

    кстати, не очень понимаю, что ты имеешь в виду под отложенным вызовом методов (да, теор часть хромает :)

    Phil Pirozhkov
    pirj@mail.ru

    ReplyDelete
  2. > кстати, не очень понимаю, что ты имеешь в виду под отложенным вызовом методов (да, теор часть хромает :)

    Я так обозвал асинхронные вызовы функций. Наверное, действительно, неудачно перевел, под отложенными вызовами вполне может пониматься другое. Спасибо, сейчас подправлю, чтобы не вызывать недоразумений.

    ReplyDelete