今天,我们发布了Quasar , Pulsar和Comsat的较小更新。 这些版本包含错误修复,以及一些新功能,包括改进的Kotlin API,用于Clojure的数据流变量以及在Undertow和Netty之上的Web Actors的快速实现。
Kotlin提供优雅的纤维和通道选择
Quasar 0.7.0为Quasar演员引入了自然的Kotlin API(感觉像Erlang)。 此版本包括一个用于处理光纤和通道的不错的API(感觉像Go):
现在,使用co.paralleluniverse.kotlin
的fiber
语法,可以co.paralleluniverse.kotlin
在Kotlin中创建和启动光纤:
fiber {
// The fiber will be created and will start executing this body
}
fiber
与新的优雅select
语法并驾齐驱,可在多个通道上进行选择:
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提供了两个数据流原语:用df-val
创建的vals和用df-var
创建的vars。 val是数据流常量。 可以将其值设置一次,然后读取多次。 var是数据流变量。 它可以多次设置其值,每个新值都可以触发其他变量的重新计算。 您还可以设置一个变量以保留历史值。
这是使用val和vars的简单示例:
(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))
在此示例中,var y
和z
取决于val a
和var x
,并且在x
发生变化时(设置a
之后)将重新计算其值。
有关更多详细信息和已修复的错误列表,请参见Pulsar 发行说明 。
Comsat 0.5.0:Web参与者进入Undertow和Netty
Comsat是一组Quasar集成模块,用于各种与Web相关的库。 除了库集成之外,Comsat还包括Web Actors ,这是一个作为Quasar actor编写交互式Web服务(支持纯HTTP和/或Web套接字和/或SSE)的API。 到目前为止,Web actor已在servlet之上实现,因此可以在任何标准servlet容器上运行。 Comsat 0.5.0添加了两个新的Web Actors部署选项:本机Undertow和Netty 。 这两个新的实现比基于servlet的实现具有更好的性能。 基准将随之而来!
有关更多详细信息和已修复的错误列表,请参见发行说明 。
请享用!