Scala 2.9.0のリリースに伴い、Scala言語とAkkaフレームワークを組み合わせたTypesafeスタックも発表されました。ただし、Scalaの標準ライブラリにはアクターがあり、Akkaは独自の実装を使用しています。また、他の実装を探すと、LiftとScalazにも実装があることがわかります。
では、これらの実装の違いは何ですか?
この答えは本当に私のものではありません。 作成されました Viktor Klang(Akkaの名声)、David Pollak(Liftの名声)、Jason Zaugg(Scalazの名声)、Philipp Haller(Scalaの俳優の名声)の助けを借りて。
ここで行っているのはフォーマットすることだけです(Stack Overflowがテーブルをサポートしていると簡単になります)。
後で時間があれば埋める場所がいくつかあります。
Scalaz俳優
最小限の複雑さ。最大の一般性、モジュール性、および拡張性。
俳優を持ち上げる
最小限の複雑さ、明示的なライフサイクルを気にすることなくJVMによるガベージコレクション、他のScalaおよびJavaプログラムと一貫したエラー処理動作、軽量/小さなメモリフットプリント、メールボックス、静的にScalaと同様俳優とErlang俳優、高性能。
Scalaアクター
Scalaで完全なErlangアクターモデル、軽量/小さなメモリフットプリントを提供します。
アッカアクター
シンプルで透過的に配布可能で、高性能で、軽量で、適応性が高い。
ScalazアクターリフトアクターScalaアクターAkkaアクター 現在の安定版ver。 5 2.1 2.9.0 0.10 最小Scala ver。 2.8 2.7.7 2.8 最小Java ver。 1.5 1.5 1.6
ScalazアクターリフトアクターScalaアクターAkkaアクター 新しいアクターを生成するはいはいはいはい アクター内 メッセージを送信するはいはいはいはい 既知のアクター 動作の変更アクターははいはい:ネストされたはい: 次のメッセージに対して不変の反応/受信になる/なりません 監視は提供されませんいいえアクター:はい、はい (link/trapExit)リアクター:いいえ
ユーザーがアクターにパブリックメソッドを定義した場合、それらは外部から呼び出すことができますか?
Actor[A] extends A => ()
LiftActor
、SpecializeLiftActor[T]
Reactor[T]
、Actor extends Reactor[Any]
Actor[Any]
ScalazアクターリフトアクターScalaアクターAkkaアクター 手動開始いいえいいえはいはい 手動停止いいえいいえいいえはい 失敗時の再起動n/aはいはいアクターインスタンスごとに構成可能 セマンティクスを再起動するn/aアクターを再実行するアクターを再割り当てして安定した状態に復元し、 動作によって古いインスタンスが破棄される 構成可能性を再開するn/an/a X回、Y時間内にX回 ライフサイクルフックが提供されないライフサイクル動作preStart、postStop、preRestart、postRestart
ScalazアクターリフトアクターScalaアクターAkkaアクター ファイア・アンド・フォーゲット!メッセージ俳優! msgアクター! msgactorRef! msg a(message) Send-receive-reply(1を参照)アクター!? msgアクター!? msgactorRef !! msg 俳優!! msg Send-receive-future(2を参照)アクター!! msgactorRef !!! msg Send-result-of-promise(メッセージ)。 future.onComplete(f => to!f.result) future to(actor) アクターコマップを使用してアクターを作成しますfいいえいいえいいえ 関数(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
のクライスリ構成。
未定
ScalazアクターリフトアクターScalaアクターAkkaアクター reply-to-sender-in-message reply-to-message
ネストされた受信をサポートしますか?
未定
ScalazアクターリフトアクターScalaアクターAkkaアクター 実行メカニズムの名前 実行メカニズムは 構成可能 実行メカニズムは[.____。 .____。]アクターごとに指定 実行メカニズムのライフサイクル 明示的に管理する必要があります アクターごとのスレッドの実行 メカニズム イベント駆動型実行メカニズム メールボックスタイプ 一時的なメールボックスをサポート 永続的なメールボックスをサポート
ScalazアクターリフトアクターScalaアクターAkkaアクター 透過リモートn/aいいえはいはい actors トランスポートプロトコルn/an/a Java Akka Remote Protocol シリアル化(TCP上でのProtobuf) TCP上で 動的クラスタリングn/an/an/a商用サービス
未定
ScalazアクターリフトアクターScalaアクターAkkaアクター アクターの定義 アクターインスタンスの作成 アクターインスタンスの開始 停止アクターインスタンス
scala.actorsは、Erlangスタイルの同時実行性をScalaに実装する最初の真剣な試みであり、他のライブラリ設計者がより優れた(場合によっては)パフォーマンスを向上させるように促しました。実装。最大の問題(少なくとも私にとって)は、Erlangプロセスとは異なり、[〜#〜] otp [〜#〜](フォールトトレラントシステムの構築を可能にする)で補完されることです。 scala.actors優れた基盤、より高レベルのフレームワークを構築するために使用する必要のある安定したプリミティブのセットのみを提供します-結局のところ、独自のスーパーバイザーを作成する必要があります、アクターの上にあるアクター、有限状態マシンなどのカタログ。
そしてここでAkkaが助けになり、アクターベースの開発のためのフル機能のスタックを提供します:より慣用的なアクター、調整のための高レベルの抽象化のセット(ロードバランサー、アクタープールなど)およびフォールトトレラントシステム(スーパーバイザー、[〜#〜] otp [〜#〜]などから移植)、簡単に構成可能なスケジューラー(ディスパッチャー)などを構築します。申し訳ありませんが、失礼に聞こえますが、2.9.0 +にマージはありません-私はむしろ期待していますAkka stdlib実装を徐々に置き換えるアクター。
Scalaz。通常、私はすべてのプロジェクトの依存関係のリストにこのライブラリを持っていますが、何らかの理由で使用できない場合Akka、ノンブロッキングScalaz Promises(with sequence
)のようなすべての長所と、標準のアクターを組み合わせると、その日が節約されます。ただし、scala.actorsまたはAkkaの代わりにScalazアクターを使用したことはありません。