SlideShare a Scribd company logo
1 of 33
Revisiting Visitors
for Modular Extension
of Executable DSMLs
Manuel Leduc, Thomas Degueule, Benoit Combemale, Tijs van der Storm, Olivier Barais
Context & Objectives
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
2
DSLs Everywhere
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
3
Anatomy of a xDSML
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
4
A FSM Family
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
5
Problem
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
6
The expression problem
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
7
Syntax
Semantics
FSM
Executable
∅
FSM Guarded FSM
xFSM
gFSM
xgFSM
Incremental Compilation & Opportunistic Reuse
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
8
Incremental compilation:
- Not always access to the source code
- Non linear compilation penalty
Opportunistic reuse:
- No intrusion on modeling framework
- Reuse of legacy artifacts
In the context of MDE
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
9
- Explicit AST
- AST Mutability
- Type safety
ALE & Revisitor
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
10
REVISITOR ⟼ Implementation
ALE ⟼ Specification
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
11
REVISITOR + ALE
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
12
f: 𝑆𝑦𝑛 ⟼ 𝑆𝑒𝑚
Specification
Implementation
REVISITOR ⟼ Implementation
ALE ⟼ Specification
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
13
Abstract mapping
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
f: 𝑆𝑦𝑛 ⟼ 𝑆𝑒𝑚
14
A Simple FSM Language
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
15
REVISITOR Interface
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
FSM Semantic mapping implementation
interface FSMRev<M, S, F extends S, T> {
F finalState(FinalState it);
S state(State it);
M machine(Machine it);
[…]
default M $(Machine it) { return machine(it); }
default F $(FinalState it) { return finalState(it); }
default S $(State it) {
if(it instanceof FinalState)
return finalState((FinalState) it);
return state(it);
}
} 16
REVISITOR Implementation : Pretty Printer
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface FSMRev<M, S, F extends S, T> {
F finalState(FinalState it);
S state(State it);
M machine(Machine it);
[…]
default M $(Machine it) { return machine(it); }
default F $(FinalState it) { return finalState(it); }
default S $(State it) {
if(it instanceof FinalState)
return finalState((FinalState) it);
return state(it);
}
}
interface Pr { String print(); }
interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> {
default Pr machine(Machine it) {
return () -> it.states.stream().map(s ->
$(s).print()).collect(joining());
}
default Pr state(State it) { /* ... */ }
default Pr finalState(FinalState it) {
return () -> "*" + state(it).print();
}
default Pr transition(Transition it) {
return () -> it.event + " => " + it.target.name;
}
}
Pr p = new PrintFsm() {}.$(myMachine);
System.out.println(p.print());
FSM Semantics implementation
17
REVISITOR @Runtime
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface FSMRev<M, S, F extends S, T> {
F finalState(FinalState it);
S state(State it);
M machine(Machine it);
[…]
default M $(Machine it) { return machine(it); }
default F $(FinalState it) { return finalState(it); }
default S $(State it) {
if(it instanceof FinalState)
return finalState((FinalState) it);
return state(it);
}
}
interface Pr { String print(); }
interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> {
default Pr machine(Machine it) {
return () -> it.states.stream().map(s ->
$(s).print()).collect(joining());
}
default Pr state(State it) { /* ... */ }
default Pr finalState(FinalState it) {
return () -> "*" + state(it).print();
}
default Pr transition(Transition it) {
return () -> it.event + " => " + it.target.name;
}
}
Pr p = new PrintFsm() {}.$(myMachine);
System.out.println(p.print());
18
REVISITOR Implementation : Execution
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface FSMRev<M, S, F extends S, T> {
F finalState(FinalState it);
S state(State it);
default F $(FinalState it) { return finalState(it); }
default S $(State it) {
if(it instanceof FinalState)
return finalState((FinalState) it);
return state(it);
}
}
interface Pr { String print(); }
interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> {
default Pr machine(Machine it) {
return () -> it.states.stream().map(s ->
$(s).print()).collect(joining());
}
default Pr state(State it) { /* ... */ }
default Pr finalState(FinalState it) {
return () -> "*" + state(it).print();
}
default Pr transition(Transition it) {
return () -> it.event + " => " +
it.target.name;
}
}
interface Exe { void exe(); }
interface ExeFSM extends FSMRev<Exe, Exe, Exe, Exe> {
default Exe machine(Machine it) {
return () /* ... */
}
/* ... */
}
Pr p = new PrintFsm() {}.$(myMachine);
System.out.println(p.print());
19
Independent FSM Semantics implementation
Syntax Extensibility: Timed Transitions
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface TFSMRev<M, S, F extends S, T, TT extends T> extends FSMRev<M, S, F, T> {
TT tTransition(TTransition it);
default TT $(TTransition it) { return tTransition(it); }
@Override default T $(Transition it) {
if (it instanceof TTransition) return tTransition((TTransition) it);
return transition(it);
}
} 20
TFSM semantic mapping implementation
interface TFSMRev<M, S, F extends S, T, TT extends T> extends FSMRev<M, S, F, T> {
TT tTransition(TTransition it);
default TT $(TTransition it) { return tTransition(it); }
@Override default T $(Transition it) {
if (it instanceof TTransition) return tTransition((TTransition) it);
return transition(it);
}
}
Semantics Extensibility: Timed Transitions
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface PrintTFSM extends PrintFSM,
TFSMRev<Pr, Pr, Pr, Pr, Pr> {
@Override
default Pr tTransition(TTransition it) {
return () -> it.time + "@" + transition(it).print();
}
} 21
TFSM Semantics implementation
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
Independent extensibility
22
Too many Generics, too much boilerplate
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
Way too complex for real world scenarios,
this is the REVISITOR Interface of a simple Activity Diagram language!
interface ActivitydiagramRevisitor<Activitydiagram__ActionT extends Activitydiagram__ExecutableNodeT,Activitydiagram__ActivityT extends
Activitydiagram__NamedElementT,Activitydiagram__ActivityEdgeT extends Activitydiagram__NamedElementT,Activitydiagram__ActivityFinalNodeT extends
Activitydiagram__FinalNodeT,Activitydiagram__ActivityNodeT extends Activitydiagram__NamedElementT,Activitydiagram__BooleanBinaryExpressionT extends
Activitydiagram__BooleanExpressionT,Activitydiagram__BooleanExpressionT extends Activitydiagram__ExpressionT,Activitydiagram__BooleanUnaryExpressionT
extends Activitydiagram__BooleanExpressionT,Activitydiagram__BooleanValueT extends Activitydiagram__ValueT,Activitydiagram__BooleanVariableT extends
Activitydiagram__VariableT,Activitydiagram__ControlFlowT extends Activitydiagram__ActivityEdgeT,Activitydiagram__ControlNodeT extends
Activitydiagram__ActivityNodeT,Activitydiagram__DecisionNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__ExecutableNodeT extends
Activitydiagram__ActivityNodeT,Activitydiagram__ExpressionT,Activitydiagram__FinalNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__ForkNodeT
extends Activitydiagram__ControlNodeT,Activitydiagram__InitialNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__IntegerCalculationExpressionT
extends Activitydiagram__IntegerExpressionT,Activitydiagram__IntegerComparisonExpressionT extends
Activitydiagram__IntegerExpressionT,Activitydiagram__IntegerExpressionT extends Activitydiagram__ExpressionT,Activitydiagram__IntegerValueT extends
Activitydiagram__ValueT,Activitydiagram__IntegerVariableT extends Activitydiagram__VariableT,Activitydiagram__JoinNodeT extends
Activitydiagram__ControlNodeT,Activitydiagram__MergeNodeT extends
Activitydiagram__ControlNodeT,Activitydiagram__NamedElementT,Activitydiagram__OpaqueActionT extends
Activitydiagram__ActionT,Activitydiagram__ValueT,Activitydiagram__VariableT> {
default Activitydiagram__ControlNodeT $(final activitydiagram.ControlNode self) {
if (self instanceof InitialNode) return initialNode((activitydiagram.InitialNode) self);
else if (self instanceof ActivityFinalNode) return activityFinalNode((activitydiagram.ActivityFinalNode) self);
else if (self instanceof DecisionNode) return decisionNode((activitydiagram.DecisionNode) self);
else if (self instanceof MergeNode) return mergeNode((activitydiagram.MergeNode) self);
else if (self instanceof ForkNode) return forkNode((activitydiagram.ForkNode) self);
else if (self instanceof JoinNode) return joinNode((activitydiagram.JoinNode) self);
}
… (204 LoC)
23
REVISITOR ⟼ Implementation
ALE ⟼ Specification
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
24
High-Level specifications
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
Revisitor Generation
Semantics Generation
25
ALE – Open class Operational Semantics
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
behavior printing;
import ecore “Fsm.ecore";
open class Machine {
def String print() {
String ret = "";
for (State s in self.states)
ret = ret + $[s].print();
return ret;
}
}
open class State {
def String print() { /* ... */ }
}
open class FinalState {
def String print() {
return "*" + $[super].print();
}
}
open class Transition {
def String print() {
return self.event + "=>" +
self.tgt.name;
}
}
behavior timedprinting;
import ecore “TimedFsm.ecore”;
import ale printing;
open class TimedTransition {
def String print() {
return self.time + “@" +
$[super].print();
}
}
behavior execution;
import ecore “GuardedFsm.ecore”;
import ale execfsm;
import ale evalexp;
open class GuardedTransition {
def void step(String ch) {
if ($[self.guard].eval().equals(true))
$[super].step(ch);
}
}
Printing FSMs
Printing Timed FSMs
Executing Guarded FSMs
https://youtu.be/x4viqEFN7PU
[EclipeCon’17] EcoreTools
Next: Executable DSL made
(more) accessible
http://www.eclipse.org/ecoretools/
26
Evaluation
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
27
Evaluation: Modular Implementation of fUML
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
28
Performance Evaluation: Results
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
• Benchmarks taken from the Transformation Tool Contest (TTC’15)
• Same semantics for all implementations.
↗ Modularity
Execution time≈
29
Take away
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
30
REVISITOR ⟼ Implementation
• Allows Modular extensibility and customization for xDSML
• Separate compilation
ALE ⟼ Specification
• Uniform object-oriented framework
• Advance type checking to ensure safe definition and manipulation of xDSML
⤇ Improvement wrt. the Switch class generated by EMF
EOF
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
31
Multiple Inheritance
• Multiple bound available
interface ABCRev<AT, BT, CT extends AT & BT> { /*...*/ }
• Otherwise
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface ABCRev<AT, BT, CT, CT_A extends AT, CT_B extends BT> {
CT c(C c);
CT_A c_as_a(C c);
CT_B c_as_b(C c);
default AT $(A it) {
if (it instanceof C) return c_as_a((C) it);
return a(it);
}
default BT $(B it) {
if (it instanceof C) return c_as_b((C) it);
return b(it);
}
} 32
Revisiting Visitors for Modular Extension of Executable DSMLs
MODELS 2017
interface GuardedRev<…> extends FSMRev<…>, ExpRev<…> {
G guarded(Guarded it);
@Override default T $(Transition it) { … }
default G $(Guarded it) { … }
class Guarded extends Transition { Exp guard; }
interface ExecGuarded extends GuardedAlg<…>, ExecFSM, EvalExp {
default St guarded(Guarded it) {
return ch -> {
if($(it.guard).eval()) transition(it).step(ch);
};
}
}
Independent extensibility
33

More Related Content

Similar to Revisiting Visitors for Modular Extension of Executable DSMLs

Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Martin Loetzsch
 
Php Map Script Class Reference
Php Map Script Class ReferencePhp Map Script Class Reference
Php Map Script Class ReferenceJoel Mamani Lopez
 
Functional Programming in Java 8
Functional Programming in Java 8Functional Programming in Java 8
Functional Programming in Java 8Omar Bashir
 
Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyBrian Aker
 
Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyBrian Aker
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядомAndrey Akinshin
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine LearningLuciano Resende
 
Processing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) PregelProcessing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) PregelArangoDB Database
 
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...NoSQLmatters
 
