Estendere Java con il Meta Programming System di JetBrains

Preview:

Citation preview

18 Aprile 2012JUG Torino

Federico Tomassettif.tomassetti@gmail.com

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?

I linguaggi strumenti per comunicare e organizzare i pensieri.

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

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)

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

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

MPS è un Projectional Editor

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

Source Editing (quello cui siamo abituati)

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

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

A cosa serve un linguaggio?

Cos’è il Meta Programming System?

Come si usa?

Per cosa viene usato?

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.

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

Federico Tomassettif.tomassetti@gmail.com

Grazie!

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

Recommended