Intro
Contents
Dalla versione 7 il framework di Colibri mette a disposizione anche un linguaggio script, CLB , utilizzabile sia dallo sviluppatore che da un utente esperto dell’applicazione; buona parte degli sviluppi di Colibri nell’ultimo anno sono stati costruiti in questo modo, sia per l’interfaccia utente, sia per le comunicazioni fra oggetti del software. In particolare, i programmi da trasferire a GPU ed eseguiti dal framework OpenCL sono scritti in un sottoinsieme di CLB, che espande la sintassi OpenCL per facilitare la comunicazione dati con le classi dell’ambiente di sviluppo di Colibrì;
CLB è definito da un insieme di:
- parole chiave (clb_keyword) ,
- parametri (clb_params)
- operatori (clb_operator) ,
- funzioni (clb_function)
- programmi(clb_program)
É possibile implementare il linguaggio creando nuove clb_keyword e clb_function; i nuovi oggetti vengono salvati in librerie che possono, a loro volta, essere incluse (direttiva _$include ) in file di programmi eseguibili. Alcuni oggetti di CLB sono stati già presentati nell’articolo sulla classe gpu_program_preprocessor ( vedi direttive _$include e _$programs).
CLB è un linguaggio script interpretabile ed eseguibile nel framework di Colibrì; i programmi e le funzioni possono essere inseriti in librerie; Il programma è eseguibile attraverso il comando __clb_exec inserito nel codice c++:
__clb_exec(“my-program”)
CLB è stato sviluppato principalmente per scambiare informazioni con/fra gli oggetti del software visibili all’interprete tramite un identificatore; lo scambio è effettuato con il comando __send:
__send(_$clbobject, v_$p1,v_$p2,..,v_$pn)
dove _$clbobject è uno degli identificatori di oggetti visibili nel software(ad esempio _$dock_gamut) e _$p1 .. _$pn sono parametri di CLB (clb_params);
Se, ad esempio volessimo calcolare la riflettanza dalle coordinate lab (81,23,34) di un punto del gamut, potremmo usare questo codice CLB;
lab=__par(_$lab, (81,23,34)); refl=__par(_$reflectance); profile = __par(_$profile,"epson_my_profile"); __send(profile,_$get, refl, _$from, lab );
lab , refl e profile sono oggetti di tipo clb_params istanziati nelle prime tre righe; come è evidente sono tipizzate da _$lab , _$reflectance e _$profile; inserite nel comando __send trasmettono l’informazione all’oggetto _$profile, il quale provvederà a calcolare la riflettanza refl dalle coordinate lab.
il primo argomento (profile) definisce l’oggetto che riceve il comando;
la clb_keyword _$get definisce l’azione da effettuare
la clb_keyword _$from è la preposizione che identifica l’oggetto da trattare;
gli oggetti clb_param fra _$get .. $from in genere possono essere modificati dal comando
i parametri che seguono _$from sono gli argomenti forniti al calcolo, ed in genere non modificati dal comando.
Il comando precedente è equivalente alla frase inglese
get reflectance from Lab using this profile
il comando __get è, come abbiamo scritto, la funzione di interscambio informazioni fra gli oggetti di CLB; è da considerare come una importante funzione di basso livello, progettata per interfacciare le classi del framework di Colibri. Come vedremo, sarà possibile, ridefinendo proprie funzioni, non esporre il comando __get: ad esempio scrivere un programma CLB come il seguente
_lab(lab,81,23,34); _profile(profile, "epson_my_profile") refl =_profile.reflectance(lab);
In questo esempio abbiamo usato le funzioni _lab e _profile scritti in CLB (vedremo come..) e salvati in una libreria, per definire ed inizializzare le due istanze clb_params; l’interprete automaticamente creerà dall’ultima riga il comando
__send(profile,_$get, refl, _$from, lab );
Notare che la variabile refl è istanziata automaticamente in fase di assegnazione e non necessita di alcuna dichiarazione preventiva; descriveremo in dettaglio la costruzione di questo programma di esempio dopo avere discusso di clb_params, clb_operators e clb_function nei prossimi articoli di presentazione del linguaggio. Analizzeremo le modalità di costruzione delle funzioni _lab , _profile
Per concludere questa breve presentazione: abbiamo introdotto cinque classi di oggetti definibili in CLB:
clb_keyword, clb_params, clb_operator, clb_function, clb_programs
descriveremo ciascuna tipologia di oggetti in articoli diversi;
In questo primo articolo discuteremo degli oggetti di tipo clb_keyword che fanno parte del linguaggio e di come possono essere aggiunte nuove librerie di keywords; in seguito discuteremo degli oggetti clb_params, usati per comunicare fra gli oggetti, e di quali keyword sono associabili alle clb_params; negli articoli successivi discuteremo di operatori, funzioni ed infine di organizzazione dei programmi;