ETL Patterns with Postgres
ETL Patterns with PostgresETL Patterns with Postgres
ETL Patterns with PostgresMartin Loetzsch
 
GraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE GraphGraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE GraphJim Hatcher
 
Innovative Specifications for Better Performance Logging and Monitoring
Innovative Specifications for Better Performance Logging and MonitoringInnovative Specifications for Better Performance Logging and Monitoring
Innovative Specifications for Better Performance Logging and MonitoringCary Millsap
 
SAS Macros part 3
SAS Macros part 3SAS Macros part 3
SAS Macros part 3venkatam
 

Similar to Revisiting Visitors for Modular Extension of Executable DSMLs (20)

R console
R consoleR console
R console
 
Converting R to PMML
Converting R to PMMLConverting R to PMML
Converting R to PMML
 
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
Project A Data Modelling Best Practices Part II: How to Build a Data Warehouse?
 
SAS_and_R.pdf
SAS_and_R.pdfSAS_and_R.pdf
SAS_and_R.pdf
 
Php Map Script Class Reference
Php Map Script Class ReferencePhp Map Script Class Reference
Php Map Script Class Reference
 
Functional Programming in Java 8
Functional Programming in Java 8Functional Programming in Java 8
Functional Programming in Java 8
 
Event Sourcing & CQRS
Event Sourcing & CQRSEvent Sourcing & CQRS
Event Sourcing & CQRS
 
Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copy
 
Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copy
 
