XVRC2 Emanuele Ruffaldi Giugno 2006
Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J
Estensioni del Linguaggio ► Utilizzo di tipi ► Dichiarazione opzionale di tipi per variabili, argomenti, funzoni ► Compatibile con S3D attuale ► Proprieta’ per le classi ► Invocazione di metodi associati (es. get/setName) ► Metodi per tipi primitivi ► Per stringhe, array e vettori L
Estensione - Tipi ► Tipi possibili int,float,string,bool vector e vector[N] con dimensione array Classi e tipo generico object void any = tipo generico auto ► I tipi vengono validati e propagati dal compilatore ► Quando non e’ possibile si usa il tipo generico any L
Estensioni - Dichiarazioni ► Variabili var myVar : int ► Funzioni function myFx(a : vector, b : float) : void ► Quando non viene specificato e’ any ► La sintassi scelta e’ compatibile con la sintassi corrente di XVR. La retrocompatibilita’ e’ ottenibile usando commenti: function myFx(a /*: vector*/, b /*: float*/) /*: void*/ ► Le dichiarazioni extern valgono anche per le variabili e per le classi L
Estensioni - auto ► Il tipo auto viene usato per dire che una variabile ha un tipo dipendente dall’espressione di inizializzazione (C#3.0) var myVar : auto = “Hello” Ora myVar e’ di tipo stringa ► Utile nel caso dell’inlining quando l’espressione di inizializzazione dipende da un argomento L
Estensioni - optional ► Un argomento di una funzione puo’ essere optional in tal caso viene considerato del tipo dichiarato ma puo’ essere void function myFx(pos:int, rot:vector,optional) == void e valtype non vengono ottimizzate L
Estesioni - inlining ► Una funzione puo’ essere dichiarata inline ► In tal caso il compilatore XVRC2 prova a renderla tale ove possibile propagando i tipi ► Usando argomenti “any” si puo’ ottenere qualcosa di simile ai template L
Estensioni – metodi per tipi primitivi ► Una funzione puo’ essere usata come un metodo per un tipo primitivo. In alcuni linguaggi si chiamano extension methods extern function len(value: any,this) : int Permette di scrivere: [1,2].len() e [1,2,3].cross([3,45,5]); ► Basta che il primo parametro abbia il modificatore this L
Estensioni – proprieta’ ► Supporto di attributi che in fase di lettura/scrittura vengono gestiti da metodi ► Quando una variabile non e’ presente nella classe ma esiste setXXX myobj.name = 10 Invoca myobj.setName(10) L
Pre-Compilatore ► Pre-Compilatore che prende il codice S3D esteso e genera codice S3D per il compilatore standard Validazione dei tipi Estensioni del linguaggio S3D++S3DS3D.BIN XVRC2S3DC C
Pre-Compilatore - implementazione ► Implementato in Java usando il parser ANTLR ► Gerarchia di classi per gestire Espressioni, Statement e Tipi fold(), clone(), ToJava(), ToXVR() C
Pre-Compilatore Inlining ► XVRC2 supporta il constant folding e l’inlining function WhatX(value : string ) :string inline { if(value == "Green") return "Yes"; else return "No"; } Chiamando: WhatX(“Green”) Il compilatore sostituisce direttamente con “Green” ► Utile per argomenti di tipo any o optional Vengono risolte: valtype(v:any) e == void ► Il compilatore propaga il tipo dei parametri dentro le espressioni della funzione ► Il costant folding supporta alcune funzioni stringa e matematiche: len,upper,sqrt e gli swizzle C
XVR in Java ► XVRC2 invece di generare codice S3D puo’ generare codice Java ► Un minimo runtime basato su JOGL permette di creare applicazioni basate su OpenGL (e OpenAL) J Per Java 1.5 e 1.4
XVR in Java - Architettura ► Funzioni e variabili globali generano XVRMain.java ► Una classe S3D diventa una classe Java S3D++ XVRMain.java Class1.java MyClass.java jxvr runtime XVRC2 jxvrapp.jar Applicazione o Applet Java J
XVR in Java - tipi ► Mapping dei tipi int,bool,string,float,void equivalenti vector => float [] Classi => classi Java, derivate da XVRBaseClass any => Object array => java.util.ArrayList ► Caso speciale: string e vector sono byvalue in XVR e byreference in Java ► Le operazioni tipizzate sono convertite direttamente in Java, quando si usa any occorre chiamare funzioni di supporto a + b => a + b se I tipi sono noti a + b => XVRAny.op(a,b,’+’) J
XVR in Java - integrazione ► Importazione automatica delle costanti e funzione OpenGL dichiarate in JOGL ► Importazione dei metodi di XVRScene marcati come funzioni globali (es. glColor, len, SetActiveTexture …) ► Non e’ stato ancora implementato ma e’ possibile importare quasi ogni classe Java in XVR J
XVR in Java – classi XVR ► CVmTexture NOW: texture semplici, niente flags NEVER: resize, AddSlice ► CVmBillboard Semplificato, niente rotazione al momento J
XVR in Java – (S)Vantaggi ► Vantaggi Multipiattaforma Performance (per codice con tipi) Integrazione di software esistente Strumenti di sviluppo Debugging in Eclipse (se XVRC2 implementasse JSR-45 SMAP) ► Svantaggi Mancanza delle librerie di XVR Mancanza delle librerie di XVR Pesantezza del runtime in download J
Missing… ► Estensioni aggiuntive possibili Interfacce Operatore [] definito dalla classe Eccezioni (solo versione XVR for Java) ► Compilatore Manca foreach, while, switch,static Migliori messaggi di errore ► XVR for Java Demo stage, qualche limitazione LJWGL