Abstract
Non-trivial software systems are written using multiple programming languages. While the logic of a system is encoded using one or several general-purpose languages, more specialized parts of the systems are realized using domain-specific languages for aspects such as the user interface, configuration mechanisms, querying of databases, or support for internationalization. To bind all of these different parts together, the artifacts in individual languages are connected by using cross-language links which address artifacts across language boundaries. Many different ways for specifying and using such links have been conceived, and developers have to adhere to the concrete rules mandated by the runtime, framework or library which later performs the link resolution. In this paper, we present a taxonomy of the mechanisms of encoding cross-language linking in well-known open source frameworks from a developers perspective, which shows the choices that have been made and the options available in practice. We describe the process we followed, which is based in part on a survey of language combinations on GitHub and a survey of professional developers, list the dimensions and characteristics of our taxonomy in full, show the classifications of 22 frameworks and mechanisms, four of which are described in detail, and discuss the impact of the choices on application developers.
Similar content being viewed by others
References
Alexander C, Ishikawa S, Silverstein M (1977) A pattern language: towns, buildings, construction. Center for Environmental Structure series, OUP USA, Center for Environmental Structure Berkeley, Calif
Batory D (2005) Feature models, grammars, and propositional formulas. In: Proceedings of the 9th International Conference on Software Product Lines, Springer-Verlag, Berlin, Heidelberg, SPLC’05, pp 7–20. doi:10.1007/11554844_3
Box D, Pattison T (2002) Essential .NET: the common language runtime. Addison-Wesley Longman Publishing Co., Inc., Boston
Burnette E (2009) Hello, Android: introducing Google’s mobile development platform, 2nd edn. Pragmatic Bookshelf, Raleigh
Burtch K (2004) Linux shell scripting with bash. Pearson Higher Education, London
man Chung K (2013) Java server pages specification, maintenance release v2.3. http://www.oracle.com/technetwork/java/javaee/jsp/index.html. Accessed 15 Sep 2016
Delorey DP, Knutson CD, Giraud-Carrier C (2007) Programming language trends in open source development: an evaluation using data from all production phase sourceforge projects. In: Proceedings of the 2nd international workshop on public data about software development (WoPDaSD’07), June 17, Limerick, Ireland
Ekman T, Mechlenborg P, Schultz UP (2007) Flexible language interoperability. J Obj Technol 6(8):95–116. doi:10.5381/jot.2007.6.8.a2
Favre J, Lämmel R, Varanovich A (2012) Modeling the linguistic architecture of software products. In: France RB, Kazmeier J, Breu R, Atkinson C (eds) Model Driven Engineering Languages and Systems—15th International Conference, MODELS 2012, Innsbruck, Austria, September 30-October 5, 2012. Proceedings, Springer, Lecture Notes in Computer Science, vol 7590, pp 151–167. doi:10.1007/978-3-642-33666-9_11
jQuery Foundation T (2016) jQuery API Documentation. http://api.jquery.com/. Accessed 15 Sep 2016
Gordon R, Essential J (1998) Java native interface. Prentince Hall PTR, Upper Saddle River
Gybels K, Wuyts R, Ducasse S, D’Hondt M (2006) Inter-language reflection: a conceptual model and its implementation. Comput Lang Syst Struct 32(2–3):109–124. doi:10.1016/j.cl.2005.10.003
Johnson R, Hoeller J, Donald K, Sampaleanu C, Harrop R, Risberg T, Arendsen A, Davison D, Kopylenko D, Pollack M et al (2004) The spring framework, reference documentation. http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/. Accessed 7 Dec 2016
Kalliamvakou E, Gousios G, Blincoe K, Singer L, German DM, Damian D (2016) An in-depth study of the promises and perils of mining github. Emp Softw Eng 21(5):2035–2071. doi:10.1007/s10664-015-9393-5
Lämmel R, Varanovich A (2014) Interpretation of linguistic architecture. In: Cabot J, Rubin J (eds) Modelling foundations and applications—10th European Conference, ECMFA 2014, York, UK, July 21–25, 2014. Proceedings, Springer, Lecture Notes in Computer Science, vol 8569, pp 67–82. doi:10.1007/978-3-319-09195-2_5
de Mauro P (1999) Internationalizing messages in linux programs. Linux J 1999(59es):59–63
Mayer P, Bauer A (2015) An empirical analysis of the utilization of multiple programming languages in open source projects. In: Lv J, Zhang HJ, Babar MA (eds) Proceedings of EASE 2015, Nanjing, China, April 27-29, 2015, ACM, pp 4:1–4:10. doi:10.1145/2745802.2745805
Mayer P, Schroeder A (2014) Automated multi-language artifact binding and rename refactoring between java and dsls used by java frameworks. In: Jones R (ed) ECOOP 2014, Uppsala, Sweden, July 28–August 1, 2014, Springer, Lecture Notes in Computer Science, vol 8586, pp 437–462. doi:10.1007/978-3-662-44202-9_18
Mayer P, Kirsch M, Le MA (2015) On multi-language software development, cross-language links and accompanying tools: A survey of professional software developers. Tech. Rep. TR-2015-09-00, Institute for Informatics, Ludwig-Maximilians-Universität München, Oettingenstr 67, 80538 München, Germany. http://www.pst.ifi.lmu.de/mayer/papers/TR-2015-09-00.pdf. Accessed 15 Sep 2016
Microsoft (2016) Windows Presentation Foundation. https://msdn.microsoft.com/en-us/library/ms754130. Accessed 15 Sep 2016
Nickerson RC, Varshney U, Muntermann J (2013) A method for taxonomy development and its application in information systems. EJIS 22(3):336–359. doi:10.1057/ejis.2012.26
Odersky M (2014) The Scala language specification—version 2.9. http://www.scala-lang.org/docu/files/ScalaReference.pdf. Accessed 7 Dec 2016
Oracle (2016) The Java Properties Format. https://docs.oracle.com/javase/tutorial/essential/environment/properties.html. Accessed 15 Sep 2016
Pfeiffer R, Wasowski A (2015) The design space of multi-language development environments. Softw Syst Model 14(1):383–411. doi:10.1007/s10270-013-0376-y
Potencier F, Hason M, Blanc AL, Schultze T (2015) The twig template engine for php. http://twig.sensiolabs.org/. Accessed 15 Sep 2016
Rappin N (2008) Professional ruby on rails. Wrox, Birmingham
Ray B, Posnett D, Filkov V, Devanbu PT (2014) A large scale study of programming languages and code quality in github. In: Cheung S, Orso A, Storey MD (eds) Proceedings of the FSE-22, Hong Kong, China, November 16 - 22, 2014, ACM, pp 155–165. doi:10.1145/2635868.2635922
Red Hat (2016) Hibernate Object-Relational Mapper. http://hibernate.org/orm/. Accessed 15 Sep 2016
Schafer S (2005) Web standards programmer’s reference: HTML, CSS, JavaScript, Perl, Python, and PHP. Wrox, Birmingham
Slee M, Reiss D, Agarwal A, Kwiatkowski M, Wang J, Piro C, Maurer B, Clark K, Luciani J, Duxbury B, Fernandez E, Lipcon T, McGeachie A, Molinaro A, Meier R, Farrell J, Geyer J, Yeksigian C, Abernethy R, Grochowski K (2015) The apache thrift framework. https://thrift.apache.org/. Accessed 15 Sep 2016
SWIG Developers (2016) Simplified Wrapper and Interface Generator. http://www.swig.org/. Accessed 15 Sep 2016
The Apache Project (2016) Apache Wicket. http://wicket.apache.org/. Accessed 15 Sep 2016
Tomassetti F, Torchiano M (2014) An empirical assessment of polyglot-ism in github. In: Shepperd MJ, Hall T, Myrtveit I (eds) 18th International Conference on Evaluation and Assessment in Software Engineering, EASE ’14, London, England, United Kingdom, May 13-14, 2014, ACM, pp 17:1–17:4. doi:10.1145/2601248.2601269
Tomassetti F, Torchiano M, Vetro A (2013) Classification of language interactions. In: Empirical Software Engineering and Measurement, 2013 ACM/IEEE International Symposium on, pp 287–290
Völter M, Visser E (2010) Language extension and composition with language workbenches. In: Proceedings of OOPSLA 2010, ACM, New York, NY, USA, OOPSLA ’10, pp 301–304
Yellin F, Lindholm T (1996) The java virtual machine specification. Reading, Massachusetts
Zdun U (2004) Using split objects for maintenance and reengineering tasks. In: 8th European Conference on Software Maintenance and Reengineering (CSMR 2004), 24-26 March 2004, Tampere, Finland, Proceedings, IEEE Computer Society, pp 105–114. doi:10.1109/CSMR.2004.1281411
Zdun U (2006) Patterns of component and language integration. In: Manolescu D, Voelter M, Noble J (eds) Pattern languages of program design 5. Addison-Wesley Professional, Boston, pp 357–397
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Mayer, P. A taxonomy of cross-language linking mechanisms in open source frameworks. Computing 99, 701–724 (2017). https://doi.org/10.1007/s00607-016-0528-3
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s00607-016-0528-3
Keywords
- Multi-language development
- Cross-language linking
- Taxonomy
- Polyglot programming
- Software maintenance
- Classification
- DSLs
- GPLs
- Open-source software
- Frameworks