SlideShare a Scribd company logo
1 of 127
Download to read offline
Dynamic Language Embedding
With Homogeneous Tool Support
PhD Defense
Lukas Renggli
Advisor
Oscar Nierstrasz
1
2
SELECT	
  email	
  FROM	
  users
WHERE	
  username	
  =	
  'lr'
3
SELECT	
  email	
  FROM	
  users
WHERE	
  username	
  =	
  'lr'
Syntax
4
SELECT	
  email	
  FROM	
  users
WHERE	
  username	
  =	
  'lr'
Semantics
General Purpose
Host Language
5
+
SELECT	
  email	
  FROM	
  users
WHERE	
  username	
  =	
  'lr'
General Purpose
Host Language
6
?
SELECT	
  email	
  FROM	
  users
WHERE	
  username	
  =	
  'lr'
SyntaxSQL SemanticsSQL
SyntaxHost SemanticsHost
ToolsHost
7
8
Host Language
External
Language
9
10
Host Language
Internal
Language
11
12
Host Language
Embedded
Language
13
Non-Standard
Host Language
Embedded
Language
14
15
!" #"$%&
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
16
Conventional
Language
17
18
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
Multiple Context
Specific Languages
19
20
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
Homogeneous Code
and Data Abstraction
21
§
§
§
22
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
§
§
§
Homogeneous
Tool Support
23
Thesis
To support seamless integration of context-dependent
languages without breaking the tools, we need
1.	 a host-language grammar that can be changed by
language extensions,
2.	 a first-class language description used by the
development environment, and
3.	 a transformation mechanism of the embedded language
into a common executable representation.
24
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
25
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
26
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
27
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
28
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
29
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
30
31
!" #"$%&
32
Types of
Embedded Languages
33
◦ ◦ ◦
◦ ◦ ●
◦ ● ◦
◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
● ● ●Syntax
Vocabulary
Semantics
34
Host Language ◦ ◦ ◦
◦ ◦ ●
◦ ● ◦
◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
● ● ●Syntax
Vocabulary
Semantics
35
Host Language ◦ ◦ ◦
◦ ◦ ●
Internal Language ◦ ● ◦
◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
● ● ●Syntax
Vocabulary
Semantics
36
Host Language ◦ ◦ ◦
◦ ◦ ●
Internal Language ◦ ● ◦
Pidgin ◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
● ● ●Syntax
Vocabulary
Semantics
37
Host Language ◦ ◦ ◦
◦ ◦ ●
Internal Language ◦ ● ◦
Pidgin ◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
Creole ● ● ●Syntax
Vocabulary
Semantics
38
Host Language ◦ ◦ ◦
Argot ◦ ◦ ●
Internal Language ◦ ● ◦
Pidgin ◦ ● ●
● ◦ ◦
● ◦ ●
● ● ◦
Creole ● ● ●Syntax
Vocabulary
Semantics
39
Host Language ◦ ◦ ◦
Argot ◦ ◦ ●
Internal Language ◦ ● ◦
Pidgin ◦ ● ●
— ● ◦ ◦
— ● ◦ ●
— ● ● ◦
Creole ● ● ●Syntax
Vocabulary
Semantics
40
Pidgin ◦ ● ●
Creole ● ● ●
Argot ◦ ◦ ●
Syntax
Vocabulary
Semantics
41
42
43
44
45
46
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
47
aBuilder	
  row	
  grow.
aBuilder	
  row	
  fill.
aBuilder	
  column	
  grow.
aBuilder	
  column	
  fill.
aBuilder	
  x:	
  1	
  y:	
  1	
  add:	
  (LabelShape	
  new
	
   text:	
  [	
  :each	
  |	
  each	
  name	
  ];
	
   borderColor:	
  #black;
	
   borderWidth:	
  1;
	
   yourself).
