На самом деле это не мой ответ. Он был спродюсирован Виктором Клангом (прославившимся Akka) с помощью Дэвида Поллака (от Lift), Джейсона Заугга (от Scalaz), от Филиппа Халлера (от Scala Actors).
Все, что я здесь делаю, это форматирую (что было бы проще, если бы Stack Overflow поддерживал таблицы).
Есть несколько мест, которые я заполню позже, когда у меня будет больше времени.
Философия дизайна
Скалаз Актеры
Минимальная сложность. Максимальная универсальность, модульность и расширяемость.
Лифт-актеры
Минимальная сложность, сборка мусора с помощью JVM, а не беспокойство о явном жизненном цикле, поведение обработки ошибок, соответствующее другим программам Scala и Java, легкий / небольшой объем памяти, почтовый ящик, статически подобный акторам Scala и субъектам Erlang, высокая производительность.
Актеры Scala
Предоставьте полную модель акторов Erlang в Scala, легкий / небольшой объем памяти.
Акка Актеры
Простой и прозрачный, высокопроизводительный, легкий и легко адаптируемый.
Управление версиями
Scalaz Actors Lift Actors Scala Actors Akka Actors
Current stable ver. 5 2.1 2.9.0 0.10
Minimum Scala ver. 2.8 2.7.7 2.8
Minimum Java ver. 1.5 1.5 1.6
Поддержка модели актера
Scalaz Actors Lift Actors Scala Actors Akka Actors
Spawn new actors Yes Yes Yes Yes
inside of actor
Send messages to Yes Yes Yes Yes
known actor
Change behavior Actors are Yes Yes: nested Yes:
for next message immutable react/receive become/unbecome
Supervision Not provided No Actor: Yes, Yes
(link/trapExit) Reactor: No
Уровень государственной изоляции
Если пользователь определяет общедоступные методы для своих Актеров, можно ли их вызывать извне?
- Скалаз Актеры: н / д. Актер - это запечатанная черта.
- Лифт-актеры: Да
- Актеры Scala: Да
- Akka Actors: Нет, экземпляр актера защищен ActorRef.
Тип актера
- Scalaz Актеры:
Actor[A] extends A => ()
- Лифт-исполнители:
LiftActor
, SpecializeLiftActor[T]
- Актеры Scala:
Reactor[T]
, Actor extends Reactor[Any]
- Akka Актеры:
Actor[Any]
Управление жизненным циклом актера
Scalaz Actors Lift Actors Scala Actors Akka Actors
Manual start No No Yes Yes
Manual stop No No No Yes
Restart-on-failure n/a Yes Yes Configurable per actor instance
Restart semantics n/a Rerun actor Restore actor to stable state by re-allocating it and
behavior throw away the old instance
Restart configurability n/a n/a X times, X times within Y time
Lifecycle hooks provided No lifecycle act preStart, postStop, preRestart, postRestart
Режимы отправки сообщений
Scalaz Actors Lift Actors Scala Actors Akka Actors
Fire-forget a ! message actor ! msg actor ! msg actorRef ! msg
a(message)
Send-receive-reply (see 1) actor !? msg actor !? msg actorRef !! msg
actor !! msg
Send-receive-future (see 2) actor !! msg actorRef !!! msg
Send-result-of- promise(message). future.onComplete( f => to ! f.result )
future to(actor)
Compose actor with actor comap f No No No
function (see 3)
(1) Таким актором становится любая функция f:
val a: Msg => Promise[Rep] = f.promise
val reply: Rep = a(msg).get
(2) Таким актором становится любая функция f:
val a = f.promise
val replyFuture = a(message)
(3) Контравариантный функтор: actor comap f
. Также состав Клейсли в Promise
.
Режимы ответа на сообщение
TBD
Scalaz Actors Lift Actors Scala Actors Akka Actors
reply-to-sender-in-message
reply-to-message
Обработка сообщений
Поддерживает вложенные приемники?
- Актеры Скалаз: -
- Лифт-актеры: Да (с небольшой ручной кодировкой).
- Акторы Scala: да, как получение на основе потоков, так и реагирование на основе событий.
- Akka Actors: Нет, вложение может со временем привести к утечке памяти и снижению производительности.
Механизм выполнения сообщений
TBD
Scalaz Actors Lift Actors Scala Actors Akka Actors
Name for Execution Mechanism
Execution Mechanism is
configurable
Execution Mechanism can be
specified on a per-actor basis
Lifecycle of Execution Mechanism
must be explicitly managed
Thread-per-actor execution
mechanism
Event-driven execution mechanism
Mailbox type
Supports transient mailboxes
Supports persistent mailboxes
Распространение / удаленные участники
Scalaz Actors Lift Actors Scala Actors Akka Actors
Transparent remote n/a No Yes Yes
actors
Transport protocol n/a n/a Java Akka Remote Protocol
serialization (Protobuf on top of TCP)
on top of TCP
Dynamic clustering n/a n/a n/a In commercial offering
Howtos
TBD
Scalaz Actors Lift Actors Scala Actors Akka Actors
Define an actor
Create an actor instance
Start an actor instance
Stop an actor instance
person
Daniel C. Sobral
schedule
13.05.2011