Сегодня мы выпустили небольшие обновления для 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 . |