aBuilder	
  x:	
  1	
  y:	
  2	
  w:	
  2	
  h:	
  1	
  add:	
  (RectangleShape	
  new
	
   borderColor:	
  #black;
	
   borderWidth:	
  1;
	
   width:	
  200;
	
   height:	
  100;
	
   yourself)
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
48
row	
  =	
  grow.
row	
  =	
  fill.
column	
  =	
  grow.
column	
  =	
  fill.
(1	
  ,	
  1)	
  =	
  label
	
   	
   text:	
  [	
  :each	
  |	
  each	
  name	
  ];
	
   	
   borderColor:	
  #black;
	
   	
   borderWidth:	
  1.
(1	
  ,	
  2)	
  -­‐	
  (2	
  ,	
  1)	
  =	
  rectangle
	
   	
   borderColor:	
  #black;
	
   	
   borderWidth:	
  1;
	
   	
   width:	
  200;
	
   	
   height:	
  100.
49
shape	
  {
	
   cols:	
  #grow,	
  #fill;
	
   rows:	
  #grow,	
  #fill;
}
label	
  {
	
   position:	
  1	
  ,	
  1;	
  
	
   text:	
  [	
  :each	
  |	
  each	
  name	
  ];
	
   borderColor:	
  #black;
	
   borderWidth:	
  1;
}
rectangle	
  {	
  
	
   position:	
  1	
  ,	
  2;
	
   colspan:	
  2;
	
   borderColor:	
  #black;
	
   borderWidth:	
  1;
	
   width:	
  200;
	
   height:	
  100;
}
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
50
51
52
Conventional
Language
53
Conventional
Language
Context
Specific
54
Conventional
Language
Context
Specific
Homogeneous
Code & Data
55
Conventional
Language
Context
Specific
Homogeneous
Code & Data
Homogeneous
Tool Support
56
Conventional
Language
Context
Specific
Homogeneous
Code & Data
Homogeneous
Tool Support
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
57
Renggli et al.ECOOP 2010
58
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
59
MarcoZanoli,cc-by-sa,2.5,www.wikipedia.de
Editor
Compiler
Debugger
Syntax
Language 1
60
Editor
Compiler
Debugger
Syntax
Language 1
61
Language 2
Editor
Compiler
Debugger
Syntax
Language 1
62
Language 2
Editor
Compiler
Debugger
Syntax
Language 1
63
Language 2
Language Boxes
64
65
SELECT	
  *	
  FROM	
  users
66
|	
  r	
  |
r	
  :=	
  
^	
  User	
  fromRow:	
  r
.SELECT	
  *	
  FROM	
  users
Language
Scope
Language
Concern
Language
Change
Language
Box
67
Language Scope
Active?
68
Language Scope
69
‣ System
‣ Packages
‣ Classes
‣ Methods
Language Scope
70
Language Concern
Semantics
71
Language Concern
Transformation
72
Language Concern
73
Context Menus
Navigation Search
Code Expansion
Code Completion
Error Correction
Custom Inspector
Refactorings
Code Folding
Highlighting
Language Change
74
Syntax
Language Change
75
Host Language
Language Change
76
Host Language
+ SQL Language
Language Change
77
Host Language
+ SQL Language
+ ...
Host Language
+ SQL Language
+ ...
= Custom Host Language
Language Change
78
79
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
80
Renggli et al.SLE 2009
Language Boxes
Host Language
Dynamic
Grammars
81
Language and Tool Extensions
Language
Change
Language
Concern
Language
Scope
Language
Box
82
Language
Change
= Host Language
δ
83
Language
Change
=
Host Language
Grammarδ
84
Language
Change
=
Grammar
Transformation
85
scanIdentifier
	 self step.	
	 ((currentCharacter between: $A and: $Z) or:
[ currentCharacter between: $a and: $z ]) ifTrue: [
	 	 [ self recordMatch: #IDENTIFIER.
	 	 self step.
	 	 (currentCharacter between: $0 and: $9)
or: [ (currentCharacter between: $A and: $Z) or:
[ currentCharacter between: $a and: $z ] ] ]
		 	 	 whileTrue.
	 ^ self reportLastMatch ]
