La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

XVRC2 Emanuele Ruffaldi Giugno 2006. Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.

Presentazioni simili


Presentazione sul tema: "XVRC2 Emanuele Ruffaldi Giugno 2006. Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J."— Transcript della presentazione:

1 XVRC2 Emanuele Ruffaldi Giugno 2006

2 Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 Pre-Compilatore - implementazione ► Implementato in Java usando il parser ANTLR ► Gerarchia di classi per gestire Espressioni, Statement e Tipi  fold(), clone(), ToJava(), ToXVR() C

13 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

14 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) http://www.teslacore.it/xvr/jxvrparticle14.htm J http://www.teslacore.it/xvr/jxvrparticle.htm Per Java 1.5 e 1.4

15 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

16 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

17 XVR in Java - integrazione ► Importazione automatica delle costanti e funzione OpenGL dichiarate in JOGL ► Importazione dei metodi di XVRScene marcati come @XVRItem come funzioni globali (es. glColor, len, SetActiveTexture …) ► Non e’ stato ancora implementato ma e’ possibile importare quasi ogni classe Java in XVR J

18 XVR in Java – classi XVR ► CVmTexture  NOW: texture semplici, niente flags  NEVER: resize, AddSlice ► CVmBillboard  Semplificato, niente rotazione al momento J

19 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

20 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


Scaricare ppt "XVRC2 Emanuele Ruffaldi Giugno 2006. Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J."

Presentazioni simili


Annunci Google