Design of large-scale polylingual systems

Building systems from existing applications written in two or more languages is common practice. Such systems are polylingual. Polylingual systems are relatively easy to build when the number of APIs needed to achieve language interoperability is small. However, when the number of distinct APIs become large, maintaining and evolving polylingual systems becomes a notoriously difficult task. In this paper, we present a simple, practical, and effective way to develop, maintain, and evolve large-scale polylingual systems. Our approach relies on recursive type systems whose instances can be manipulated by reflection. Foreign objects (i.e. objects that are not defined in a host programming language) are abstracted as graphs and path expressions are used for accessing and manipulating data. Path expressions are implemented by type reification - turning foreign type instances into first-class objects and enabling access to and manipulation of them in a host programming language. Doing this results in multiple benefits, including coding simplicity and uniformity that we demonstrate in a complex commercial project.

[1]  Jack C. Wileden,et al.  Toward Painless Polylingual Persistence , 1996, POS.

[2]  Jack C. Wileden,et al.  Polylingual systems: an approach to seamless interoperability , 1998 .

[3]  Rudolf K. Keller,et al.  Design components: towards software composition at the design level , 1998, Proceedings of the 20th International Conference on Software Engineering.

[4]  Nicolás Marín,et al.  Review of Data on the Web: from relational to semistructured data and XML by Serge Abiteboul, Peter Buneman, and Dan Suciu. Morgan Kaufmann 1999. , 2003, SGMD.

[5]  Jack C. Wileden,et al.  Automated support for seamless interoperability in polylingual software systems , 1996, SIGSOFT '96.

[6]  Alan Kaplan,et al.  The Exu approach to safe, transparent and lightweight interoperability , 2001, 25th Annual International Computer Software and Applications Conference. COMPSAC 2001.

[7]  Wolfgang Emmerich,et al.  Engineering Distributed Objects , 2000, Lecture Notes in Computer Science.

[8]  John V. E. Ridgway,et al.  Why IDLs are not ideal , 1998, Proceedings Ninth International Workshop on Software Specification and Design.

[9]  Jack C. Wileden,et al.  Software interoperability: principles and practice , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[10]  Jack C. Wileden,et al.  Software Interoperability: Principles and Practice , 1997, Proceedings of the (19th) International Conference on Software Engineering.

[11]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[12]  David Garlan,et al.  Architectural Mismatch: Why Reuse Is So Hard , 1995, IEEE Softw..

[13]  Wendy E. Mackay,et al.  Reification, polymorphism and reuse: three principles for designing visual interfaces , 2000, AVI '00.

[14]  Dan Suciu,et al.  Data on the Web: From Relations to Semistructured Data and XML , 1999 .

[15]  Jr. Frederick P. Brooks,et al.  The mythical man-month (anniversary ed.) , 1995 .

[16]  Sheng Liang,et al.  Java Native Interface: Programmer's Guide and Reference , 1999 .

[17]  Sheng Liang,et al.  Java Native Interface: Programmer's Guide and Specification , 1999 .

[18]  Mitchell Wand,et al.  Reification: Reflection without metaphysics , 1984, LFP '84.

[19]  Dewayne E. Perry,et al.  Software architecture and its relevance to software engineering , 1997 .

[20]  Fred P. Brooks,et al.  The Mythical Man-Month , 1975, Reliable Software.

[21]  Joshua S. Auerbach,et al.  Mockingbird: flexible stub compilation from pairs of declarations , 1999, Proceedings. 19th IEEE International Conference on Distributed Computing Systems (Cat. No.99CB37003).