skip to main content
10.1145/3567512.3567531acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedingsconference-collections
research-article

BatakJava: An Object-Oriented Programming Language with Versions

Published: 01 December 2022 Publication History

Abstract

Programming with versions is a recent proposal that supports multiple versions of software components in a program. Though it would provide greater freedom for the programmer, the concept is only realized as a simple core calculus, called λVL, where a value consists of λ-terms with multiple versions. We explore a design space of programming with versions in the presence of data structures and module systems, and propose BatakJava, an object-oriented programming language in which multiple versions of a class can be used in a program. This paper presents BatakJava’s language design, its core semantics with subject reduction, an implementation as a source-to-Java translator, and a case study to understand how we can exploit multiple versions in BatakJava for developing an application program with an evolving library.

References

[1]
Sven Apel, Christian Kästner, and Christian Lengauer. 2008. Feature Featherweight Java: A calculus for feature-oriented programming and stepwise refinement. In Proceedings of the 7th international conference on Generative programming and component engineering. 101–112.
[2]
Malte Appeltauer, Robert Hirschfeld, Michael Haupt, and Hidehiko Masuhara. 2011. ContextJ: Context-oriented programming with Java. Information and Media Technologies, 6, 2 (2011), 399–419.
[3]
Christopher Bogart, Christian Kästner, James Herbsleb, and Ferdian Thung. 2016. How to break an API: cost negotiation and community values in three software ecosystems. In Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. 109–120.
[4]
Chris Bogart, Christian Kästner, James Herbsleb, and Ferdian Thung. 2021. When and how to make breaking changes. ACM Trans. Softw. Eng. Methodol, 1, 1 (2021), 10–1145.
[5]
Aline Brito, Laerte Xavier, Andre Hora, and Marco Tulio Valente. 2018. Why and how Java developers break APIs. In 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER). 255–265.
[6]
Luís Carvalho and João Costa Seco. 2019. Software Evolution with a Typeful Version Control System. In International Conference on Software Engineering and Formal Methods. 145–161.
[7]
Luís Carvalho and João Costa Seco. 2021. Deep Semantic Versioning for Evolution and Variability. In 23rd International Symposium on Principles and Practice of Declarative Programming. 1–13.
[8]
Sheng Chen, Martin Erwig, and Eric Walkingshaw. 2016. A calculus for variational programming. In 30th European Conference on Object-Oriented Programming (ECOOP 2016).
[9]
Erik Ernst. 2001. Family polymorphism. In European Conference on Object-Oriented Programming. 303–326.
[10]
Martin Erwig and Eric Walkingshaw. 2011. The choice calculus: A representation for software variation. ACM Transactions on Software Engineering and Methodology (TOSEM), 21, 1 (2011), 1–27.
[11]
Darius Foo, Hendy Chua, Jason Yeo, Ming Yi Ang, and Asankhaya Sharma. 2018. Efficient static checking of library updates. In Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 791–796.
[12]
James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. 2000. The Java language specification. Addison-Wesley Professional.
[13]
Robert Hirschfeld, Pascal Costanza, and Oscar Nierstrasz. 2008. Context-oriented programming. Journal of Object Technology, 7, 3 (2008), 125–151. issn:16601769 https://doi.org/10.5381/jot.2008.7.3.a4
[14]
Atsushi Igarashi, Benjamin C Pierce, and Philip Wadler. 2001. Featherweight Java: a minimal core calculus for Java and GJ. TOPLAS, 23, 3 (2001), 396–450.
[15]
Atsushi Igarashi, Chieri Saito, and Mirko Viroli. 2005. Lightweight family polymorphism. In Asian Symposium on Programming Languages and Systems. 161–177.
[16]
Ameya Ketkar, Nikolaos Tsantalis, and Danny Dig. 2020. Understanding type changes in java. In Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 629–641.
[17]
Raula Gaikovina Kula, Daniel M. German, Ali Ouni, Takashi Ishio, and Katsuro Inoue. 2018. Do developers update their library dependencies? Empir Software Eng, 23, 1 (2018), Feb., 384–417. issn:1573-7616 https://doi.org/10.1007/s10664-017-9521-5
[18]
Manny M Lehman. 1996. Laws of software evolution revisited. In European Workshop on Software Process Technology. 108–124.
[19]
Christian Macho, Shane McIntosh, and Martin Pinzger. 2018. Automatically repairing dependency-related build breakage. In 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER). 106–117.
[20]
Robin Milner. 1978. A theory of type polymorphism in programming. Journal of computer and system sciences, 17, 3 (1978), 348–375.
[21]
Samim Mirhosseini and Chris Parnin. 2017. Can automated pull requests encourage software developers to upgrade out-of-date dependencies? In 2017 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE). 84–94.
[22]
Shaikh Mostafa, Rodney Rodriguez, and Xiaoyin Wang. 2017. Experience paper: a study on behavioral backward incompatibilities of Java software libraries. In Proceedings of the 26th ACM SIGSOFT International Symposium on Software Testing and Analysis. 215–225.
[23]
Suchita Mukherjee, Abigail Almanza, and Cindy Rubio-González. 2021. Fixing dependency errors for Python build reproducibility. In Proceedings of the 30th ACM SIGSOFT International Symposium on Software Testing and Analysis. 439–451.
[24]
Jesper Öqvist. 2018. ExtendJ: extensible Java compiler. In Conference Companion of the 2nd International Conference on Art, Science, and Engineering of Programming. 234–235.
[25]
David Lorge Parnas. 1976. On the design and development of program families. IEEE Transactions on software engineering, 1–9.
[26]
Christian Prehofer. 1997. Feature-oriented programming: A fresh look at objects. In European Conference on Object-Oriented Programming. 419–443.
[27]
Tom Preston-Werner. 2013. Semantic Versioning. https://semver.org/
[28]
Charles Prud’homme, Jean-Guillaume Fages, and Xavier Lorca. 2019. Choco Solver. Website, March.
[29]
Ina Schaefer, Lorenzo Bettini, Viviana Bono, Ferruccio Damiani, and Nico Tanzarella. 2010. Delta-oriented programming of software product lines. In International Conference on Software Product Lines. 77–91.
[30]
Yudai Tanabe, Luthfan Anshar Lubis, Tomoyuki Aotani, and Hidehiko Masuhara. 2021. A Functional Programming Language with Versions. arXiv preprint arXiv:2107.07301.
[31]
Thomas Thüm, Sven Apel, Christian Kästner, Ina Schaefer, and Gunter Saake. 2014. A classification and survey of analysis strategies for software product lines. ACM Computing Surveys (CSUR), 47, 1 (2014), 1–45.

Cited By

View all

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
SLE 2022: Proceedings of the 15th ACM SIGPLAN International Conference on Software Language Engineering
November 2022
278 pages
ISBN:9781450399197
DOI:10.1145/3567512
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 01 December 2022

Permissions

Request permissions for this article.

Check for updates

Badges

Author Tags

  1. Java
  2. backward compatibility
  3. dependency problem

Qualifiers

  • Research-article

Funding Sources

  • JSPS

Conference

SLE '22
Sponsor:

Upcoming Conference

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • 0
    Total Citations
  • 74
    Total Downloads
  • Downloads (Last 12 months)7
  • Downloads (Last 6 weeks)0
Reflects downloads up to 07 Mar 2025

Other Metrics

Citations

Cited By

View all

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media