R code for data manipulation
R code for data manipulationR code for data manipulation
R code for data manipulation
 
R code for data manipulation
R code for data manipulationR code for data manipulation
R code for data manipulation
 
An Intoduction to R
An Intoduction to RAn Intoduction to R
An Intoduction to R
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядом
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine Learning
 
Processing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) PregelProcessing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) Pregel
 
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
 
ETL Patterns with Postgres
ETL Patterns with PostgresETL Patterns with Postgres
ETL Patterns with Postgres
 
GraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE GraphGraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE Graph
 
Innovative Specifications for Better Performance Logging and Monitoring
Innovative Specifications for Better Performance Logging and MonitoringInnovative Specifications for Better Performance Logging and Monitoring
Innovative Specifications for Better Performance Logging and Monitoring
 
SAS Macros part 3
SAS Macros part 3SAS Macros part 3
SAS Macros part 3
 

Recently uploaded

OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024innovationoecd
 
Pests of soyabean_Binomics_IdentificationDr.UPR.pdf
Pests of soyabean_Binomics_IdentificationDr.UPR.pdfPests of soyabean_Binomics_IdentificationDr.UPR.pdf
Pests of soyabean_Binomics_IdentificationDr.UPR.pdfPirithiRaju
 
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...Universidade Federal de Sergipe - UFS
 
