• Non ci sono risultati.

3.4 Modello a Event Loops Comunicanti

3.4.1 Modello ad Attori

In questa parte si far`a una breve introduzione al modello degli attori che, in un certo senso, rappresenta un modello intermediario tra quello ad eventi illustrato nelle sezioni precedenti (e che verr`a approfondito nelle sue imple- mentazioni pi`u note, appartenenti al Web, dal capitolo 4) e quello ad agenti, che verr`a introdotto nel capitolo 5.

CAPITOLO 3. DAI THREAD AL MODELLO AD EVENTI 31

Figura 3.11: Rappresentazione di Attori, entit`a auto-contenute e concorrenti in grado di comunicare tramite scambio di messaggi

Il modello ad attori `e molto simile, in tutto e per tutto, a quello ad Event Loops comunicanti. Si pu`o dire che gli Attori implementino il modello ad eventi, utilizzando nomi distinti per identificare strutture analoghe.

Gli Attori sono entit`a autonome ed auto-contenute, che operano concor- rentemente e con modalit`a asincrone scambia messaggi con gli altri Attori, ne crea di nuovi e aggiorna il proprio stato (figura 3.11). Un Sistema ad Attori consiste in una collezione di Attori, i quali possono interagire, invian- do o ricevendo messaggi, con altri Attori situati all’interno o all’esterno del sistema in cui sono inseriti [12]. Ogni Attore dispone di una Mailbox, dove vengono accodati i messaggi, e di un proprio stato locale ad accesso esclu- sivo. Gli Attori hanno un comportamento puramente reattivo, rimangono in attesa di poter prelevare e processare un messaggio della propria Mail- box. Ad ogni tipologia di messaggio corrisponde l’esecuzione di un handler; questa esecuzione viene definita atomica poich´e prima di poter processare il messaggio successivo, si deve terminare l’esecuzione l’handler corrente. Tre sono le principali tipologie di azioni:

32 CAPITOLO 3. DAI THREAD AL MODELLO AD EVENTI • Creare un nuovo attore;

• Aggiornare il proprio stato locale.

Una rappresentazione in pseudo-codice del ciclo di vita di un Attore pu`o essere la seguente: while ( true ) { Message msg = m a i l b o x . n e x t Me s s a g e ( ) ; MessageHandler h = s e l e c t M e s s a g e H a n d l e r ( msg ) ; MessageArguments a r g s = getMessageArguments ( msg ) ; e x e c u t e M e s s a g e H a n d l e r ( h , a r g s ) ; }

Riprendendo il modello ad eventi descritto in 3.3 ed in 3.4, `e possibile ritrovare tutti gli elementi caratteristici in quello ad Attori. L’Event Queue altro non `e che la Mailbox, contenente gli Eventi nel primo caso o i Messaggi nel secondo caso. In entrambi i casi ci si blocca finch´e non c’`e almeno un elemento della coda. Ad ogni elemento (messaggio o evento che sia) corri- sponde un handler che viene eseguito fino al suo termine prima di processare l’elemento successivo (semantica macro-step).

Le tecnologie ad Attori sono diventate molto popolari, specialmente nel- lo sviluppo di sistemi concorrenti/distribuiti/mobile, fornendo una valida alternativa nel mainstream al modello multi-thread.

Capitolo 4

Web Development oggi

Nell’introduzione e nel corso dei precedenti capitoli, si `e fatto continuamente riferimento a JavScript. Questo linguaggio, assieme ad HTML, CSS e DOM, `

e una delle features principali di quello che `e il nuovo standard HTML5. JavScript ed il suo modello ad eventi hanno avuto un importanza sem- pre maggiore negli anni, grazie anche all’implementazione di librerie che ne hanno semplificato lo sviluppo e che di fatto sono diventate degli standard (su tutte jQuery). La sua popolarit`a non si `e limitata solo al browser ma si `e diffusa anche in altri ambiti; lato server ad esempio troviamo Node.js, piattaforma software scritta in JavScript progettata per massimizzare l’ef- ficienza e limitare l’overhead dovuto alle operazioni di I/O. Tuttavia non si deve pensare a JavScript come unica possibilit`a per lo sviluppo di appli- cazioni web. Nonostante l’enorme diffusione del suddetto linguaggio, molte alternative si stanno presentando per lo sviluppo di Web Applications, che cercano di superare alcune delle lacune di JavScript fornendo al tempo stes- so tool atti alla semplificazione dello sviluppo di programmi web. Tra le varie alternative, si citano TypeScript e Dart.

La prima `e la proposta free ed open-source di Microsoft. Si tratta di un linguaggio di programmazione che estende la sintassi di base di JavScript, introducendo nuove features quali le annotazioni di tipo (grazie alle quali `e possibile fare debug sui tipi a compile-time), le interfacce e le classi analo- ghe al paradigma object-oriented, il supporto ai moduli. La particolarit`a di TypeScript `e che si tratta di un super-set di JavScript, quindi un program- ma scritto in JavScript `e al tempo stesso valido per TypeScript. Questo rende possibile, con TypeScript, il riutilizzo di codice esistente JavScript,

34 CAPITOLO 4. WEB DEVELOPMENT OGGI riutilizzandone le librerie di interesse.

La seconda proposta `e quella sviluppata da Google, con lo scopo di essere la nuova lingua franca del Web. Dart, al contrario di TypeScript, `

e un linguaggio totalmente a se stante, nonostante riprenda molte delle astrazioni diventate popolari in JavScript.

Si precisa che ad oggi, la maggior parte delle alternative proposte, se non proprio la totalit`a, presenta un compilatore da codice sorgente a codice JavScript, TypeScript e Dart inclusi.

4.1

JavScript

JavScript nacque con lo scopo di dare interattivit`a e dinamicit`a alle pagine HTML. Nonostante il nome, non ha nulla a che fare con Java, l’unica simi- litudine `e legata al fatto che entrambi adottano la sintassi del C; oltretutto il nome ufficiale `e ECMAScript. Sviluppato inizialmente da Netscape, con il nome di LiveScript, ed introdotto in Netscape 2 nel 1995, JavScript `e diventato standard ECMA (Eurioean Computer Manufactures Association) (ECMA-262) nel 1997 ed `e anche uno standard ISO (ISO/IEC 16262).

JavScript `e un linguaggio di scripting interpretato e non compilato, `e object-based ma non class-based (esiste cio`e il concetto di oggetto ma non di classe) ed `e debolmente tipizzato. Le variabili infatti vengono semplicemente dichiarato usando la keyword var, non hanno un tipo. Al contrario, sono i dati ad averlo.

In JavScript esisono solo due categorie di tipi: • Tipi Primitivi: numeri, booleani e stringhe; • Oggetti:

– Oggetti generici; – Funzioni;

– Array;

– Espressioni regolari;

– Oggetti predefiniti: Date, Math, etc.; – Oggetti wrapper: String, Number, Boolean;

CAPITOLO 4. WEB DEVELOPMENT OGGI 35

Figura 4.1: Javascript Event Loop Model

– Oggetti definiti dall’utente: mediante la definizione di un costruttore.

Notare come anche le funzioni vengono trattate come oggetti. Sono entit`a di prima classe che possono essere assegnate ad una variabile, passate come un argomento, ritornate da altre funzioni, e manipolate come tutti gli altri oggetti

Documenti correlati