Flexible Models for Dynamic Linking

Dynamic linking supports flexible code deployment: partially linked code links further code on the fly, as needed; and thus, end-users receive updates automatically. On the down side, each program run may link different versions of the same code, possibly causing subtle errors which mystify end-users. Dynamic linking in Java and C# are similar: The same linking phases are involved, soundness is based on similar ideas, and executions which do not throw linking errors give the same result. They are, however, not identical: the linking phases are combined differently, and take place in a different order. We develop a non-deterministic model, which includes the behaviour of Java and C#. The non-determinism allows us to describe the design space, to distill the similarities between the two languages, and to use one proof of soundness for both.We also prove that all execution strategies are equivalent in the sense that all terminating executions which do not involve a link error, give the same result.

[1]  Sophia Drossopoulou,et al.  A fragment calculus-towards a model of separate compilation, linking and binary compatibility , 1999, Proceedings. 14th Symposium on Logic in Computer Science (Cat. No. PR00158).

[2]  C MitchellJohn,et al.  A type system for object initialization in the Java bytecode language , 1999 .

[3]  Troy Downing,et al.  Java Virtual Machine , 1997 .

[4]  Davide Ancona,et al.  A calculus of module systems , 2002, J. Funct. Program..

[5]  Scott Nettles,et al.  Dynamic software updating , 2001, PLDI '01.

[6]  Zhenyu Qian,et al.  A formal specification of Java class loading , 2000, OOPSLA '00.

[7]  Joe B. Wells,et al.  Equational Reasoning for Linking with First-Class Primitive Modules , 2000, ESOP.

[8]  Stephen N. Freund,et al.  A formal framework for the Java bytecode language and verifier , 1999, OOPSLA '99.

[9]  Matthias Felleisen,et al.  Classes and mixins , 1998, POPL '98.

[10]  John H. Reppy,et al.  A Calculus for Compiling and Linking Classes , 2000, ESOP.

[11]  Davide Ancona,et al.  A Formal Framework for Java Separate Compilation , 2002, ECOOP.

[12]  Sheng Liang,et al.  Dynamic class loading in the Java virtual machine , 1998, OOPSLA '98.

[13]  Drew Dean,et al.  The security of static typing with dynamic linking , 1997, CCS '97.

[14]  Ira R. Forman,et al.  Release-to-release binary compatibility in SOM , 1995, OOPSLA.

[15]  Andrew D. Gordon,et al.  Typing a multi-language intermediate code , 2001, POPL '01.

[16]  Marvin V. Zelkowitz,et al.  Programming Languages: Design and Implementation , 1975 .

[17]  C MitchellJohn,et al.  A formal framework for the Java bytecode language and verifier , 1999 .

[18]  Sophia Drossopoulou An Abstract Model of Java Dynamic Linking and Loading , 2000, Types in Compilation.

[19]  Luca Cardelli,et al.  Program fragments, linking, and modularization , 1997, POPL '97.

[20]  Martín Abadi,et al.  A type system for Java bytecode subroutines , 1999, TOPL.

[21]  Sarfraz Khurshid,et al.  Is the Java Type System Sound? , 1999, Theory Pract. Object Syst..

[22]  Gary McGraw,et al.  Securing Java: getting down to business with mobile code , 1999 .

[23]  Susan Eisenbach,et al.  Evolution of Distributed Java Programs , 2002, Component Deployment.

[24]  Stephen N. Freund,et al.  A type system for object initialization in the Java bytecode language , 1998, OOPSLA '98.

[25]  Dominic Duggan Sharing in Typed Module Assembly Language , 2000, Types in Compilation.