Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli...

16
Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi

Transcript of Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli...

Page 1: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Integrazione di un linguaggio accademico in un ambiente CAD industriale

Laureando: Giorgio Scorzelli

Relatore: Prof. Paoluzzi

Page 2: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Indice

• Scheme e Open Cascade.

• Soluzioni per l’integrazione dei linguaggi.

• La Foreign Function Interface come soluzione per l’integrazione.

• Il linguaggio C++. Logica statica e logica dinamica di invocazione.

• Generazione di alcuni modelli geometrici.

• Conclusioni.

Page 3: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Un ambiente funzionale: Scheme

• Storia:

1975 Scheme come dialetto Lisp 1978 “Revised Report on SCHEME. A Dialect of LISP” (Guy Lewis Steele

Jr. and Gerald Jay Sussman) 1982 Corsi universitari (MIT, Yale, Indiana University) 1998 “The revised (5) report on the algorithmic language Scheme”

• Semplicità

• Implementazione MzScheme (PLT, Rice University) Integrated Development Environment (IDE): DrScheme Multipiattaforma (wxWindows come libreria GUI)

Page 4: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Un ambiente di progettazione assistita: Open Cascade

• Storia 1980 Matra Datavision: Euclid 1990 Cas.CADE (CASE + CAD) dal progetto Eureka 1999 società servizi software: open source

• Servizi geometrici: Foundation Classes Modeling Data Modeling Algorithms Visualization Data Exchange Processor

• Servizi non geometrici Component Definition Language (CDL) Workshop Organization Kit (WOK)

Page 5: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Cooperazione tra linguaggi. Linguaggi imperativi e linguaggi funzionali.

Piattaforme distribuite:

CORBA e DCOM

Integrazione locale:

Foreign Function Interfaces

Infrastruttura per la comunicazione.

Oggetti software indipendenti: client e server.

Interface Repository (IR) per l’accesso ai servizi.

Condivisione della memoria, stesso processo.

Stesse strutture dati: problema della “traduzione”.

Componente di interfaccia tra linguaggi.

Page 6: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Foreign Function Interface (FFI)

• Storia Prima apparizione in Lisp: funzioni C come call out functions o foreign functions

• Definizione: collaborazione tra codice che viene eseguito in uno spazio degli indirizzi condiviso.

• Problemi: Tecniche gestione memoria (reference counting, gc etc) Conversione tra inside ed outside types Fenomeno del Side effect Differenti Error Handler Funzioni come first class objects

• Le azioni di una FFI:1. Library Loading. Accesso alle librerie secondo due approcci: statico e

dinamico.2. Address Binding. Recupero dell’indirizzo della funzione (risoluzione dei cross

references).3. Input Parameters. Caricamento e conversione nello stack. Modalità di

passaggio dei valori.4. Output Parameters. Restituzione del valore di uscita packed per la shell.

Page 7: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Ciclo di produzione software C/C++. Logica statica.

1. Scrittura codice sorgente: header files e files dell’implementazione. Compiti del compilatore: Allocazione regioni di memoria Controllo correttezza argomenti. Risoluzione collisioni.

2. Generazione degli object files.3. Link degli object files.

Page 8: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Funzioni C++ in ambiente interpretato. Logica dinamica.

“Compilatore” dinamico: Conversioni implicite dinamiche Overloading solver dinamico

Files di interfaccia come strumenti per la conoscenza:Header files C++Sintassi semplificata:

CORBA Interface Definition Language IDLComponent Definition Language CDL di Open Cascade

Page 9: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Soluzioni per l’integrazione

Sorgenti CDL

Strutture dinamiche

del package MS

Sorgenti Cpp:file hxx e cxxCDL Front CPP Extractor

CPP Extractor

Sviluppo dell'implementazione

CPP ExtractorSchemeExtractor

CPP ExtractorInterpreteScheme

Generatore del codicedella FFI

invocazioneda shell

operazione dimapping

esecuzione funzionelibreria

operazione diunm apping

controllo alla shell

Modalità di invocazione delle funzioni C++

Page 10: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Meccanismi d’uso

Prototipo CDLCreate(dx,dy,dz:Real) returns MakeBox from BRepPrimApi

Prototipo C++ generato dal programma Cpp ExtractorBRepPrimAPI_MakeBox(

const Standard_Real dx,const Standard_Real dy,const Standard_Real dz);

Wrapper Scheme(define (make-box x y z)

(make-object BRepPrimApi_MakeBox% x y z))

Uso interattivo della make-box(make-box 1 2 3)

Page 11: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Esempi: Modello toroidale

• Oggetti toroidali appoggiati su sfera.

(define (radius z) (sqrt (- 1 (* z z))))

(define (torus-on-sphere the-list)

(composite (map

(lambda (z)

(translate (torus (radius z) 0.05) 0.0 0.0 z))

the-list)))

(torus-on-sphere (list -0.93 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 +0.93)

Page 12: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Esempi: animazione

Page 13: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Esempi: funzione “sombrero”

• Funzione da visualizzare:

)sin( 22 yx

(define domain

(mult (make-list -1.0 1.0 20)

(make-list -1.0 1.0 20)))

(define codomain

(apply-f myfun domain))

(define spheres

(make-list-of-sphere (length codomain)))

(define spheres-in-space

(map translate spheres codomain))

Page 14: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Esempi: generazione automatica di labirinti

(define (maze-builder dim filename)

(let*

((v (make-list 0 (- dim 1)))

(array (make-multiply v v))

(maze (make-object SchemeTest_Maze% dim dim))

(make-iter-cell

(lambda (coord)

(let ((x (car coord)) (y (car (cdr coord))))

(move-cell

(make-single-cell

(send maze Left x y) (send maze Up x y)

(send maze Right x y)

(send maze Down x y)) x y))))

(lis (map make-iter-cell array))

(ret (composite lis)))

(print-brep ret filename)))

Page 15: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Risultati e conclusioni

Integrazione su base locale del linguaggio funzionale Scheme con il linguaggio imperativo C++

Automaticamente disponibili da Scheme circa 10.000 classi di Open Cascade

Possibilità di sviluppo interattivo di applicazioni CAD

Sito Web

www.dia.uniroma3.it/~scorzell

Page 16: Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi.

Ocas Core Team