Estendere Java con il Meta Programming System di JetBrains

16
18 Aprile 2012 JUG Torino Federico Tomassetti [email protected] Estendere Java con il Meta Programming System di JetBrains

Transcript of Estendere Java con il Meta Programming System di JetBrains

Page 1: Estendere Java con il Meta Programming System di JetBrains

18 Aprile 2012JUG Torino

Federico [email protected]

Estendere Java con il Meta Programming System di JetBrains

Page 2: Estendere Java con il Meta Programming System di JetBrains

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

Page 3: Estendere Java con il Meta Programming System di JetBrains

I linguaggi strumenti per comunicare e organizzare i pensieri.

Page 4: Estendere Java con il Meta Programming System di JetBrains

We see and hear and otherwise experience very largely as we do because the language habits of our community predispose certain choices of interpretation

…the world is presented in a kaleidoscopic flux of impressions which has to be organized by our minds - and this means largely by the linguistic systems in our minds.

Sapir 1929

Whorf 1940

Page 5: Estendere Java con il Meta Programming System di JetBrains

The tools we are trying to use and the language or notation we are using to express or record our thoughts, are the major factors determining what we can think or express at all!

Dijkstra 1972 (EWD340)

Page 6: Estendere Java con il Meta Programming System di JetBrains

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

Page 7: Estendere Java con il Meta Programming System di JetBrains

MPS è un Language Workbench

Language workbenches support the idea of Language-Oriented Programming, which is the notion of building a sofware system by identifying the various areas of the system and using (perhaps building) a Domain Specific Language for each area.

The workbench both supports the definition of these languages and also integrating them together into a coherent whole.

Martin Fowler

Page 8: Estendere Java con il Meta Programming System di JetBrains

MPS è un Projectional Editor

Immagine tratta da http://martinfowler.com/bliki/ProjectionalEditing.html

Source Editing (quello cui siamo abituati)

Page 9: Estendere Java con il Meta Programming System di JetBrains

MPS è un Projectional Editor

Immagine tratta da http://martinfowler.com/bliki/ProjectionalEditing.html

Projectional Editing

Rappresentazione astrattaForma di persistenza

ProiezioneForma visualizzata ed editata

Rappresentazione eseguibileForma eseguibile

Page 10: Estendere Java con il Meta Programming System di JetBrains

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

Page 11: Estendere Java con il Meta Programming System di JetBrains

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

Page 12: Estendere Java con il Meta Programming System di JetBrains

Syntax sugar

Event driven programming, MVC, aspect oriented programming, design by contract

Supporto a tecniche generali

Clojure invece che classi anonime, foreach, switch stringhe

Supporto domain-specific

Unità di misura per le grandezze fisiche o valute monetarie.

Wrapping di librerie Trasformare una libreria in una estensione del linguaggio per poter verificare a compile time che sia utilizzata correttamente.

Sostituzione di XML Sostituire XML o simili con estensioni che dialoghino con il resto del codice scritto in Java.

Page 13: Estendere Java con il Meta Programming System di JetBrains

Estensioni per C per realizzare sistemi embedded.Progetto finanziato dal governo tedesco.Coinvolge Markus Völter, itemis, Lear, Fortiss.

- Uso di state-machine che si possono verificare- Supporto alla tracciature dei requisiti- Supporto alle Software Product Lines- Notazioni tabulari e grafiche

Page 14: Estendere Java con il Meta Programming System di JetBrains
Page 15: Estendere Java con il Meta Programming System di JetBrains

Federico [email protected]

Grazie!

Page 16: Estendere Java con il Meta Programming System di JetBrains

Definizione precisa della semanticaNel definire un’estensione formalizzo un concetto e definisco nel dettaglio come funzioni, riducendo lo spazio per le interpretazioni.

Base per astrazioni successiveDopo aver formalizzato dei costrutti li trasformo in mattoncini elementari per riflettere su nuove astrazion (es. OOP e Design Pattern).

Supporto da parte del toolSe definisco nuovi costrutti il compilatore e l’editor sono in grado di effettuare la validazione e proporre refactoring opportuni.

Vantaggi