Статьи

Новые версии с улучшенным API Kotlin, потоком данных для Clojure и более быстрыми веб-актерами

Сегодня мы выпустили небольшие обновления для Quasar , Pulsar и Comsat . Релизы содержат исправления ошибок и некоторые новые функции, включая улучшенный API Kotlin, переменные потока данных для Clojure и быструю реализацию веб-актеров поверх Undertow и Netty .

Элегантные волокна и выбор каналов с Kotlin

Quasar 0.7.0 представил естественный API Kotlin (который походит на Erlang) для актеров Quasar. Этот выпуск включает в себя приятный API для работы с волокнами и каналами (который напоминает Go):

Создание и запуск оптоволокна в Kotlin теперь не составляет труда с синтаксисом fiber в co.paralleluniverse.kotlin :

1
2
3
fiber {
  // The fiber will be created and will start executing this body
}

fiber идет рука об руку с новым и элегантным синтаксисом выбора для выбора на нескольких каналах:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
val ch1 = Channels.newChannel<Int>(1)
val ch2 = Channels.newChannel<Int>(1)
 
assertTrue (
    fiber {
        select(Receive(ch1), Send(ch2, 2)) {
            it
        }
    }.get() is Send
)
 
ch1.send(1)
 
assertTrue (
    fiber {
        select(Receive(ch1), Send(ch2, 2)) {
            when (it) {
                is Receive -> it.msg
                is Send -> 0
                else -> -1
            }
        }
    }.get() == 1
)}

См. Примечания к выпуску Quasar для получения более подробной информации и списка исправленных ошибок.

Переменные потока данных

В Pulsar появился новый API для переменных потока данных (которые до сих пор были доступны только в Java API).

Поток данных, или реактивное программирование, представляет собой вычисление, описываемое путем составления переменных, значение которых может быть установлено (и, возможно, изменено) в любой момент времени, не заботясь о том, когда эти значения установлены. Pulsar предоставляет два примитива потока данных: vals, созданный с помощью df-val , и vars, созданный с помощью df-var . Val — это константа потока данных. Значение может быть установлено один раз и считано несколько раз. Var — это переменная потока данных. Его значение может быть установлено несколько раз, и каждое новое значение может инициировать пересчет других переменных. Вы также можете установить переменную для сохранения исторических значений.

Вот простой пример использования vals и vars:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
(let [a (df-val)
      x (df-var)
      y (df-var #(* @a @x)) ; this var has a formula
      z (df-var #(+ @a @x))
      r (df-var #(let [v (+ @a @y @z)] ; a formula with side-effects
                      (println "res: " v)
                      v))
      f (fiber
          (loop [i 0]
            (when (< i 5)
              (sleep 50)
              (x i) ; sets the value of x
              (recur (inc i)))))]
    (sleep 10)
    (a 3) ; triggers everything by setting a
    (join f))

В этих примерах переменные y и z зависят от val a и var x , и их значения будут пересчитываться — после установки a — всякий раз, когда x изменяется.

См. Примечания к выпуску Pulsar для получения дополнительной информации и списка исправленных ошибок.

Comsat 0.5.0: веб-актеры идут вразрез и нетти

Comsat представляет собой набор модулей интеграции Quasar для различных веб-библиотек. В дополнение к интеграции библиотек, Comsat включает веб-акторы , API для написания интерактивных веб-сервисов (с поддержкой простых HTTP и / или веб-сокетов и / или SSE) в качестве акторов Quasar. До сих пор веб-акторы были реализованы поверх сервлетов и поэтому могли работать на любом стандартном контейнере сервлетов. Comsat 0.5.0 добавляет два новых варианта развертывания Web Actors: собственный Undertow и Netty . Две новые реализации имеют лучшую производительность, чем реализация на основе сервлетов. Контрольные показатели будут следовать!

См. Примечания к выпуску для получения дополнительной информации и списка исправленных ошибок.

Наслаждайтесь!

Ссылка: Новые выпуски с улучшенным API Kotlin, потоком данных для Clojure и более быстрыми веб-актерами от нашего партнера по JCG Фабио Тудоне в блоге Parallel Universe .