{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,3,28]],"date-time":"2025-03-28T04:40:59Z","timestamp":1743136859471,"version":"3.40.3"},"publisher-location":"Singapore","reference-count":33,"publisher":"Springer Nature Singapore","isbn-type":[{"type":"print","value":"9789819983100"},{"type":"electronic","value":"9789819983117"}],"license":[{"start":{"date-parts":[[2023,1,1]],"date-time":"2023-01-01T00:00:00Z","timestamp":1672531200000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2023,11,21]],"date-time":"2023-11-21T00:00:00Z","timestamp":1700524800000},"content-version":"vor","delay-in-days":324,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2023]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p><jats:italic>Programming with versions<\/jats:italic> is a paradigm that allows a program to use multiple versions of a module so that the programmer can selectively use functions from both older and newer versions of a single module. Previous work formalized <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\lambda _{\\textrm{VL}}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                  <mml:msub>\n                    <mml:mi>\u03bb<\/mml:mi>\n                    <mml:mtext>VL<\/mml:mtext>\n                  <\/mml:msub>\n                <\/mml:math><\/jats:alternatives><\/jats:inline-formula>, a core calculus for programming with versions, but it has not been integrated into practical programming languages. In this paper, we propose VL, a Haskell-subset surface language for <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\lambda _{\\textrm{VL}}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                  <mml:msub>\n                    <mml:mi>\u03bb<\/mml:mi>\n                    <mml:mtext>VL<\/mml:mtext>\n                  <\/mml:msub>\n                <\/mml:math><\/jats:alternatives><\/jats:inline-formula> along with its compilation method. We formally describe the core part of the VL compiler, which translates from the surface language to the core language by leveraging Girard\u2019s translation, soundly infers the consistent version of expressions along with their types, and generates a multi-version interface by bundling specific-version interfaces. We conduct a case study to show how VL supports practical software evolution scenarios and discuss the method\u2019s scalability.<\/jats:p>","DOI":"10.1007\/978-981-99-8311-7_1","type":"book-chapter","created":{"date-parts":[[2023,11,22]],"date-time":"2023-11-22T07:02:17Z","timestamp":1700636537000},"page":"3-23","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":0,"title":["Compilation Semantics for\u00a0a\u00a0Programming Language with\u00a0Versions"],"prefix":"10.1007","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-7990-0989","authenticated-orcid":false,"given":"Yudai","family":"Tanabe","sequence":"first","affiliation":[]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1498-7788","authenticated-orcid":false,"given":"Luthfan Anshar","family":"Lubis","sequence":"additional","affiliation":[]},{"ORCID":"https:\/\/orcid.org\/0000-0003-4538-0230","authenticated-orcid":false,"given":"Tomoyuki","family":"Aotani","sequence":"additional","affiliation":[]},{"ORCID":"https:\/\/orcid.org\/0000-0002-8837-5303","authenticated-orcid":false,"given":"Hidehiko","family":"Masuhara","sequence":"additional","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2023,11,21]]},"reference":[{"key":"1_CR1","unstructured":"Barrett, C., Stump, A., Tinelli, C., et al.: The SMT-LIB standard: version 2.0. In: Proceedings of the 8th International Workshop on Satisfiability Modulo Theories (Edinburgh, UK), vol. 13, p. 14 (2010)"},{"key":"1_CR2","doi-asserted-by":"publisher","unstructured":"Bavota, G., Canfora, G., Di\u00a0Penta, M., Oliveto, R., Panichella, S.: How the apache community upgrades dependencies: an evolutionary study. Empir. Softw. Eng. 20(5), 1275\u20131317 (2015). https:\/\/doi.org\/10.1007\/s10664-014-9325-9","DOI":"10.1007\/s10664-014-9325-9"},{"key":"1_CR3","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"351","DOI":"10.1007\/978-3-642-54833-8_19","volume-title":"Programming Languages and Systems","author":"A Brunel","year":"2014","unstructured":"Brunel, A., Gaboardi, M., Mazza, D., Zdancewic, S.: A core quantitative coeffect calculus. In: Shao, Z. (ed.) ESOP 2014. LNCS, vol. 8410, pp. 351\u2013370. Springer, Heidelberg (2014). https:\/\/doi.org\/10.1007\/978-3-642-54833-8_19"},{"key":"1_CR4","doi-asserted-by":"publisher","unstructured":"Chow, Notkin: Semi-automatic update of applications in response to library changes. In: 1996 Proceedings of International Conference on Software Maintenance, pp. 359\u2013368. IEEE, New York, USA (1996). https:\/\/doi.org\/10.1109\/ICSM.1996.565039","DOI":"10.1109\/ICSM.1996.565039"},{"key":"1_CR5","doi-asserted-by":"publisher","unstructured":"Cossette, B., Walker, R., Cottrell, R.: Using structural generalization to discover replacement functionality for API evolution (2014). https:\/\/doi.org\/10.11575\/PRISM\/10182, https:\/\/prism.ucalgary.ca\/handle\/1880\/49996","DOI":"10.11575\/PRISM\/10182"},{"key":"1_CR6","doi-asserted-by":"publisher","unstructured":"Cossette, B.E., Walker, R.J.: Seeking the ground truth: a retroactive study on the evolution and migration of software libraries. In: Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering. FSE 2012, Association for Computing Machinery, New York, NY, USA (2012). https:\/\/doi.org\/10.1145\/2393596.2393661","DOI":"10.1145\/2393596.2393661"},{"key":"1_CR7","doi-asserted-by":"publisher","unstructured":"Dig, D., Johnson, R.: How do APIs evolve? A story of refactoring. J. Softw. Maint. Evol. Res. Pract. 18(2), 83\u2013107 (2006). https:\/\/doi.org\/10.1002\/smr.328, https:\/\/onlinelibrary.wiley.com\/doi\/abs\/10.1002\/smr.328","DOI":"10.1002\/smr.328"},{"key":"1_CR8","doi-asserted-by":"publisher","unstructured":"Dunfield, J., Krishnaswami, N.R.: Complete and easy bidirectional typechecking for higher-rank polymorphism. SIGPLAN Not. 48(9), 429\u2013442 (2013). https:\/\/doi.org\/10.1145\/2544174.2500582","DOI":"10.1145\/2544174.2500582"},{"key":"1_CR9","doi-asserted-by":"publisher","unstructured":"Dunfield, J., Krishnaswami, N.R.: Sound and complete bidirectional typechecking for higher-rank polymorphism with existentials and indexed types. In: Proceedings of ACM Programming Language, vol. 3(POPL) (2019). https:\/\/doi.org\/10.1145\/3290322","DOI":"10.1145\/3290322"},{"key":"1_CR10","unstructured":"Durham Goode: Facebook Engineering: Scaling Mercurial at Facebook (2014). https:\/\/code.fb.com\/core-data\/scaling-mercurial-at-facebook\/"},{"key":"1_CR11","doi-asserted-by":"publisher","unstructured":"Girard, J.Y.: Linear logic. Theor. Comput. Sci. 50(1), 1\u2013102 (1987). https:\/\/doi.org\/10.1016\/0304-3975(87)90045-4","DOI":"10.1016\/0304-3975(87)90045-4"},{"key":"1_CR12","doi-asserted-by":"publisher","unstructured":"Henkel, J., Diwan, A.: Catchup! Capturing and replaying refactorings to support API evolution. In: Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005, pp. 274\u2013283. IEEE, New York, USA (2005). https:\/\/doi.org\/10.1109\/ICSE.2005.1553570","DOI":"10.1109\/ICSE.2005.1553570"},{"key":"1_CR13","doi-asserted-by":"publisher","unstructured":"Hughes, J., Vollmer, M., Orchard, D.: Deriving distributive laws for graded linear types. In: Dal Lago, U., de Paiva, V. (eds.) Proceedings Second Joint International Workshop on Linearity & Trends in Linear Logic and Applications, Online, 29\u201330 June 2020. Electronic Proceedings in Theoretical Computer Science, vol. 353, pp. 109\u2013131. Open Publishing Association (2021). https:\/\/doi.org\/10.4204\/EPTCS.353.6","DOI":"10.4204\/EPTCS.353.6"},{"key":"1_CR14","doi-asserted-by":"publisher","unstructured":"Lam, P., Dietrich, J., Pearce, D.J.: Putting the Semantics into Semantic Versioning, pp. 157\u2013179. Association for Computing Machinery, New York, NY, USA (2020). https:\/\/doi.org\/10.1145\/3426428.3426922","DOI":"10.1145\/3426428.3426922"},{"key":"1_CR15","doi-asserted-by":"publisher","unstructured":"Lubis, L.A., Tanabe, Y., Aotani, T., Masuhara, H.: Batakjava: an object-oriented programming language with versions. In: Proceedings of the 15th ACM SIGPLAN International Conference on Software Language Engineering, pp. 222\u2013234. SLE 2022, Association for Computing Machinery, New York, NY, USA (2022). https:\/\/doi.org\/10.1145\/3567512.3567531","DOI":"10.1145\/3567512.3567531"},{"key":"1_CR16","doi-asserted-by":"publisher","unstructured":"McDonnell, T., Ray, B., Kim, M.: An empirical study of API stability and adoption in the Android ecosystem. In: 2013 IEEE International Conference on Software Maintenance, ICSM, pp. 70\u201379. IEEE, New York, USA (2013). https:\/\/doi.org\/10.1109\/ICSM.2013.18","DOI":"10.1109\/ICSM.2013.18"},{"key":"1_CR17","first-page":"2","volume":"239","author":"D Merkel","year":"2014","unstructured":"Merkel, D.: Docker: lightweight Linux containers for consistent development and deployment. Linux J. 239, 2 (2014)","journal-title":"Linux J."},{"key":"1_CR18","doi-asserted-by":"publisher","first-page":"337","DOI":"10.1007\/978-3-540-78800-3_24","volume-title":"Tools and Algorithms for the Construction and Analysis of Systems","author":"L de Moura","year":"2008","unstructured":"de Moura, L., Bj\u00f8rner, N.: Z3: an efficient SMT solver. In: Ramakrishnan, C.R., Rehof, J. (eds.) Tools and Algorithms for the Construction and Analysis of Systems, pp. 337\u2013340. Springer, Heidelberg (2008)"},{"key":"1_CR19","doi-asserted-by":"publisher","unstructured":"Ohori, A.: A polymorphic record calculus and its compilation. ACM Trans. Program. Lang. Syst. 17(6), 844\u2013895 (1995). https:\/\/doi.org\/10.1145\/218570.218572","DOI":"10.1145\/218570.218572"},{"key":"1_CR20","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1145\/3341714","volume":"3(ICFP)","author":"D Orchard","year":"2019","unstructured":"Orchard, D., Liepelt, V.B., Eades, H., III.: Quantitative program reasoning with graded modal types. Proc. ACM Program. Lang. 3(ICFP), 1\u201330 (2019). https:\/\/doi.org\/10.1145\/3341714","journal-title":"Proc. ACM Program. Lang."},{"issue":"7","key":"1_CR21","doi-asserted-by":"publisher","first-page":"78","DOI":"10.1145\/2854146","volume":"59","author":"R Potvin","year":"2016","unstructured":"Potvin, R., Levenberg, J.: Why google stores billions of lines of code in a single repository. Commun. ACM 59(7), 78\u201387 (2016). https:\/\/doi.org\/10.1145\/2854146","journal-title":"Commun. ACM"},{"key":"1_CR22","unstructured":"Preston-Werner, T.: Semantic versioning 2.0.0 (2013). http:\/\/semver.org"},{"key":"1_CR23","doi-asserted-by":"publisher","unstructured":"Raemaekers, S., van Deursen, A., Visser, J.: Semantic versioning and impact of breaking changes in the maven repository. J. Syst. Softw. 129, 140\u2013158 (2017). https:\/\/doi.org\/10.1016\/j.jss.2016.04.008, http:\/\/www.sciencedirect.com\/science\/article\/pii\/S0164121216300243","DOI":"10.1016\/j.jss.2016.04.008"},{"key":"1_CR24","doi-asserted-by":"publisher","unstructured":"Schaefer, I., Bettini, L., Damiani, F.: Compositional type-checking for delta-oriented programming. In: Proceedings of the Tenth International Conference on Aspect-Oriented Software Development, pp. 43\u201356. AOSD 2011, Association for Computing Machinery, New York, NY, USA (2011). https:\/\/doi.org\/10.1145\/1960275.1960283, https:\/\/doi.org\/10.1145\/1960275.1960283","DOI":"10.1145\/1960275.1960283 10.1145\/1960275.1960283"},{"key":"1_CR25","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"77","DOI":"10.1007\/978-3-642-15579-6_6","volume-title":"Software Product Lines: Going Beyond","author":"I Schaefer","year":"2010","unstructured":"Schaefer, I., Bettini, L., Bono, V., Damiani, F., Tanzarella, N.: Delta-oriented programming of software product lines. In: Bosch, J., Lee, J. (eds.) SPLC 2010. LNCS, vol. 6287, pp. 77\u201391. Springer, Heidelberg (2010). https:\/\/doi.org\/10.1007\/978-3-642-15579-6_6"},{"key":"1_CR26","doi-asserted-by":"publisher","unstructured":"Schaefer, I., Damiani, F.: Pure delta-oriented programming. In: Proceedings of the 2nd International Workshop on Feature-Oriented Software Development, pp. 49\u201356. FOSD 2010, Association for Computing Machinery, New York, NY, USA (2010). https:\/\/doi.org\/10.1145\/1868688.1868696","DOI":"10.1145\/1868688.1868696"},{"key":"1_CR27","doi-asserted-by":"publisher","unstructured":"Sch\u00e4fer, T., Jonas, J., Mezini, M.: Mining framework usage changes from instantiation code. In: Proceedings of the 30th International Conference on Software Engineering, pp. 471\u2013480. ICSE 2008, Association for Computing Machinery, New York, NY, USA (2008). https:\/\/doi.org\/10.1145\/1368088.1368153","DOI":"10.1145\/1368088.1368153"},{"key":"1_CR28","doi-asserted-by":"publisher","unstructured":"Tanabe, Y., Aotani, T., Masuhara, H.: A context-oriented programming approach to dependency hell. In: Proceedings of the 10th International Workshop on Context-Oriented Programming: Advanced Modularity for Run-time Composition, pp. 8\u201314. COP 2018, ACM, New York, NY, USA (2018). https:\/\/doi.org\/10.1145\/3242921.3242923","DOI":"10.1145\/3242921.3242923"},{"key":"1_CR29","doi-asserted-by":"publisher","unstructured":"Tanabe, Y., Lubis, L.A., Aotani, T., Masuhara, H.: A functional programming language with versions. Art, Sci. Eng. Programm. 6(1), 5:1\u20135:30 (2021). https:\/\/doi.org\/10.22152\/programming-journal.org\/2022\/6\/5, https:\/\/doi.org\/10.22152%2Fprogramming-journal.org%2F2022%2F6%2F5","DOI":"10.22152\/programming-journal.org\/2022\/6\/5"},{"key":"1_CR30","doi-asserted-by":"publisher","unstructured":"Tanabe, Y., Lubis, L.A., Aotani, T., Masuhara, H.: Compilation semantics for a programming language with versions (2023). https:\/\/doi.org\/10.48550\/arXiv.2310.00298","DOI":"10.48550\/arXiv.2310.00298"},{"key":"1_CR31","doi-asserted-by":"publisher","unstructured":"Tanabe, Y., Lubis, L.A., Aotani, T., Masuhara, H.: A step toward programming with versions in real-world functional languages. In: Proceedings of the 14th ACM International Workshop on Context-Oriented Programming and Advanced Modularity, pp. 44\u201351. COP 2022, Association for Computing Machinery, New York, NY, USA (2022). https:\/\/doi.org\/10.1145\/3570353.3570359","DOI":"10.1145\/3570353.3570359"},{"key":"1_CR32","unstructured":"Tolnay, D.: The semver trick (2017). https:\/\/github.com\/dtolnay\/semver-trick"},{"key":"1_CR33","doi-asserted-by":"publisher","unstructured":"Wu, W.: Modeling framework API evolution as a multi-objective optimization problem. In: 2011 IEEE 19th International Conference on Program Comprehension, pp. 262\u2013265. IEEE, New York, USA (2011). https:\/\/doi.org\/10.1109\/ICPC.2011.43","DOI":"10.1109\/ICPC.2011.43"}],"container-title":["Lecture Notes in Computer Science","Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-981-99-8311-7_1","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,11,22]],"date-time":"2023-11-22T07:02:26Z","timestamp":1700636546000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-981-99-8311-7_1"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2023]]},"ISBN":["9789819983100","9789819983117"],"references-count":33,"URL":"https:\/\/doi.org\/10.1007\/978-981-99-8311-7_1","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"type":"print","value":"0302-9743"},{"type":"electronic","value":"1611-3349"}],"subject":[],"published":{"date-parts":[[2023]]},"assertion":[{"value":"21 November 2023","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"APLAS","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Asian Symposium on Programming Languages and Systems","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Taipei","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Taiwan","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2023","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"26 November 2023","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"29 November 2023","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"21","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"aplas2023","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"https:\/\/conf.researchr.org\/home\/aplas-2023","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Double-blind","order":1,"name":"type","label":"Type","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"HotCRP","order":2,"name":"conference_management_system","label":"Conference Management System","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"32","order":3,"name":"number_of_submissions_sent_for_review","label":"Number of Submissions Sent for Review","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"15","order":4,"name":"number_of_full_papers_accepted","label":"Number of Full Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"0","order":5,"name":"number_of_short_papers_accepted","label":"Number of Short Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"47% - The value is computed by the equation \"Number of Full Papers Accepted \/ Number of Submissions Sent for Review * 100\" and then rounded to a whole number.","order":6,"name":"acceptance_rate_of_full_papers","label":"Acceptance Rate of Full Papers","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"3","order":7,"name":"average_number_of_reviews_per_paper","label":"Average Number of Reviews per Paper","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"4","order":8,"name":"average_number_of_papers_per_reviewer","label":"Average Number of Papers per Reviewer","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"Yes","order":9,"name":"external_reviewers_involved","label":"External Reviewers Involved","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}}]}}