Upload
federico-tomassetti
View
1.965
Download
0
Tags:
Embed Size (px)
Citation preview
18 Aprile 2012JUG Torino
Federico [email protected]
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 [email protected]
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