Этот ответ на самом деле не мой. Это было произведено Виктором Клангом (из известности Акки) с помощью Дэвида Поллака (из славы Лифта), Джейсона Заугга (из славы Скалаза), Филиппа Халлера (из известности актеров Скалы).
Все, что я здесь делаю, - это форматирование (что было бы проще, если бы таблицы с поддержкой переполнения стека).
Есть несколько мест, которые я заполню позже, когда у меня будет больше времени.
Философия дизайна
Актеры Скалаза
Минимальная сложность. Максимальная общность, модульность и расширяемость.
Лифт Актер
Минимальная сложность: сборка мусора JVM, а не забота о явном жизненном цикле, поведение при обработке ошибок, совместимое с другими программами Scala и Java, легкий / маленький объем памяти, почтовый ящик, статически похожий на актеров Scala и Erlang, высокая производительность.
Актеры Scala
Предоставьте полную модель актера Эрланга в Scala, легкий / маленький объем памяти.
Akka Actors
Простой и прозрачно распространяемый, высокопроизводительный, легкий и легко адаптируемый.
Versioning
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 защищен. ActorRef.
Тип актера
- Скалаз Актеры:
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