Microteaching on terms used in filtration .Pharmaceutical Engineering
Microteaching on terms used in filtration .Pharmaceutical EngineeringMicroteaching on terms used in filtration .Pharmaceutical Engineering
Microteaching on terms used in filtration .Pharmaceutical EngineeringPrajakta Shinde
 
trihybrid cross , test cross chi squares
trihybrid cross , test cross chi squarestrihybrid cross , test cross chi squares
trihybrid cross , test cross chi squaresusmanzain586
 
Biological classification of plants with detail
Biological classification of plants with detailBiological classification of plants with detail
Biological classification of plants with detailhaiderbaloch3
 
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...D. B. S. College Kanpur
 
FREE NURSING BUNDLE FOR NURSES.PDF by na
FREE NURSING BUNDLE FOR NURSES.PDF by naFREE NURSING BUNDLE FOR NURSES.PDF by na
FREE NURSING BUNDLE FOR NURSES.PDF by naJASISJULIANOELYNV
 
Harmful and Useful Microorganisms Presentation
Harmful and Useful Microorganisms PresentationHarmful and Useful Microorganisms Presentation
Harmful and Useful Microorganisms Presentationtahreemzahra82
 
Pests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPirithiRaju
 
《Queensland毕业文凭-昆士兰大学毕业证成绩单》
《Queensland毕业文凭-昆士兰大学毕业证成绩单》《Queensland毕业文凭-昆士兰大学毕业证成绩单》
《Queensland毕业文凭-昆士兰大学毕业证成绩单》rnrncn29
 
Environmental Biotechnology Topic:- Microbial Biosensor
Environmental Biotechnology Topic:- Microbial BiosensorEnvironmental Biotechnology Topic:- Microbial Biosensor
Environmental Biotechnology Topic:- Microbial Biosensorsonawaneprad
 
Base editing, prime editing, Cas13 & RNA editing and organelle base editing
Base editing, prime editing, Cas13 & RNA editing and organelle base editingBase editing, prime editing, Cas13 & RNA editing and organelle base editing
Base editing, prime editing, Cas13 & RNA editing and organelle base editingNetHelix
 
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...Universidade Federal de Sergipe - UFS
 
User Guide: Capricorn FLX™ Weather Station
User Guide: Capricorn FLX™ Weather StationUser Guide: Capricorn FLX™ Weather Station
User Guide: Capricorn FLX™ Weather StationColumbia Weather Systems
 
Pests of jatropha_Bionomics_identification_Dr.UPR.pdf
Pests of jatropha_Bionomics_identification_Dr.UPR.pdfPests of jatropha_Bionomics_identification_Dr.UPR.pdf
Pests of jatropha_Bionomics_identification_Dr.UPR.pdfPirithiRaju
 
Ai in communication electronicss[1].pptx
Ai in communication electronicss[1].pptxAi in communication electronicss[1].pptx
Ai in communication electronicss[1].pptxsubscribeus100
 
well logging & petrophysical analysis.pptx
well logging & petrophysical analysis.pptxwell logging & petrophysical analysis.pptx
well logging & petrophysical analysis.pptxzaydmeerab121
 
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)Columbia Weather Systems
 

Recently uploaded (20)

OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024
 
Pests of soyabean_Binomics_IdentificationDr.UPR.pdf
Pests of soyabean_Binomics_IdentificationDr.UPR.pdfPests of soyabean_Binomics_IdentificationDr.UPR.pdf
Pests of soyabean_Binomics_IdentificationDr.UPR.pdf
 
Let’s Say Someone Did Drop the Bomb. Then What?
Let’s Say Someone Did Drop the Bomb. Then What?Let’s Say Someone Did Drop the Bomb. Then What?
Let’s Say Someone Did Drop the Bomb. Then What?
 
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
 
Microteaching on terms used in filtration .Pharmaceutical Engineering
Microteaching on terms used in filtration .Pharmaceutical EngineeringMicroteaching on terms used in filtration .Pharmaceutical Engineering
Microteaching on terms used in filtration .Pharmaceutical Engineering
 
trihybrid cross , test cross chi squares
trihybrid cross , test cross chi squarestrihybrid cross , test cross chi squares
trihybrid cross , test cross chi squares
 
