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

Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
Lukas Renggli
 
Bilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli RealfonzoBilancio 2012 Napoli Realfonzo
Bilancio 2012 Napoli Realfonzo
Danislide
 
Communication theory redraft
Communication theory redraftCommunication theory redraft
Communication theory redraft
GretaMedelyte
 
Bloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathurBloom's taxonomy for dr mathur
Bloom's taxonomy for dr mathur
Divya Gigy
 
Introduction To Communication Theory
Introduction To Communication TheoryIntroduction To Communication Theory
Introduction To Communication Theory
Arun 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

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
 
Declare Your Language (at DLS)
Declare Your Language (at DLS)Declare Your Language (at DLS)
Declare Your Language (at DLS)
Eelco Visser
 
Lex tool manual
Lex tool manualLex tool manual
Lex tool manual
Sami Said
 
System Programming Unit III
System Programming Unit IIISystem Programming Unit III
System Programming Unit III
Manoj Patil
 
JSLounge - TypeScript 소개
JSLounge - TypeScript 소개JSLounge - TypeScript 소개
JSLounge - TypeScript 소개
Reagan Hwang
 

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

Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
Lukas 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

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
UK Journal
 

Recently uploaded (20)

Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 

Dynamic Language Embedding With Homogeneous Tool Support