Realizzazione in
linguaggio
QAK di un sistema firefly che simula il comportamento delle lucciole.
Il problema principale riguarda la creazione di N = 100 QActor indipendenti, ognuno descritto dal modello presentato in fase di analisi, in modo da poter emettere periodicamente luce in modo svincolato dagli altri individui.
Per questo motivo è stato scelto di usare un'architettura basata su un QActor creator, che ha il compito di creare tutte le lucciole. Per fare ciò è stato necessario avvalersi della creazione di attori a runtime, definenone solo il template con la keyword
dynamicOnly
Creator ha un ruolo puramente iniziale, nel creare N firefly attraverso l'istruzione:
create firefly _"$num"
Tuttavia poichè il numero di lucciole da creare potrebbe non essere noto a priori e per implementare la nozione di ciclo iterativo di creazione delle lucciole, ci si avvale di un helper, che ha il compito di rispondere al messaggio del tipo:
msg: msg(start,dispatch,creator,helper,start(10),8)
dove start(10) è il contenuto di un messaggio di dispatch inviato dal creatore, per avviare il protocollo di creazione, specificando il numero di lucciole da costruire.
L'helper potrebbe essere impostato come attore in kotlin che reagisce al messaggio di start definito in precedenza. La reazione consiste proprio nell'implementazione di un ciclo di dispatch da inviare al creator, che corrispondono ognuna alla creazione di una luccuola.
L'Helper potrebbe essere dichiarato come segue:
CodedQActor helper context ctxfirefly className "fireflyqak.helper"
I Messaggi del tipo inviati dall'helper al creator sono:
msg(build,dispatch,helper,creator,build(1),9)
Dove build è il nome del messaggio e 1 è il numero identificatore specifico che definisce il nome dell'attore/lucciola ($num).
L'helepr ha il solo compito ciclico di inviare N messaggi dispatch al creator, che provvederà a produrre le lucciole necessarie.
Una volta ricevuto il messaggio di build il creator ha il solo compito di estrarre dal messaggio il numero id. della firefly da creare ed
usare la create definita prima per avviare il QActor corrispondente.