Biological classification of plants with detail
Biological classification of plants with detailBiological classification of plants with detail
Biological classification of plants with detail
 
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...
Fertilization: Sperm and the egg—collectively called the gametes—fuse togethe...
 
FREE NURSING BUNDLE FOR NURSES.PDF by na
FREE NURSING BUNDLE FOR NURSES.PDF by naFREE NURSING BUNDLE FOR NURSES.PDF by na
FREE NURSING BUNDLE FOR NURSES.PDF by na
 
Harmful and Useful Microorganisms Presentation
Harmful and Useful Microorganisms PresentationHarmful and Useful Microorganisms Presentation
Harmful and Useful Microorganisms Presentation
 
Pests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdf
 
《Queensland毕业文凭-昆士兰大学毕业证成绩单》
《Queensland毕业文凭-昆士兰大学毕业证成绩单》《Queensland毕业文凭-昆士兰大学毕业证成绩单》
《Queensland毕业文凭-昆士兰大学毕业证成绩单》
 
Environmental Biotechnology Topic:- Microbial Biosensor
Environmental Biotechnology Topic:- Microbial BiosensorEnvironmental Biotechnology Topic:- Microbial Biosensor
Environmental Biotechnology Topic:- Microbial Biosensor
 
Base editing, prime editing, Cas13 & RNA editing and organelle base editing
Base editing, prime editing, Cas13 & RNA editing and organelle base editingBase editing, prime editing, Cas13 & RNA editing and organelle base editing
Base editing, prime editing, Cas13 & RNA editing and organelle base editing
 
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
REVISTA DE BIOLOGIA E CIÊNCIAS DA TERRA ISSN 1519-5228 - Artigo_Bioterra_V24_...
 
User Guide: Capricorn FLX™ Weather Station
User Guide: Capricorn FLX™ Weather StationUser Guide: Capricorn FLX™ Weather Station
User Guide: Capricorn FLX™ Weather Station
 
Pests of jatropha_Bionomics_identification_Dr.UPR.pdf
Pests of jatropha_Bionomics_identification_Dr.UPR.pdfPests of jatropha_Bionomics_identification_Dr.UPR.pdf
Pests of jatropha_Bionomics_identification_Dr.UPR.pdf
 
Ai in communication electronicss[1].pptx
Ai in communication electronicss[1].pptxAi in communication electronicss[1].pptx
Ai in communication electronicss[1].pptx
 
well logging & petrophysical analysis.pptx
well logging & petrophysical analysis.pptxwell logging & petrophysical analysis.pptx
well logging & petrophysical analysis.pptx
 
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
 

