SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Points-to Analysis for Context-
Oriented JavaScript Programs
Sergio Cardenas, Paul Leger, Hiroaki Fukuda, Nicolás Cardozo
Systems an Computing Engineering - Universidad de los Andes, Bogotá - Colombia
Universidad Católica del Norte, Coquimbo - Chile
Shibaura Institute of Technology, Tokyo - Japan
se.cardenas@uniandes.edu.co, pleger@ucn.cl, hiroaki@shibaura-it.ac.jp, n.cardozo@uniandes.edu.co
@ncardoz
Formal Techniques for Java-like Programs - 18 / 07 / 2023
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
f
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
o1 inst1
f
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
o1
o2
inst1
inst2
f
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
o1
o2
inst1
inst2
o3
f
first
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
o1
o2
inst1
inst2
o3
inst1
f
first
Points-to analysis
2
Object first(Object o1, Object o2){
return o1;
}
Object second(Object o1, Object o2){
return first(o2, o1);
}
void f() {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = first(o1, o2);
Object o4 = first(o2, o1);
Object o5 = second(o1, o2);
Object o6 = second(o2, o1);
}
o1
o2
inst1
inst2
o3
inst1
first
inst1
inst2
...
f
first
3
programs need to be more dynamic …
3
programs need to be more dynamic …
… due to complex and
changing requirements
3
programs need to be more dynamic …
… due to complex and
changing requirements
new modularity
abstractions
3
programs need to be more dynamic …
… due to complex and
changing requirements
new modularity
abstractions
changing locations
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Compression = new cop.Context({});
CompressionBehavior = Trait({
send: function(msg) {
return "<C>" + this.proceed() + "<C>";
}
});
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Compression = new cop.Context({});
CompressionBehavior = Trait({
send: function(msg) {
return "<C>" + this.proceed() + "<C>";
}
});
Encryption.adapt(Msg, EncryptionBehavior);
Compression.adapt(Msg, CompressionBehavior);
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Compression = new cop.Context({});
CompressionBehavior = Trait({
send: function(msg) {
return "<C>" + this.proceed() + "<C>";
}
});
Encryption.adapt(Msg, EncryptionBehavior);
Compression.adapt(Msg, CompressionBehavior);
Encryption.activate();
Context-oriented programming (COP)
4
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Compression = new cop.Context({});
CompressionBehavior = Trait({
send: function(msg) {
return "<C>" + this.proceed() + "<C>";
}
});
Encryption.adapt(Msg, EncryptionBehavior);
Compression.adapt(Msg, CompressionBehavior);
Encryption.activate();
Compression.activate();
Context-oriented programming (COP)
5
msg = Msg();
msg.send(42);
Context-oriented programming (COP)
5
Msg = {
send: function(msg) {
return msg;
}
};
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Compression = new cop.Context({});
CompressionBehavior = Trait({
send: function(msg) {
return "<C>" + this.proceed() + "<C>";
}
});
msg = Msg();
msg.send(42);
6
Base analysis precise and efficient
to determine different properties
about dynamic programs in COP
Analyzing COP programs
7
COP program
Analyzing COP programs
7
COP program
Context.adapt(object1, trait1)
Context.adapt(object2, trait1)
Context.adapt(objectn, traitm)
…
1. tuple extraction
⟨ctx, trait, obj⟩
Analyzing COP programs
7
COP program
Context.adapt(object1, trait1)
Context.adapt(object2, trait1)
Context.adapt(objectn, traitm)
…
1. tuple extraction
⟨ctx, trait, obj⟩ 2. Code transformation
Analyzing COP programs
7
COP program
Context.adapt(object1, trait1)
Context.adapt(object2, trait1)
Context.adapt(objectn, traitm)
…
1. tuple extraction
⟨ctx, trait, obj⟩ 2. Code transformation 3. Field-sensitive correlation
tracking analysis
Context identification and transformation
8
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Context identification and transformation
9
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Context identification and transformation
9
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
o = {
send: function() {
return "<E>" + this.proceed() + “<E>";
}
}
EncryptionBehavior = Trait(o);
EncryptionBehavior.obj = o;
Context identification and transformation
10
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Context identification and transformation
10
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Encryption.adaptation1 = {
obj: Msg,
trait: EncryptionBehavior
}
Context identification and transformation
11
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
Context identification and transformation
11
Encryption.adapt(Msg, EncryptionBehavior);
Encryption.activate();
Encryption = new cop.Context({});
EncryptionBehavior = Trait({
send: function(msg) {
return "<E>" + this.proceed() + "<E>";
}
});
for(var p in
Encryption.adaptation1.trait.obj) {
(function (prop) {
Encryption.adaptation1.obj[prop] =
Encryption.adaptation1.trait.obj[prop];
})(p);
}
12
Experiments
use four
different
applications
comparing
field-sensitive
analysis and
our extension
hello-world.js
shape-polymorphism.js
video-encoder.js
course-management.js
https://
fl
aglab.github.io/AdaptiveSystemAnalysis/
Precision evaluation
13
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
baseline ours
r1
r2
r3
r4
r6
r5
r7
r8
r9
Precision evaluation
13
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
area
baseline ours
r1
r1
r2
r3
r4
r6
r5
r7
r8
r9
Precision evaluation
13
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
area
baseline ours
r1
r1
r2
r3
r4
r6
r5
r1
r3
r6
r7
r8
r9
area
Precision evaluation
14
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
baseline ours
r1
r2
r3
r4
r6
r5
r7
r8
r9
Precision evaluation
14
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
sides
baseline ours
r9
r1
r2
r3
r4
r6
r5
r7
r8
r9
Precision evaluation
14
Shape = {
b: 2,
h: 3,
type: "shape",
getType: function() { return this.type; },
area: function() { return 'Calling an abstract method area’; },
perimeter: function() { return 'Calling an abstract method perimeter’; },
numberOfSides: function() { return 0; }
};
Triangle = new cop.Context({});
TriangleBehavior = cop.Trait({
getType: function() { return “triangle"; },
area: function() { return this.b * this.h/2; },
perimeter: function() {
return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2));
},
numberOfSides: function() { return 3; }
});
Triangle.adapt(TShape, TriangleBehavior);
Circle = new cop.Context({});
CircleBehavior = cop.Trait({
getType: function() { return “circle"; },
area: function() { return Math.pow(this.b, 2) * Math.PI; },
perimeter: function() { return this.b * 2* Math.PI; },
numberOfSides: function() {
throw new Error("Number of sides is not defined in a circle");
}
});
Circle.adapt(Shape, CircleBehavior);
sides
baseline ours
r9
r1
r2
r3
r4
r6
r5
r8
r7
r9
r7
r8
r9
sides
The road ahead … adaptation completeness
15
Context1 = new cop.Context({});
Behavior1 = cop.Trait({
foo: function() ...
});
Context1.adapt(Object, Behavior1);
Context2 = new cop.Context({});
Behavior2 = cop.Trait({
bar: function(){
baz();
foo();
}
});
Context2.adapt(Object, Behavior2);
Object = {
baz: function() ...
};
The road ahead … adaptation completeness
15
Context1 = new cop.Context({});
Behavior1 = cop.Trait({
foo: function() ...
});
Context1.adapt(Object, Behavior1);
Context2 = new cop.Context({});
Behavior2 = cop.Trait({
bar: function(){
baz();
foo();
}
});
Context2.adapt(Object, Behavior2);
Object = {
baz: function() ...
};
Context1.activate();
Context2.activate();
bar();
1.
The road ahead … adaptation completeness
15
Context1 = new cop.Context({});
Behavior1 = cop.Trait({
foo: function() ...
});
Context1.adapt(Object, Behavior1);
Context2 = new cop.Context({});
Behavior2 = cop.Trait({
bar: function(){
baz();
foo();
}
});
Context2.adapt(Object, Behavior2);
Object = {
baz: function() ...
};
Context1.activate();
Context2.activate();
bar();
Context2.activate();
bar();
1. 2.
The road ahead … adaptation completeness
15
Context1 = new cop.Context({});
Behavior1 = cop.Trait({
foo: function() ...
});
Context1.adapt(Object, Behavior1);
Context2 = new cop.Context({});
Behavior2 = cop.Trait({
bar: function(){
baz();
foo();
}
});
Context2.adapt(Object, Behavior2);
Object = {
baz: function() ...
};
Context1.activate();
Context2.activate();
bar();
Context2.activate();
bar();
1. 2.
Conclusion
16
@ncardoz
COP
analysis framework
Conclusion
16
@ncardoz
COP
analysis framework
First analysis taking into
account the modularity and
dynamic aspects of COP
Conclusion
16
@ncardoz
COP
analysis framework
First analysis taking into
account the modularity and
dynamic aspects of COP
Improved recall for COP
programs (without proceed)

Weitere ähnliche Inhalte

Ähnlich wie [FTfJP23] Points-to Analysis for Context-oriented Javascript Programs

Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Codemotion
 
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Codemotion
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29Bilal Ahmed
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29Bilal Ahmed
 
Java 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR BeneluxJava 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR Beneluxyohanbeschi
 
Java 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR BeneluxJava 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR Beneluxyohanbeschi
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойSigma Software
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойSigma Software
 
25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.pptPiyushAery
 
information on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptinformation on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptssuserf170c4
 
25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.pptPiyushAery
 
information on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptinformation on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptssuserf170c4
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 

Ähnlich wie [FTfJP23] Points-to Analysis for Context-oriented Javascript Programs (20)

Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
 
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29
 
06slide.ppt
06slide.ppt06slide.ppt
06slide.ppt
 
06slide.ppt
06slide.ppt06slide.ppt
06slide.ppt
 
Java 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR BeneluxJava 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR Benelux
 
Java 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR BeneluxJava 8 - Nuts and Bold - SFEIR Benelux
Java 8 - Nuts and Bold - SFEIR Benelux
 
Matlab integration
Matlab integrationMatlab integration
Matlab integration
 
Matlab integration
Matlab integrationMatlab integration
Matlab integration
 
Ds practical file
Ds practical fileDs practical file
Ds practical file
 
Ds practical file
Ds practical fileDs practical file
Ds practical file
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
 
25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt
 
information on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptinformation on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.ppt
 
25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt25-inheritance-polymorphism.ppt
25-inheritance-polymorphism.ppt
 
information on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.pptinformation on -inheritance-polymorphism in java.ppt
information on -inheritance-polymorphism in java.ppt
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 

Mehr von Universidad de los Andes

An expressive and modular layer activation mechanism for Context-Oriented Pro...
An expressive and modular layer activation mechanism for Context-Oriented Pro...An expressive and modular layer activation mechanism for Context-Oriented Pro...
An expressive and modular layer activation mechanism for Context-Oriented Pro...Universidad de los Andes
 
[JIST] Programming language implementations for context-oriented self-adaptiv...
[JIST] Programming language implementations for context-oriented self-adaptiv...[JIST] Programming language implementations for context-oriented self-adaptiv...
[JIST] Programming language implementations for context-oriented self-adaptiv...Universidad de los Andes
 
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning ProjectsUniversidad de los Andes
 
[CIbSE2023] Cross-language clone detection for Mobile Apps
[CIbSE2023] Cross-language clone detection for Mobile Apps[CIbSE2023] Cross-language clone detection for Mobile Apps
[CIbSE2023] Cross-language clone detection for Mobile AppsUniversidad de los Andes
 
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...Universidad de los Andes
 
[CCC'21] Evaluation of Work Stealing Algorithms
[CCC'21] Evaluation of Work Stealing Algorithms[CCC'21] Evaluation of Work Stealing Algorithms
[CCC'21] Evaluation of Work Stealing AlgorithmsUniversidad de los Andes
 
Generating Adaptations from the System Execution using Reinforcement Learning...
Generating Adaptations from the System Execution using Reinforcement Learning...Generating Adaptations from the System Execution using Reinforcement Learning...
Generating Adaptations from the System Execution using Reinforcement Learning...Universidad de los Andes
 
Language Abstractions and Techniques for Developing Collective Adaptive Syste...
Language Abstractions and Techniques for Developing Collective Adaptive Syste...Language Abstractions and Techniques for Developing Collective Adaptive Syste...
Language Abstractions and Techniques for Developing Collective Adaptive Syste...Universidad de los Andes
 
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary study
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary studyDoes Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary study
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary studyUniversidad de los Andes
 
Learning run-time composition of interacting adaptations
Learning run-time composition of interacting adaptationsLearning run-time composition of interacting adaptations
Learning run-time composition of interacting adaptationsUniversidad de los Andes
 
CQL: declarative language for context activation
CQL: declarative language for context activationCQL: declarative language for context activation
CQL: declarative language for context activationUniversidad de los Andes
 
Generating software adaptations using machine learning
Generating software adaptations using machine learningGenerating software adaptations using machine learning
Generating software adaptations using machine learningUniversidad de los Andes
 
[Bachelor_project] Asignación de exámenes finales
[Bachelor_project] Asignación de exámenes finales[Bachelor_project] Asignación de exámenes finales
[Bachelor_project] Asignación de exámenes finalesUniversidad de los Andes
 
Programming language techniques for adaptive software
Programming language techniques for adaptive softwareProgramming language techniques for adaptive software
Programming language techniques for adaptive softwareUniversidad de los Andes
 
Peace COrP: Learning to solve conflicts between contexts
Peace COrP: Learning to solve conflicts between contextsPeace COrP: Learning to solve conflicts between contexts
Peace COrP: Learning to solve conflicts between contextsUniversidad de los Andes
 

Mehr von Universidad de los Andes (18)

An expressive and modular layer activation mechanism for Context-Oriented Pro...
An expressive and modular layer activation mechanism for Context-Oriented Pro...An expressive and modular layer activation mechanism for Context-Oriented Pro...
An expressive and modular layer activation mechanism for Context-Oriented Pro...
 
[JIST] Programming language implementations for context-oriented self-adaptiv...
[JIST] Programming language implementations for context-oriented self-adaptiv...[JIST] Programming language implementations for context-oriented self-adaptiv...
[JIST] Programming language implementations for context-oriented self-adaptiv...
 
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects
[CAIN'23] Prevalence of Code Smells in Reinforcement Learning Projects
 
[CIbSE2023] Cross-language clone detection for Mobile Apps
[CIbSE2023] Cross-language clone detection for Mobile Apps[CIbSE2023] Cross-language clone detection for Mobile Apps
[CIbSE2023] Cross-language clone detection for Mobile Apps
 
Keeping Up! with LaTeX
Keeping Up! with LaTeXKeeping Up! with LaTeX
Keeping Up! with LaTeX
 
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...
[JPDC,JCC@LMN22] Ad hoc systems Management and specification with distributed...
 
[CCC'21] Evaluation of Work Stealing Algorithms
[CCC'21] Evaluation of Work Stealing Algorithms[CCC'21] Evaluation of Work Stealing Algorithms
[CCC'21] Evaluation of Work Stealing Algorithms
 
Generating Adaptations from the System Execution using Reinforcement Learning...
Generating Adaptations from the System Execution using Reinforcement Learning...Generating Adaptations from the System Execution using Reinforcement Learning...
Generating Adaptations from the System Execution using Reinforcement Learning...
 
Language Abstractions and Techniques for Developing Collective Adaptive Syste...
Language Abstractions and Techniques for Developing Collective Adaptive Syste...Language Abstractions and Techniques for Developing Collective Adaptive Syste...
Language Abstractions and Techniques for Developing Collective Adaptive Syste...
 
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary study
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary studyDoes Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary study
Does Neuron Coverage Matter for Deep Reinforcement Learning? A preliminary study
 
Learning run-time composition of interacting adaptations
Learning run-time composition of interacting adaptationsLearning run-time composition of interacting adaptations
Learning run-time composition of interacting adaptations
 
Distributed context Petri nets
Distributed context Petri netsDistributed context Petri nets
Distributed context Petri nets
 
CQL: declarative language for context activation
CQL: declarative language for context activationCQL: declarative language for context activation
CQL: declarative language for context activation
 
Generating software adaptations using machine learning
Generating software adaptations using machine learningGenerating software adaptations using machine learning
Generating software adaptations using machine learning
 
[Bachelor_project] Asignación de exámenes finales
[Bachelor_project] Asignación de exámenes finales[Bachelor_project] Asignación de exámenes finales
[Bachelor_project] Asignación de exámenes finales
 
Programming language techniques for adaptive software
Programming language techniques for adaptive softwareProgramming language techniques for adaptive software
Programming language techniques for adaptive software
 
Peace COrP: Learning to solve conflicts between contexts
Peace COrP: Learning to solve conflicts between contextsPeace COrP: Learning to solve conflicts between contexts
Peace COrP: Learning to solve conflicts between contexts
 
Emergent Software Services
Emergent Software ServicesEmergent Software Services
Emergent Software Services
 

Kürzlich hochgeladen

Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxRoyAbrique
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphThiyagu K
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionSafetyChain Software
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxSayali Powar
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3JemimahLaneBuaron
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 

Kürzlich hochgeladen (20)

Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory Inspection
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 

[FTfJP23] Points-to Analysis for Context-oriented Javascript Programs

  • 1. Points-to Analysis for Context- Oriented JavaScript Programs Sergio Cardenas, Paul Leger, Hiroaki Fukuda, Nicolás Cardozo Systems an Computing Engineering - Universidad de los Andes, Bogotá - Colombia Universidad Católica del Norte, Coquimbo - Chile Shibaura Institute of Technology, Tokyo - Japan se.cardenas@uniandes.edu.co, pleger@ucn.cl, hiroaki@shibaura-it.ac.jp, n.cardozo@uniandes.edu.co @ncardoz Formal Techniques for Java-like Programs - 18 / 07 / 2023
  • 2. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } f
  • 3. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } o1 inst1 f
  • 4. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } o1 o2 inst1 inst2 f
  • 5. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } o1 o2 inst1 inst2 o3 f first
  • 6. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } o1 o2 inst1 inst2 o3 inst1 f first
  • 7. Points-to analysis 2 Object first(Object o1, Object o2){ return o1; } Object second(Object o1, Object o2){ return first(o2, o1); } void f() { Object o1 = new Object(); Object o2 = new Object(); Object o3 = first(o1, o2); Object o4 = first(o2, o1); Object o5 = second(o1, o2); Object o6 = second(o2, o1); } o1 o2 inst1 inst2 o3 inst1 first inst1 inst2 ... f first
  • 8. 3 programs need to be more dynamic …
  • 9. 3 programs need to be more dynamic … … due to complex and changing requirements
  • 10. 3 programs need to be more dynamic … … due to complex and changing requirements new modularity abstractions
  • 11. 3 programs need to be more dynamic … … due to complex and changing requirements new modularity abstractions changing locations
  • 12. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } };
  • 13. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } });
  • 14. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Compression = new cop.Context({}); CompressionBehavior = Trait({ send: function(msg) { return "<C>" + this.proceed() + "<C>"; } });
  • 15. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Compression = new cop.Context({}); CompressionBehavior = Trait({ send: function(msg) { return "<C>" + this.proceed() + "<C>"; } }); Encryption.adapt(Msg, EncryptionBehavior); Compression.adapt(Msg, CompressionBehavior);
  • 16. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Compression = new cop.Context({}); CompressionBehavior = Trait({ send: function(msg) { return "<C>" + this.proceed() + "<C>"; } }); Encryption.adapt(Msg, EncryptionBehavior); Compression.adapt(Msg, CompressionBehavior); Encryption.activate();
  • 17. Context-oriented programming (COP) 4 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Compression = new cop.Context({}); CompressionBehavior = Trait({ send: function(msg) { return "<C>" + this.proceed() + "<C>"; } }); Encryption.adapt(Msg, EncryptionBehavior); Compression.adapt(Msg, CompressionBehavior); Encryption.activate(); Compression.activate();
  • 19. Context-oriented programming (COP) 5 Msg = { send: function(msg) { return msg; } }; Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Compression = new cop.Context({}); CompressionBehavior = Trait({ send: function(msg) { return "<C>" + this.proceed() + "<C>"; } }); msg = Msg(); msg.send(42);
  • 20. 6 Base analysis precise and efficient to determine different properties about dynamic programs in COP
  • 22. Analyzing COP programs 7 COP program Context.adapt(object1, trait1) Context.adapt(object2, trait1) Context.adapt(objectn, traitm) … 1. tuple extraction ⟨ctx, trait, obj⟩
  • 23. Analyzing COP programs 7 COP program Context.adapt(object1, trait1) Context.adapt(object2, trait1) Context.adapt(objectn, traitm) … 1. tuple extraction ⟨ctx, trait, obj⟩ 2. Code transformation
  • 24. Analyzing COP programs 7 COP program Context.adapt(object1, trait1) Context.adapt(object2, trait1) Context.adapt(objectn, traitm) … 1. tuple extraction ⟨ctx, trait, obj⟩ 2. Code transformation 3. Field-sensitive correlation tracking analysis
  • 25. Context identification and transformation 8 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } });
  • 26. Context identification and transformation 9 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } });
  • 27. Context identification and transformation 9 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); o = { send: function() { return "<E>" + this.proceed() + “<E>"; } } EncryptionBehavior = Trait(o); EncryptionBehavior.obj = o;
  • 28. Context identification and transformation 10 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } });
  • 29. Context identification and transformation 10 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); Encryption.adaptation1 = { obj: Msg, trait: EncryptionBehavior }
  • 30. Context identification and transformation 11 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } });
  • 31. Context identification and transformation 11 Encryption.adapt(Msg, EncryptionBehavior); Encryption.activate(); Encryption = new cop.Context({}); EncryptionBehavior = Trait({ send: function(msg) { return "<E>" + this.proceed() + "<E>"; } }); for(var p in Encryption.adaptation1.trait.obj) { (function (prop) { Encryption.adaptation1.obj[prop] = Encryption.adaptation1.trait.obj[prop]; })(p); }
  • 32. 12 Experiments use four different applications comparing field-sensitive analysis and our extension hello-world.js shape-polymorphism.js video-encoder.js course-management.js https:// fl aglab.github.io/AdaptiveSystemAnalysis/
  • 33. Precision evaluation 13 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); baseline ours r1 r2 r3 r4 r6 r5 r7 r8 r9
  • 34. Precision evaluation 13 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); area baseline ours r1 r1 r2 r3 r4 r6 r5 r7 r8 r9
  • 35. Precision evaluation 13 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); area baseline ours r1 r1 r2 r3 r4 r6 r5 r1 r3 r6 r7 r8 r9 area
  • 36. Precision evaluation 14 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); baseline ours r1 r2 r3 r4 r6 r5 r7 r8 r9
  • 37. Precision evaluation 14 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); sides baseline ours r9 r1 r2 r3 r4 r6 r5 r7 r8 r9
  • 38. Precision evaluation 14 Shape = { b: 2, h: 3, type: "shape", getType: function() { return this.type; }, area: function() { return 'Calling an abstract method area’; }, perimeter: function() { return 'Calling an abstract method perimeter’; }, numberOfSides: function() { return 0; } }; Triangle = new cop.Context({}); TriangleBehavior = cop.Trait({ getType: function() { return “triangle"; }, area: function() { return this.b * this.h/2; }, perimeter: function() { return this.b + 2*Math.sqrt(Math.pow(this.h,2) + Math.pow(this.b/2, 2)); }, numberOfSides: function() { return 3; } }); Triangle.adapt(TShape, TriangleBehavior); Circle = new cop.Context({}); CircleBehavior = cop.Trait({ getType: function() { return “circle"; }, area: function() { return Math.pow(this.b, 2) * Math.PI; }, perimeter: function() { return this.b * 2* Math.PI; }, numberOfSides: function() { throw new Error("Number of sides is not defined in a circle"); } }); Circle.adapt(Shape, CircleBehavior); sides baseline ours r9 r1 r2 r3 r4 r6 r5 r8 r7 r9 r7 r8 r9 sides
  • 39. The road ahead … adaptation completeness 15 Context1 = new cop.Context({}); Behavior1 = cop.Trait({ foo: function() ... }); Context1.adapt(Object, Behavior1); Context2 = new cop.Context({}); Behavior2 = cop.Trait({ bar: function(){ baz(); foo(); } }); Context2.adapt(Object, Behavior2); Object = { baz: function() ... };
  • 40. The road ahead … adaptation completeness 15 Context1 = new cop.Context({}); Behavior1 = cop.Trait({ foo: function() ... }); Context1.adapt(Object, Behavior1); Context2 = new cop.Context({}); Behavior2 = cop.Trait({ bar: function(){ baz(); foo(); } }); Context2.adapt(Object, Behavior2); Object = { baz: function() ... }; Context1.activate(); Context2.activate(); bar(); 1.
  • 41. The road ahead … adaptation completeness 15 Context1 = new cop.Context({}); Behavior1 = cop.Trait({ foo: function() ... }); Context1.adapt(Object, Behavior1); Context2 = new cop.Context({}); Behavior2 = cop.Trait({ bar: function(){ baz(); foo(); } }); Context2.adapt(Object, Behavior2); Object = { baz: function() ... }; Context1.activate(); Context2.activate(); bar(); Context2.activate(); bar(); 1. 2.
  • 42. The road ahead … adaptation completeness 15 Context1 = new cop.Context({}); Behavior1 = cop.Trait({ foo: function() ... }); Context1.adapt(Object, Behavior1); Context2 = new cop.Context({}); Behavior2 = cop.Trait({ bar: function(){ baz(); foo(); } }); Context2.adapt(Object, Behavior2); Object = { baz: function() ... }; Context1.activate(); Context2.activate(); bar(); Context2.activate(); bar(); 1. 2.
  • 44. Conclusion 16 @ncardoz COP analysis framework First analysis taking into account the modularity and dynamic aspects of COP
  • 45. Conclusion 16 @ncardoz COP analysis framework First analysis taking into account the modularity and dynamic aspects of COP Improved recall for COP programs (without proceed)