86
#(	#[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41]
	 #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112]
	 #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34]
	 #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41]
	 #[0 1 210 0 76 0 81]
	 #[0 1 214 0 76 0 81]
	 #[1 0 173 0 76 0 177 0 81]
	 #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41]
	 #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 69]

 #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34]

 #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76]
	 #[0 2 50 0 21 0 25 0 26 0 76 0 79]
	 #[1 1 13 0 76 2 85 0 124 1 21 0 125]
	 #[1 2 89 0 17 2 30 0 21 2 30 0 82]
	 #[1 2 93 0 21 2 97 0 82] )
87
Scannerless
Parser Combinator
88
a..z a..z
0..9
ID	
  ::=	
  letter	
  {	
  letter	
  |	
  digit	
  }	
  ;
89
letter
letter digit
sequence
choice
many
ID	
  ::=	
  letter	
  {	
  letter	
  |	
  digit	
  }	
  ;
90
Grammar
Transformation
91
letter
letter digit
sequence
choice
many
letter	
  	
  !	
  	
  letter	
  |	
  "_"
92
letter
digit
sequence
choice
manychoice
_
letter
choice
_
letter	
  	
  !	
  	
  letter	
  |	
  "_"	
  
93
letter digit
sequence
choice
manychoice
_
Optimizations
94
Grammar
Composition
95
Insert	
  grammar	
  fragment
before/after	
  grammar	
  production
as	
  a	
  choice/sequence/replacement.
96
Language Change
Insert	
  SQL	
  grammar
after	
  expression	
  production
as	
  an	
  additional	
  choice
97
Language Change
98
Language Change
Variable
Literal
Parens
Expr:
99
Language Change
Variable
Literal
Parens
Expr:
SQL
Conflicts &
Ambiguities
100
SELECT	
  *	
  FROM	
  users
101
SELECT	
  *	
  FROM	
  users
102
|	
  r	
  |
r	
  :=	
  
^	
  User	
  fromRow:	
  r
.
expr sql|
103
SELECT	
  *	
  FROM	
  users<SQL: >
104
Parsing Expression
Grammars
105
expr sql/
ordered
106
expr sql/
no conflict
107
expr sql/
108
surprise
/ exprsql
109
surprise
expr sql|
110
unordered
expr sql|
111
!sql	
  expr	
  /	
  !expr	
  sql
expr sql$
112
!sql	
  expr	
  /	
  !expr	
  sql	
  /	
  ui
expr sql$
113
!sql	
  expr	
  /	
  !expr	
  sql	
  /	
  ui
