{"file":[{"file_id":"10154","file_name":"monnom-oopsla21.pdf","creator":"fmuehlbo","date_updated":"2021-10-19T12:52:23Z","success":1,"content_type":"application/pdf","date_created":"2021-10-19T12:52:23Z","checksum":"71011efd2da771cafdec7f0d9693f8c1","access_level":"open_access","file_size":770269,"relation":"main_file"}],"publisher":"Association for Computing Machinery","day":"15","department":[{"_id":"ToHe"}],"user_id":"8b945eb4-e2f2-11eb-945a-df72226e66a9","article_processing_charge":"No","file_date_updated":"2021-10-19T12:52:23Z","volume":5,"abstract":[{"lang":"eng","text":"Gradual typing is a principled means for mixing typed and untyped code. But typed and untyped code often exhibit different programming patterns. There is already substantial research investigating gradually giving types to code exhibiting typical untyped patterns, and some research investigating gradually removing types from code exhibiting typical typed patterns. This paper investigates how to extend these established gradual-typing concepts to give formal guarantees not only about how to change types as code evolves but also about how to change such programming patterns as well.\r\n\r\nIn particular, we explore mixing untyped \"structural\" code with typed \"nominal\" code in an object-oriented language. But whereas previous work only allowed \"nominal\" objects to be treated as \"structural\" objects, we also allow \"structural\" objects to dynamically acquire certain nominal types, namely interfaces. We present a calculus that supports such \"cross-paradigm\" code migration and interoperation in a manner satisfying both the static and dynamic gradual guarantees, and demonstrate that the calculus can be implemented efficiently."}],"date_created":"2021-10-19T12:48:44Z","publication_status":"published","language":[{"iso":"eng"}],"publication":"Proceedings of the ACM on Programming Languages","oa":1,"_id":"10153","intvolume":" 5","tmp":{"image":"/image/cc_by_nd.png","name":"Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)","short":"CC BY-ND (4.0)","legal_code_url":"https://creativecommons.org/licenses/by-nd/4.0/legalcode"},"citation":{"apa":"Mühlböck, F., & Tate, R. (2021). Transitioning from structural to nominal code with efficient gradual typing. Proceedings of the ACM on Programming Languages. Chicago, IL, United States: Association for Computing Machinery. https://doi.org/10.1145/3485504","ista":"Mühlböck F, Tate R. 2021. Transitioning from structural to nominal code with efficient gradual typing. Proceedings of the ACM on Programming Languages. 5, 127.","chicago":"Mühlböck, Fabian, and Ross Tate. “Transitioning from Structural to Nominal Code with Efficient Gradual Typing.” Proceedings of the ACM on Programming Languages. Association for Computing Machinery, 2021. https://doi.org/10.1145/3485504.","ama":"Mühlböck F, Tate R. Transitioning from structural to nominal code with efficient gradual typing. Proceedings of the ACM on Programming Languages. 2021;5. doi:10.1145/3485504","ieee":"F. Mühlböck and R. Tate, “Transitioning from structural to nominal code with efficient gradual typing,” Proceedings of the ACM on Programming Languages, vol. 5. Association for Computing Machinery, 2021.","short":"F. Mühlböck, R. Tate, Proceedings of the ACM on Programming Languages 5 (2021).","mla":"Mühlböck, Fabian, and Ross Tate. “Transitioning from Structural to Nominal Code with Efficient Gradual Typing.” Proceedings of the ACM on Programming Languages, vol. 5, 127, Association for Computing Machinery, 2021, doi:10.1145/3485504."},"date_published":"2021-10-15T00:00:00Z","title":"Transitioning from structural to nominal code with efficient gradual typing","quality_controlled":"1","keyword":["gradual typing","gradual guarantee","nominal","structural","call tags"],"project":[{"call_identifier":"FWF","name":"The Wittgenstein Prize","_id":"25F42A32-B435-11E9-9278-68D0E5697425","grant_number":"Z211"}],"publication_identifier":{"eissn":["2475-1421"]},"month":"10","year":"2021","oa_version":"Published Version","date_updated":"2021-11-12T11:30:07Z","status":"public","license":"https://creativecommons.org/licenses/by-nd/4.0/","author":[{"last_name":"Mühlböck","first_name":"Fabian","orcid":"0000-0003-1548-0177","id":"6395C5F6-89DF-11E9-9C97-6BDFE5697425","full_name":"Mühlböck, Fabian"},{"full_name":"Tate, Ross","first_name":"Ross","last_name":"Tate"}],"conference":{"start_date":"2021-10-17","location":"Chicago, IL, United States","name":"OOPSLA: Object-Oriented Programming, Systems, Languages, and Applications","end_date":"2021-10-23"},"article_number":"127","ddc":["005"],"acknowledgement":"We thank the reviewers for their valuable suggestions towards improving the paper. We also \r\nthank Mae Milano and Adrian Sampson, as well as the members of the Programming Languages Discussion Group at Cornell University and of the Programming Research Laboratory at Northeastern University, for their helpful feedback on preliminary findings of this work.\r\n\r\nThis material is based upon work supported in part by the National Science Foundation (NSF) through grant CCF-1350182 and the Austrian Science Fund (FWF) through grant Z211-N23 (Wittgenstein~Award).\r\nAny opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the NSF or the FWF.","type":"journal_article","article_type":"original","doi":"10.1145/3485504","has_accepted_license":"1"}