Intro

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;

Pages: 1 2 3
Skip to toolbar