Я читаю о типизированных актерах и интерфейсе типизированный актор выглядит следующим образом:
trait Squarer {
def squareDontCare(i: Int): Unit //fire-forget
def square(i: Int): Future[Int] //non-blocking send-request-reply
def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply
def squareNow(i: Int): Int //blocking send-request-reply
@throws(classOf[Exception]) //declare it or you will get an UndeclaredThrowableException
def squareTry(i: Int): Int //blocking send-request-reply with possible exception
}
Чем это отличается от простого Future?
Они действительно кажутся похожими, интерфейс у def square(i: Int): Future[Int]
одинаков.
Так ли это, что типизированные акторы прозрачны для местоположения (и могут запускаться на других узлах), а фьючерсы — нет?
Значит, типизированных акторов можно рассматривать как своего рода более ограниченную форму фьючерсов? В том смысле, что конструкция Future ограничена таким образом, что для построения Future нельзя использовать ничего, что не может пройти через провод (не сериализуемое). Например, замыкания (или любые другие функции) не могут быть переданы типизированным акторам, но могут использоваться для создания фьючерсов.