Se ho capito, il modello degli attori è proprio come il modello a oggetti, ma con alcune differenze:
- OGNI oggetto genera il proprio thread separato e non è un problema anche quando si hanno migliaia di oggetti.
- Gli attori non interagiscono chiamando funzioni e ottenendo valori di ritorno, ma inviando e ricevendo messaggi.
- Se non violi il modello, la tua app utilizzerà la concorrenza in tutta la sua potenza senza rischi di condizioni di gara.
- Tutto quello che puoi fare in OO puoi farlo usando gli attori ma meglio, il problema è che tutto ciò che abbiamo codificato negli ultimi anni era basato su OO - ma una transizione è imminente.
Quindi, ad esempio, supponiamo di dover definire una classe / attore vettoriale 3d, creare due istanze e chiamare un'operazione somma su di esse.
OGGETTO ORIENTATO:
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
MODELLO ATTORE:
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
}
È così? O ho sbagliato completamente?