Revisiting Visitors for Modular Extension of Executable DSMLs

  • 1. Revisiting Visitors for Modular Extension of Executable DSMLs Manuel Leduc, Thomas Degueule, Benoit Combemale, Tijs van der Storm, Olivier Barais
  • 2. Context & Objectives Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 2
  • 3. DSLs Everywhere Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 3
  • 4. Anatomy of a xDSML Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 4
  • 5. A FSM Family Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 5
  • 6. Problem Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 6
  • 7. The expression problem Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 7 Syntax Semantics FSM Executable ∅ FSM Guarded FSM xFSM gFSM xgFSM
  • 8. Incremental Compilation & Opportunistic Reuse Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 8 Incremental compilation: - Not always access to the source code - Non linear compilation penalty Opportunistic reuse: - No intrusion on modeling framework - Reuse of legacy artifacts
  • 9. In the context of MDE Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 9 - Explicit AST - AST Mutability - Type safety
  • 10. ALE & Revisitor Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 10
  • 11. REVISITOR ⟼ Implementation ALE ⟼ Specification Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 11
  • 12. REVISITOR + ALE Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 12 f: 𝑆𝑦𝑛 ⟼ 𝑆𝑒𝑚 Specification Implementation
  • 13. REVISITOR ⟼ Implementation ALE ⟼ Specification Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 13
  • 14. Abstract mapping Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 f: 𝑆𝑦𝑛 ⟼ 𝑆𝑒𝑚 14
  • 15. A Simple FSM Language Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 15
  • 16. REVISITOR Interface Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 FSM Semantic mapping implementation interface FSMRev<M, S, F extends S, T> { F finalState(FinalState it); S state(State it); M machine(Machine it); […] default M $(Machine it) { return machine(it); } default F $(FinalState it) { return finalState(it); } default S $(State it) { if(it instanceof FinalState) return finalState((FinalState) it); return state(it); } } 16
  • 17. REVISITOR Implementation : Pretty Printer Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface FSMRev<M, S, F extends S, T> { F finalState(FinalState it); S state(State it); M machine(Machine it); […] default M $(Machine it) { return machine(it); } default F $(FinalState it) { return finalState(it); } default S $(State it) { if(it instanceof FinalState) return finalState((FinalState) it); return state(it); } } interface Pr { String print(); } interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> { default Pr machine(Machine it) { return () -> it.states.stream().map(s -> $(s).print()).collect(joining()); } default Pr state(State it) { /* ... */ } default Pr finalState(FinalState it) { return () -> "*" + state(it).print(); } default Pr transition(Transition it) { return () -> it.event + " => " + it.target.name; } } Pr p = new PrintFsm() {}.$(myMachine); System.out.println(p.print()); FSM Semantics implementation 17
  • 18. REVISITOR @Runtime Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface FSMRev<M, S, F extends S, T> { F finalState(FinalState it); S state(State it); M machine(Machine it); […] default M $(Machine it) { return machine(it); } default F $(FinalState it) { return finalState(it); } default S $(State it) { if(it instanceof FinalState) return finalState((FinalState) it); return state(it); } } interface Pr { String print(); } interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> { default Pr machine(Machine it) { return () -> it.states.stream().map(s -> $(s).print()).collect(joining()); } default Pr state(State it) { /* ... */ } default Pr finalState(FinalState it) { return () -> "*" + state(it).print(); } default Pr transition(Transition it) { return () -> it.event + " => " + it.target.name; } } Pr p = new PrintFsm() {}.$(myMachine); System.out.println(p.print()); 18
  • 19. REVISITOR Implementation : Execution Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface FSMRev<M, S, F extends S, T> { F finalState(FinalState it); S state(State it); default F $(FinalState it) { return finalState(it); } default S $(State it) { if(it instanceof FinalState) return finalState((FinalState) it); return state(it); } } interface Pr { String print(); } interface PrintFSM extends FSMRev<Pr, Pr, Pr, Pr> { default Pr machine(Machine it) { return () -> it.states.stream().map(s -> $(s).print()).collect(joining()); } default Pr state(State it) { /* ... */ } default Pr finalState(FinalState it) { return () -> "*" + state(it).print(); } default Pr transition(Transition it) { return () -> it.event + " => " + it.target.name; } } interface Exe { void exe(); } interface ExeFSM extends FSMRev<Exe, Exe, Exe, Exe> { default Exe machine(Machine it) { return () /* ... */ } /* ... */ } Pr p = new PrintFsm() {}.$(myMachine); System.out.println(p.print()); 19 Independent FSM Semantics implementation
  • 20. Syntax Extensibility: Timed Transitions Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface TFSMRev<M, S, F extends S, T, TT extends T> extends FSMRev<M, S, F, T> { TT tTransition(TTransition it); default TT $(TTransition it) { return tTransition(it); } @Override default T $(Transition it) { if (it instanceof TTransition) return tTransition((TTransition) it); return transition(it); } } 20 TFSM semantic mapping implementation
  • 21. interface TFSMRev<M, S, F extends S, T, TT extends T> extends FSMRev<M, S, F, T> { TT tTransition(TTransition it); default TT $(TTransition it) { return tTransition(it); } @Override default T $(Transition it) { if (it instanceof TTransition) return tTransition((TTransition) it); return transition(it); } } Semantics Extensibility: Timed Transitions Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface PrintTFSM extends PrintFSM, TFSMRev<Pr, Pr, Pr, Pr, Pr> { @Override default Pr tTransition(TTransition it) { return () -> it.time + "@" + transition(it).print(); } } 21 TFSM Semantics implementation
  • 22. Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 Independent extensibility 22
  • 23. Too many Generics, too much boilerplate Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 Way too complex for real world scenarios, this is the REVISITOR Interface of a simple Activity Diagram language! interface ActivitydiagramRevisitor<Activitydiagram__ActionT extends Activitydiagram__ExecutableNodeT,Activitydiagram__ActivityT extends Activitydiagram__NamedElementT,Activitydiagram__ActivityEdgeT extends Activitydiagram__NamedElementT,Activitydiagram__ActivityFinalNodeT extends Activitydiagram__FinalNodeT,Activitydiagram__ActivityNodeT extends Activitydiagram__NamedElementT,Activitydiagram__BooleanBinaryExpressionT extends Activitydiagram__BooleanExpressionT,Activitydiagram__BooleanExpressionT extends Activitydiagram__ExpressionT,Activitydiagram__BooleanUnaryExpressionT extends Activitydiagram__BooleanExpressionT,Activitydiagram__BooleanValueT extends Activitydiagram__ValueT,Activitydiagram__BooleanVariableT extends Activitydiagram__VariableT,Activitydiagram__ControlFlowT extends Activitydiagram__ActivityEdgeT,Activitydiagram__ControlNodeT extends Activitydiagram__ActivityNodeT,Activitydiagram__DecisionNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__ExecutableNodeT extends Activitydiagram__ActivityNodeT,Activitydiagram__ExpressionT,Activitydiagram__FinalNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__ForkNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__InitialNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__IntegerCalculationExpressionT extends Activitydiagram__IntegerExpressionT,Activitydiagram__IntegerComparisonExpressionT extends Activitydiagram__IntegerExpressionT,Activitydiagram__IntegerExpressionT extends Activitydiagram__ExpressionT,Activitydiagram__IntegerValueT extends Activitydiagram__ValueT,Activitydiagram__IntegerVariableT extends Activitydiagram__VariableT,Activitydiagram__JoinNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__MergeNodeT extends Activitydiagram__ControlNodeT,Activitydiagram__NamedElementT,Activitydiagram__OpaqueActionT extends Activitydiagram__ActionT,Activitydiagram__ValueT,Activitydiagram__VariableT> { default Activitydiagram__ControlNodeT $(final activitydiagram.ControlNode self) { if (self instanceof InitialNode) return initialNode((activitydiagram.InitialNode) self); else if (self instanceof ActivityFinalNode) return activityFinalNode((activitydiagram.ActivityFinalNode) self); else if (self instanceof DecisionNode) return decisionNode((activitydiagram.DecisionNode) self); else if (self instanceof MergeNode) return mergeNode((activitydiagram.MergeNode) self); else if (self instanceof ForkNode) return forkNode((activitydiagram.ForkNode) self); else if (self instanceof JoinNode) return joinNode((activitydiagram.JoinNode) self); } … (204 LoC) 23
  • 24. REVISITOR ⟼ Implementation ALE ⟼ Specification Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 24
  • 25. High-Level specifications Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 Revisitor Generation Semantics Generation 25
  • 26. ALE – Open class Operational Semantics Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 behavior printing; import ecore “Fsm.ecore"; open class Machine { def String print() { String ret = ""; for (State s in self.states) ret = ret + $[s].print(); return ret; } } open class State { def String print() { /* ... */ } } open class FinalState { def String print() { return "*" + $[super].print(); } } open class Transition { def String print() { return self.event + "=>" + self.tgt.name; } } behavior timedprinting; import ecore “TimedFsm.ecore”; import ale printing; open class TimedTransition { def String print() { return self.time + “@" + $[super].print(); } } behavior execution; import ecore “GuardedFsm.ecore”; import ale execfsm; import ale evalexp; open class GuardedTransition { def void step(String ch) { if ($[self.guard].eval().equals(true)) $[super].step(ch); } } Printing FSMs Printing Timed FSMs Executing Guarded FSMs https://youtu.be/x4viqEFN7PU [EclipeCon’17] EcoreTools Next: Executable DSL made (more) accessible http://www.eclipse.org/ecoretools/ 26
  • 27. Evaluation Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 27
  • 28. Evaluation: Modular Implementation of fUML Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 28
  • 29. Performance Evaluation: Results Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 • Benchmarks taken from the Transformation Tool Contest (TTC’15) • Same semantics for all implementations. ↗ Modularity Execution time≈ 29
  • 30. Take away Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 30 REVISITOR ⟼ Implementation • Allows Modular extensibility and customization for xDSML • Separate compilation ALE ⟼ Specification • Uniform object-oriented framework • Advance type checking to ensure safe definition and manipulation of xDSML ⤇ Improvement wrt. the Switch class generated by EMF
  • 31. EOF Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 31
  • 32. Multiple Inheritance • Multiple bound available interface ABCRev<AT, BT, CT extends AT & BT> { /*...*/ } • Otherwise Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface ABCRev<AT, BT, CT, CT_A extends AT, CT_B extends BT> { CT c(C c); CT_A c_as_a(C c); CT_B c_as_b(C c); default AT $(A it) { if (it instanceof C) return c_as_a((C) it); return a(it); } default BT $(B it) { if (it instanceof C) return c_as_b((C) it); return b(it); } } 32
  • 33. Revisiting Visitors for Modular Extension of Executable DSMLs MODELS 2017 interface GuardedRev<…> extends FSMRev<…>, ExpRev<…> { G guarded(Guarded it); @Override default T $(Transition it) { … } default G $(Guarded it) { … } class Guarded extends Transition { Exp guard; } interface ExecGuarded extends GuardedAlg<…>, ExecFSM, EvalExp { default St guarded(Guarded it) { return ch -> { if($(it.guard).eval()) transition(it).step(ch); }; } } Independent extensibility 33

Editor's Notes

  1. Logo : inria, cwi, diverse, swat (TODO), université rennes 1, gemoc, ale (TODO), crossminer About revisitors, a language implementation pattern that allows independent extensiblity of the syntax and the semantics Hello I’m manuel leduc I will present …, the work we did with … at inria’s diverse team in collaboration with swat’s cwi team for the ale associate team
  2. Evolves a lot, different versions developed incrementally, some reuse other A lot of the share common concepts Some are composed of concepts directly imported from the others We’d like to be able to reuse the modularily
  3. Abstract Syntax  Metamodel Represent language concepts as a set of metamodel classes and their relations Declared Explicitly Mutable Statically typed Execution Semantics Assign meaning to the syntax constructs Usually defined by an interpreter Implements it operational semantics in the form of transition function over model states TODO : remplacer les sources par autre chose !!!
  4. A lot of way to represent almost the same thing - Justify the notion of « recurrent task » - Shares recurrent paradigms => extension operations
  5. Montrer example de visitor / interpreter Dire que visitor intrusif du côté du model Bien expliquer ce qu’est la recompilation Bien expliquer les conséquence de l’opportunistic reuse (on ne peut pas toucher à un composant existant)
  6. Incremental compilation => parce que le code compilé est parfois modifié à la main // le code compilé est distribué sans la spec Opportunistic reuse => parce que facilité pour la définition d’outils (mm first class entity) TODO : Retoucher pour ajouter un highligh sur la partie exécution / guarded Interpreter = adding an syntactic element means modifying every defined visitor Interpreter = adding a new semantics means altering every syntactic element Trouver bon example dans P. Wadler, “The Expression Problem,” http://homepages.inf.ed.ac.uk/wadler/papers/expression/expression.txt, Nov. 1998, Java Genericity mailing list.
  7. Incremental compilation = because you don’t always have access to the specification of previously defined component Opportunistic reuse = Incremental compilation Existing implementations of the syntax and semantics of language modules should not be modified, duplicated, or recompiled. Whole language compilation would require access to the source code of the base language (which might not be available), and would incur a non-linear performance penalty when compiling extensions. Opportunistic reuse : It should be possible to reuse existing implementations of languages without anticipation. A pattern relying on anticipation would require refactoring current modeling frameworks (e.g., EMF) to regenerate existing code, for instance to insert accept methods to support the Visitor pattern. This would prevent the applicability of the solution to legacy artifacts generated from widely-used modeling frameworks and complicate the work of language designers.
  8. Because in the DSML/MDE community this is the norm to have tools interacting with the model (so it has to be explicit), to modify it in place and with type safety (because tools have to be conform with the metamodel). In the context of MDE, where explicit abstract syntax structures and mutability of models are prevalent
  9. Implementation level = A semantic mapping from syntax to semantics Independent and modular semantics definition By decoupling syntax and semantics Specification level = explicit metamodel with ecore Operational semantics with ALE Lang (Action Language for Ecore) // Object Oriented ~java like + Open class mechanism Abstract the implementation details
  10. represent meta model by a generic factory interface for mapping syntax to a structure representing a particular semantics dispatch method = $-method<- f Abstract factory method = denotation (abstract) semantics object
  11. dispatch method = $-method Abstract factory method = denotation (abstract) semantics object Maps to the most specific implementation, much like the dynamic dispatch in java polymorphism
  12. The dispatch methods dispartches to the most specific abstract factory methods (dynamic type dispatch) dispatch method = $-method Abstract factory method = denotation (abstract) semantics object
  13. If you don’t like java, a conceptual schema (of the FSM familly) will is on the top righ corner Top right corner -> conceptual (growing) model of the FSM family The dispatch methods dispartches to the most specific abstract factory methods (dynamic type dispatch)
  14. Top right corner -> conceptual (growing) model of the FSM family The dispatch methods dispartches to the most specific abstract factory methods (dynamic type dispatch) dispatch method = $-method Abstract factory method = denotation (abstract) semantics object
  15. The dispatch methods dispartches to the most specific abstract factory methods (dynamic type dispatch) this interface is extensible, and can be implemented multiple times
  16. New abstract factory method (denotation) New dispatch method Redefinition the dispatch methods of the hierarchy
  17. Ajouter un schéma de la structure d’héritage java ?
  18. Executable FSM + Expression language = Guarded FSM Generation of the new semantics mapping + A few lines of glue code
  19. Too many generics Maintaining the $ methods is painful We need to abstract the implementation details
  20. Implemented using EMF and Xtext so applicable in various modeling environment Dedicated to help language engineers extends existing languages, customise their semantics, and combine such extensions ALE = operational semantics + open-class like mechanism Dire: Easier, type safe, still modular
  21. AD = activities, associations … RT = Tokens, traces… Dire qu’on peut avoir de la modularité Import/extends => flèches pointillées + stéréotypes entre chevrons Generations = flèches pleines en gras
  22. Emphazing on: It’s still practical
  23. Portable to other technical spaces (any OO language) Rappeler les propriétés cités slide de présentation de l’approche globale Futur work: Towards language modules Application of the REVISITOR pattern for translational semantics (Compilers)
  24. First: cool but not available in java Second: workds well as long a generated, allows different behaviour for an instance according to its static type