• Keine Ergebnisse gefunden

Transparent object proxies for javascript

N/A
N/A
Protected

Academic year: 2022

Aktie "Transparent object proxies for javascript"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jens Knoop, Uwe Zdun (Hrsg.): Software Engineering 2016, Lecture Notes in Informatics (LNI), Gesellschaft f¨ur Informatik, Bonn 2016 23

Transparent Object Proxies for JavaScript

Matthias Keil1, Omer Farooq1, Sankha Narayan Guria2, Andreas Schlegel1, Manuel Geffken1, and Peter Thiemann1

Abstract:

This work appeared in the conference proceedings of theEuropean Conference on Object-Oriented Programming, ECOOP 2015.

One important question in the design of a proxy API is whether a proxy object should inherit the identity of its target. Apparently proxies should have their own identity for security-related appli- cations whereas other applications, in particular contract systems, require transparent proxies that compare equal to their target objects.

In this work we examine the issue with transparency in various use cases for proxies, discuss different approaches to obtain transparency, and propose two designs that require modest modifications in the JavaScript engine and cannot be bypassed by the programmer.

The JavaScript Proxy API embodies a design decision that reveals the presence of proxies in some important use cases. This decision concerns object equality. Proxies areopaque, which means that each proxy has its own identity, different from all other (proxy or non- proxy) objects.

Given opaque proxies, an equality test can be used to distinguish a proxy from its target as demonstrated in the following example:

1 vartarget ={/∗some object∗/};

2 varhandler ={/∗empty handler∗/};

3 varproxy =newProxy (target, handler);

4 proxy===target;// evaluates to false

Even thoughtargetandproxybehave identically, they are not considered equal. Thus, in a program that uses object equality, the introduction of a proxy along one execution path may change the meaning of the program without even invoking an operation on the proxy (which may behave differently from the same operation on the target).

Equality for opaque proxies works well under the assumption that proxies and their tar- gets are never part of the same execution environment. But the assumption that proxies never share their execution environment with their targets is not always appropriate. One prominent use case is the implementation of a contract system.

Two examples for such systems are the contract framework of Racket [FFP14, Chapter 7]

and TreatJS for JavaScript [KT15]. Both systems implement contracts on objects with spe-

1University of Freiburg, Freiburg, Germany,{keilr,schlegea,geffken,thiemann}@informatik.uni-freiburg.de

2Indian Institute of Technology Jodhpur, Jodhpur, India, sankha@iitj.ac.in

(2)

24 Matthias Keil et al.

cific wrapper objects, Racket’s chaperones or impersonators [St12] and JavaScript proxies, respectively. But this may chang the semantics of a program and thus it violates a ground rule for monitoring: a monitor should never interfere with a program conforming to the monitored property.

Our ECOOP paper [Ke15] shows that a significant number of object comparisons would fail when mixing opaque proxies and their target objects, e.g. when gradually adding con- tracts to a program. As neither the transparent nor the opaque implementation of proxies is appropriate for all use cases, we propose an alternative designs fortransparent proxies that is better suited for use cases such as certain contract wrappers and access restricting membranes.

We use object capabilities to create proxies in a particular realm and to create an equal- ity function that only reveals proxies for that realm. A new realm constructor returns a new transparency realm represented by an object that consists of a fresh constructor for transparent proxies (namedConstructor) and anequalsfunction revealing proxies of that realm.

5 varrealm = TransparentProxy.createRealm();

6 varproxy == realm.Constructor(target, handler);

7 proxy===target;// true

8 realm.equals(proxy, target);// false

The proxy proxyis transparent with respect to equality unless someone uses therealm.

equalsmethod. Therealm.equalsmethod is a capability that represents the right to reveal proxies of that realm. In addition, the realm also contains a constructor for realm-aware weak maps and weak sets.

References

[Bo15] Boyland, John Tang, ed. 29th European Conference on Object-Oriented Programming, ECOOP 2015, July 5-10, 2015, Prague, Czech Republic, volume 37 of LIPIcs. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, 2015.

[FFP14] Flatt, Matthew; Findler, Robert Bruce; PLT: . The Racket Guide, v.6.0 edition, March 2014.http://docs.racket-lang.org/guide/index.html.

[Ke15] Keil, Matthias; Guria, Sankha Narayan; Schlegel, Andreas; Geffken, Manuel; Thiemann, Peter: Transparent Object Proxies in JavaScript. In: (Boyland) [Bo15], pp. 149–173.

[KT15] Keil, Matthias; Thiemann, Peter: TreatJS: Higher-Order Contracts for JavaScripts. In:

(Boyland) [Bo15], pp. 28–51.

[St12] Strickland, T. Stephen; Tobin-Hochstadt, Sam; Findler, Robert Bruce; Flatt, Matthew:

Chaperones and impersonators: run-time support for reasonable interposition. In (Leavens, Gary T.; Dwyer, Matthew B., eds): Proceedings of the 27th Annual ACM SIGPLAN Con- ference on Object-Oriented Programming, Systems, Languages, and Applications, OOP- SLA 2012, part of SPLASH 2012, Tucson, AZ, USA, October 21-25, 2012. ACM, pp.

943–962, 2012.

Referenzen

ÄHNLICHE DOKUMENTE

Subsequently, it was realized that the brGDGT composition in Lake Challa (Kenya; Sinninghe Damsté et al., 2009) and Lake Towuti (Indonesia; Tierney and Russell, 2009) was

Using a depth habitat of 50 m, a lifespan of 30 days and a sinking speed of 200 m per day, the average drift distances, which are defined as the average shortest distance from

The modeled noble gas concentrations C i,eq (i = Ar, Kr, Xe) are expressed as a function of the change in lake level h, and are normalized to the equilibrium concentrations in

Figure 6 Time series of winter δ 18 O in Meiringen (MEI), Guttannen (GTT), Grimsel Hospiz (GRH) and Fiescherhorn (FH) together with the respective temperature,

The multi-valence nature of vanadium means that its geochemical behaviour will be ƒO 2 -dependent, so that its concentration or V/Sc (or V/Ga), can serve as proxies for

Major element compositions of clinopyroxene and other minerals necessary for computing oxidation state were measured with JEOL JXA-8900 superprobe and are reported

These functions include connection management, local maintenance of data structures such as the client-side copy of the audio context and device data, translation of client

By using the generic proxy mechanism, the synchronisation between the exter- nal information sources and the database system is done automatically when the information source is