Language and Tool Extensions
Language Boxes
Host Language
Dynamic
Grammars
Renggli et al.DYLA 2010
114
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
115
Assignments and Swapping
Asynchronous Messages
Automaton
Brainfuck Language
Functional Pattern Matching
Grammar Definition
Message Pipes
Mondrian
Object Relationships
Positional Arguments
Program Checking
Quasiquoting
Regular Expression
Roman Numbers
SPath Expression
SQL
Schematic Tables
String Interpolation
Transactional Memory
Tuple Space
116
[http://scg.unibe.ch/research/helvetia/examples]
Assignments and Swapping
Asynchronous Messages
Automaton
Brainfuck Language
Functional Pattern Matching
Grammar Definition
Message Pipes
✓Mondrian
Object Relationships
Positional Arguments
Program Checking
Quasiquoting
Regular Expression
Roman Numbers
SPath Expression
✓SQL
Schematic Tables
String Interpolation
Transactional Memory
Tuple Space
117
[http://scg.unibe.ch/research/helvetia/examples]
Assignments and Swapping
Asynchronous Messages
Automaton
Brainfuck Language
Functional Pattern Matching
Grammar Definition
Message Pipes
✓Mondrian
Object Relationships
Positional Arguments
‣ Program Checking
‣ Quasiquoting
Regular Expression
Roman Numbers
SPath Expression
✓SQL
Schematic Tables
String Interpolation
‣ Transactional Memory
Tuple Space
118
[http://scg.unibe.ch/research/helvetia/examples]
apply
hasChanged
hasConflict
Change
object
*
changes
Process
0..1
currentTransaction
do: aBlock
retry: aBlock
checkpoint
abort: anObject
escapeContext
Transaction
previousCopy
workingCopy
ObjectChange
applyBlock
conflictTestBlock
CustomChange
*
Transactional Memory
119
Meta-Programming Facilities
``(`,(aString) asRegex)
120
Domain-Specific
Program Checking
121
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
Renggli et al.
CLSS 2009 Renggli et al.
IWST 2009 Nierstrasz et al.
LNCS 2009 Renggli et al.
TOOLS 2010
122
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
123
To support seamless integration of context-dependent
languages without breaking the tools, we need
1.	 a host-language grammar that can be changed by
language extensions,
2.	 a first-class language description used by the
development environment, and
3.	 a transformation mechanism of the embedded
language into a common executable representation.
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
124
To support seamless integration of context-dependent
languages without breaking the tools, we need
1.	 a host-language grammar that can be changed by
language extensions,
2.	 a first-class language description used by the
development environment, and
3.	 a transformation mechanism of the embedded
language into a common executable representation.
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
125
To support seamless integration of context-dependent
languages without breaking the tools, we need
1.	 a host-language grammar that can be changed by
language extensions,
2.	 a first-class language description used by the
development environment, and
3.	 a transformation mechanism of the embedded
language into a common executable representation.
Language Boxes
Host Language
Dynamic
Grammars
Language and Tool Extensions
126
To support seamless integration of context-dependent
languages without breaking the tools, we need
1.	 a host-language grammar that can be changed by
language extensions,
2.	 a first-class language description used by the
development environment, and
3.	 a transformation mechanism of the embedded
language into a common executable representation.
Language Boxes
Host Language
Dynamic
Grammars
127
Language and Tool Extensions

More Related Content

Viewers also liked

Magritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersMagritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersLukas Renggli
 
Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParserLukas Renggli
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software DevelopmentLukas Renggli
 
Natural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsNatural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsLukas Renggli
 
Berghs Interactive Communication
Berghs Interactive CommunicationBerghs Interactive Communication
Berghs Interactive CommunicationPeter Kamstedt
 
Bilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli RealfonzoBilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli RealfonzoDanislide
 
Differentiating learning
Differentiating learningDifferentiating learning
Differentiating learningAlan Stange
 
Communication theory redraft
Communication theory redraftCommunication theory redraft
Communication theory redraftGretaMedelyte
 
Bloom s taxonomy
 Bloom s taxonomy Bloom s taxonomy
Bloom s taxonomyTriana Dewi
 
Bloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathurBloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathurDivya Gigy
 
Communication theory 1
Communication theory 1Communication theory 1
Communication theory 1David Phillips
 
Communication theory
Communication theoryCommunication theory
Communication theoryTravis
 
Introduction To Communication Theory
Introduction To Communication TheoryIntroduction To Communication Theory
Introduction To Communication TheoryArun Jacob
 

Viewers also liked (20)

Magritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersMagritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End Users
 
Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParser
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
 
Natural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsNatural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking Tools
 
Magritte
MagritteMagritte
Magritte
 
Berghs Interactive Communication
Berghs Interactive CommunicationBerghs Interactive Communication
Berghs Interactive Communication
 
Bilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli RealfonzoBilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli Realfonzo
 
Differentiating learning
Differentiating learningDifferentiating learning
Differentiating learning
 
Bloom taxonomy
Bloom taxonomyBloom taxonomy
Bloom taxonomy
 
Magritte Blitz
Magritte BlitzMagritte Blitz
Magritte Blitz
 
Bloom taxonomy presentation
Bloom taxonomy presentationBloom taxonomy presentation
Bloom taxonomy presentation
 
Communication theory redraft
Communication theory redraftCommunication theory redraft
Communication theory redraft
 
Bloom's taxonomy
Bloom's taxonomyBloom's taxonomy
Bloom's taxonomy
 
Bloom s taxonomy
 Bloom s taxonomy Bloom s taxonomy
Bloom s taxonomy
 
Bloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathurBloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathur
 
Theories of Communication
Theories of CommunicationTheories of Communication
Theories of Communication
 
Communication theories
Communication theoriesCommunication theories
Communication theories
 
Communication theory 1
Communication theory 1Communication theory 1
Communication theory 1
 
Communication theory
Communication theoryCommunication theory
Communication theory
 
Introduction To Communication Theory
Introduction To Communication TheoryIntroduction To Communication Theory
Introduction To Communication Theory
 

Similar to Dynamic Language Embedding With Homogeneous Tool Support

Helvetia
HelvetiaHelvetia
HelvetiaESUG
 
Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Vitaly Baum
 
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...Data Con LA
 
WordPress Plugin Localization
WordPress Plugin LocalizationWordPress Plugin Localization
WordPress Plugin LocalizationRonald Huereca
 
Declare Your Language (at DLS)
Declare Your Language (at DLS)Declare Your Language (at DLS)
Declare Your Language (at DLS)Eelco Visser
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
 
How to check valid Email? Find using regex.
How to check valid Email? Find using regex.How to check valid Email? Find using regex.
How to check valid Email? Find using regex.Poznań Ruby User Group
 
Lex tool manual
Lex tool manualLex tool manual
Lex tool manualSami Said
 
Vitalii Braslavskyi - Declarative engineering
Vitalii Braslavskyi - Declarative engineering Vitalii Braslavskyi - Declarative engineering
Vitalii Braslavskyi - Declarative engineering Grammarly
 
Vitalii Braslavskyi "Declarative engineering"
Vitalii Braslavskyi "Declarative engineering"Vitalii Braslavskyi "Declarative engineering"
Vitalii Braslavskyi "Declarative engineering"Fwdays
 
Introduction to c_sharp
Introduction to c_sharpIntroduction to c_sharp
Introduction to c_sharpHEM Sothon
 
Introduction to c_sharp
Introduction to c_sharpIntroduction to c_sharp
Introduction to c_sharpJayanta Basak
 
System Programming Unit III
System Programming Unit IIISystem Programming Unit III
System Programming Unit IIIManoj Patil
 
Building User experience for CLI(Command Line Interface)
Building User experience for CLI(Command Line Interface)Building User experience for CLI(Command Line Interface)
Building User experience for CLI(Command Line Interface)Dakshika Jayathilaka
 
JSLounge - TypeScript 소개
JSLounge - TypeScript 소개JSLounge - TypeScript 소개
JSLounge - TypeScript 소개Reagan Hwang
 
270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.pptUdhayaKumar175069
 
Survey of programming language getting started in C
Survey of programming language getting started in CSurvey of programming language getting started in C
Survey of programming language getting started in Cummeafruz
 
270 1 c_intro_up_to_functions
270 1 c_intro_up_to_functions270 1 c_intro_up_to_functions
270 1 c_intro_up_to_functionsray143eddie
 
270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.pptAlefya1
 

Similar to Dynamic Language Embedding With Homogeneous Tool Support (20)

Helvetia
HelvetiaHelvetia
Helvetia
 
Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)
 
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
 
WordPress Plugin Localization
WordPress Plugin LocalizationWordPress Plugin Localization
WordPress Plugin Localization
 
Declare Your Language (at DLS)
Declare Your Language (at DLS)Declare Your Language (at DLS)
Declare Your Language (at DLS)
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
 
How to check valid Email? Find using regex.
How to check valid Email? Find using regex.How to check valid Email? Find using regex.
How to check valid Email? Find using regex.
 
Unit 1 cd
Unit 1 cdUnit 1 cd
Unit 1 cd
 
Lex tool manual
Lex tool manualLex tool manual
Lex tool manual
 
Vitalii Braslavskyi - Declarative engineering
Vitalii Braslavskyi - Declarative engineering Vitalii Braslavskyi - Declarative engineering
Vitalii Braslavskyi - Declarative engineering
 
Vitalii Braslavskyi "Declarative engineering"
Vitalii Braslavskyi "Declarative engineering"Vitalii Braslavskyi "Declarative engineering"
Vitalii Braslavskyi "Declarative engineering"
 
Introduction to c_sharp
Introduction to c_sharpIntroduction to c_sharp
Introduction to c_sharp
 
Introduction to c_sharp
Introduction to c_sharpIntroduction to c_sharp
Introduction to c_sharp
 
System Programming Unit III
System Programming Unit IIISystem Programming Unit III
System Programming Unit III
 
Building User experience for CLI(Command Line Interface)
Building User experience for CLI(Command Line Interface)Building User experience for CLI(Command Line Interface)
Building User experience for CLI(Command Line Interface)
 
JSLounge - TypeScript 소개
JSLounge - TypeScript 소개JSLounge - TypeScript 소개
JSLounge - TypeScript 소개
 
270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt
 
Survey of programming language getting started in C
Survey of programming language getting started in CSurvey of programming language getting started in C
Survey of programming language getting started in C
 
270 1 c_intro_up_to_functions
270 1 c_intro_up_to_functions270 1 c_intro_up_to_functions
270 1 c_intro_up_to_functions
 
270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt270_1_CIntro_Up_To_Functions.ppt
270_1_CIntro_Up_To_Functions.ppt
 

More from Lukas Renggli

Domain-Specific Program Checking
Domain-Specific Program CheckingDomain-Specific Program Checking
Domain-Specific Program CheckingLukas Renggli
 
Language Boxes — Bending the Host Language with Modular Language Changes
Language Boxes — Bending the Host Language with Modular Language ChangesLanguage Boxes — Bending the Host Language with Modular Language Changes
Language Boxes — Bending the Host Language with Modular Language ChangesLukas Renggli
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status MessageLukas Renggli
 
Seaside - The Revenge of Smalltalk
Seaside - The Revenge of SmalltalkSeaside - The Revenge of Smalltalk
Seaside - The Revenge of SmalltalkLukas Renggli
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged downLukas Renggli
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and FutureLukas Renggli
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for SmalltalkLukas Renggli
 
Seaside - Web Development As You Like It
Seaside - Web Development As You Like ItSeaside - Web Development As You Like It
Seaside - Web Development As You Like ItLukas Renggli
 
5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of SeasideLukas Renggli
 

More from Lukas Renggli (11)

Dynamic grammars
Dynamic grammarsDynamic grammars
Dynamic grammars
 
Domain-Specific Program Checking
Domain-Specific Program CheckingDomain-Specific Program Checking
Domain-Specific Program Checking
 
Language Boxes — Bending the Host Language with Modular Language Changes
Language Boxes — Bending the Host Language with Modular Language ChangesLanguage Boxes — Bending the Host Language with Modular Language Changes
Language Boxes — Bending the Host Language with Modular Language Changes
 
jQuery for Seaside
jQuery for SeasidejQuery for Seaside
jQuery for Seaside
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
 
Seaside - The Revenge of Smalltalk
Seaside - The Revenge of SmalltalkSeaside - The Revenge of Smalltalk
Seaside - The Revenge of Smalltalk
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged down
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and Future
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for Smalltalk
 
Seaside - Web Development As You Like It
Seaside - Web Development As You Like ItSeaside - Web Development As You Like It
Seaside - Web Development As You Like It
 
5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside
 

Recently uploaded

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 

Dynamic Language Embedding With Homogeneous Tool Support