Як я зрозумів, акторська модель подібна до об'єктної моделі, але з кількома відмінностями:
- КОЖЕН об’єкт породжує власну окрему нитку, і це не проблема, навіть якщо у вас є тисячі об'єктів.
- Актори не взаємодіють за допомогою виклику функцій та отримання зворотних значень, а натомість, надсилаючи та отримуючи повідомлення.
- Якщо ви не порушите цю модель, ваш додаток буде використовувати сукупність на повну потужність без жодних ризиків для перегонів.
- Все, що ви можете зробити в ОО, ви можете зробити, використовуючи акторів, але краще, проблема полягає в тому, що все, що ми кодували в останні роки, базувалося на ОО - але перехід неминучий.
Наприклад, припустимо, що я повинен визначити 3d векторний клас / актор, створити два екземпляри та викликати операцію з сумою на них.
ОБ'ЄКТ ОРІЄНТОВАНО:
class V3d {
constructor V3d(x,y,z) //bla
float x,y,z;
function sum(V3d b)
{
return V3d(x+b.x,y+b.y,z+b.z);
}
}
//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
МОДЕЛЬ АКТОРА:
actor V3d
{
constructor V3d(x,y,z) //bla
float x,y,z;
loop
{
receive 'sum',b:V3d :
send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
}
}
//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one
loop
{
receive 'sumResult',result:
drawPoint(result) //receives result and draws it
}
Є те, що його? Або я абсолютно помиляюся?