The indolent lambdification of Java

As Java 8 introduced functional interfaces and lambda expressions to the Java programming language, the JDK API was changed to introduce support for lambda expressions, thus allowing consumers to define lambda functions when using Java’s collections. While the JDK API allows for a functional paradigm, for API consumers to be able to completely embrace Java’s new functional features, third-party APIs must also support lambda expressions. To understand the current state of the Java ecosystem, we investigate (i) the extent to which third-party Java APIs have changed their interfaces, (ii) why or why not they introduce functional interface support and (iii) in the case the API has changed its interface how it does so. We also investigate the consumers’ perspective, particularly their ease in using lambda expressions in Java with APIs. We perform our investigation by manually analyzing the top 50 popular Java APIs, conducting in-person and email interviews with 23 API producers, and surveying 110 developers. We find that only a minority of the top 50 APIs support functional interfaces, the rest does not support them, predominantly in the interest of backward compatibility. Java 7 support is still greatly desirable due to enterprise projects not migrating to newer versions of Java. This suggests that the Java ecosystem is stagnant and that the introduction of new language features will not be enough to save it from the advent of new languages such as Kotlin (JVM based) and Rust (non-JVM based).

[1]  R. W. Brown,et al.  Verbal reinforcement and interviewer bias. , 1956, Journal of abnormal psychology.

[2]  Emerson R. Murphy-Hill,et al.  Java generics adoption: how new features are introduced, championed, or ignored , 2011, MSR '11.

[3]  Keith H. Bennett,et al.  Software maintenance and evolution: a roadmap , 2000, ICSE '00.

[4]  A. Furnham Response bias, social desirability and dissimulation , 1986 .

[5]  Roy T. Fielding,et al.  Shared leadership in the Apache project , 1999, CACM.

[6]  David Lo,et al.  Empirical Study of Usage and Performance of Java Collections , 2017, ICPE.

[7]  James D. Herbsleb,et al.  How to break an API: cost negotiation and community values in three software ecosystems , 2016, SIGSOFT FSE.

[8]  Rory V. O'Connor,et al.  Using grounded theory to understand software process improvement: A study of Irish software product companies , 2007, Inf. Softw. Technol..

[9]  Robert Heumüller,et al.  Programmers do not favor lambda expressions for concurrent object-oriented code , 2018, Empirical Software Engineering.

[10]  Alberto Bacchelli,et al.  fine-GRAPE: fine-grained APi usage extractor – an approach and dataset to investigate API usage , 2016, Empirical Software Engineering.

[11]  Stefan Hanenberg,et al.  An Empirical Study on the Impact of C++ Lambdas and Programmer Experience , 2016, 2016 IEEE/ACM 38th International Conference on Software Engineering (ICSE).

[12]  S. Thorne,et al.  Interpretive description: a noncategorical qualitative alternative for developing nursing knowledge. , 1997, Research in nursing & health.

[13]  Edna Dias Canedo,et al.  Does the Introduction of Lambda Expressions Improve the Comprehension of Java Programs? , 2019, SBES.

[14]  F. Bass The Relationship between Diffusion Rates, Experience Curves, and Demand Elasticities for Consumer Durable Technological Innovations , 1980 .

[15]  Stefan Hanenberg,et al.  Empirical, Human-Centered Evaluation of Programming and Programming Language Constructs: Controlled Experiments , 2015, GTTSE.

[16]  Romain Robbes,et al.  How (and why) developers use the dynamic features of programming languages: the case of smalltalk , 2012, Empirical Software Engineering.

[17]  Prachi Srivastava,et al.  A Practical Iterative Framework for Qualitative Data Analysis , 2009 .

[18]  A. Onwuegbuzie,et al.  Mixed Methods Research: A Research Paradigm Whose Time Has Come , 2004 .

[19]  Brad A. Myers,et al.  Improving API usability , 2016, Commun. ACM.

[20]  Gabriele Bavota,et al.  API change and fault proneness: a threat to the success of Android apps , 2013, ESEC/FSE 2013.

[21]  Keith H. Bennett,et al.  Legacy Systems: Coping with Success , 1995, IEEE Softw..

[22]  Leroy Bailey,et al.  Measures of Interviewer Bias and Variance , 1977 .

[23]  Hidehiko Masuhara,et al.  Proactive Empirical Assessment of New Language Feature Adoption via Automated Refactoring: The Case of Java 8 Default Methods , 2018, Art Sci. Eng. Program..

[24]  Leo A. Meyerovich,et al.  Socio-PLT: principles for programming language adoption , 2012, Onward! 2012.

[25]  Dong Qiu,et al.  Understanding the syntactic rule usage in java , 2017, J. Syst. Softw..

[26]  Lokman I. Meho E-mail interviewing in qualitative research: A methodological discussion , 2006, J. Assoc. Inf. Sci. Technol..

[27]  Hridesh Rajan,et al.  Mining billions of AST nodes to study actual and potential usage of Java language features , 2014, ICSE.

[28]  Thomas D. LaToza,et al.  Programmers Are Users Too: Human-Centered Methods for Improving Programming Tools , 2016, Computer.

[29]  Aftab Iqbal,et al.  Understanding Contributor to Developer Turnover Patterns in OSS Projects: A Case Study of Apache Projects , 2014 .

[30]  Danny Dig,et al.  Understanding the use of lambda expressions in Java , 2017, Proc. ACM Program. Lang..