Clojure core.async和Lamina

时间:2014-11-07 12:12:40

标签: clojure core.async lamina

core.async是Lamina的替代品还是打算成为Lamina的替代品?

如果没有,是否有明显的情况,哪一个优于另一个?

2 个答案:

答案 0 :(得分:14)

我是Lamina的作者。我认为core.async是一个制作精良的库,其设计比Lamina更清晰。有些事情我认为Lamina更擅长,主要与内省,表现和可扩展性有关。

我对core.async的一个大问题是,除了流抽象之外,它还带来了一个执行模型(一切都发生在core.async线程池中),这意味着如果你在任何地方使用它,它会约束代码库中其他所有内容的设计和实现。

我已经看过很多" async"库使得将流公开为core.async通道,这意味着如果您习惯使用core.async执行模型,则只能使用这些库。

我即将发布一个试图成为" minimal"流表示,可用于代替名为Manifold的core.async,Lamina,Java阻塞队列等。 Manifold流可以强制转换为core.async通道,Lamina通道等,任何这些东西都可以强制转换为Manifold流。

我认为" async"景观还很年轻,而且还有很多未探索的问题w.r.t.抽象的扩展程度,在生产中调试的容易程度等等。 JVM提供了许多用于内省的工具,但由于异步机制使用完全不同的执行模型,我们基本上从头开始重新开始。我不会告诉你在core.async上使用Lamina,但我要提醒的是,core.async是一个应用程序级抽象,而不是库级抽象。

答案 1 :(得分:3)

core.asyncLamina是两个不同的项目,它们并不打算互相替换。实际上,他们可以很好地一起玩 - 如果你想 - Lamina是面向流的方法,而core.async是面向消息的。

使用哪一个取决于您。在Lamina中,重要的是为通道定义的回调,而在core.async中,通道和go块是分离的,这更加灵活和模块化。