Better Defunctionalization through Lambda Set Specialization
Higher-order functions pose a challenge for both static program analyses and optimizing compilers. To simplify the analysis and compilation of languages with higher-order functions, a rich body of prior work has proposed a variety of defunctionalization techniques, which can eliminate higher-order f...
Gespeichert in:
| Veröffentlicht in: | Proceedings of ACM on programming languages Jg. 7; H. PLDI; S. 977 - 1000 |
|---|---|
| Hauptverfasser: | , , , , |
| Format: | Journal Article |
| Sprache: | Englisch |
| Veröffentlicht: |
New York, NY, USA
ACM
06.06.2023
|
| Schlagworte: | |
| ISSN: | 2475-1421, 2475-1421 |
| Online-Zugang: | Volltext |
| Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
| Abstract | Higher-order functions pose a challenge for both static program analyses and optimizing compilers. To simplify the analysis and compilation of languages with higher-order functions, a rich body of prior work has proposed a variety of defunctionalization techniques, which can eliminate higher-order functions from a program by transforming the program to a semantically-equivalent first-order representation. Several modern languages take this a step further, specializing higher-order functions with respect to the functions on which they operate, and in turn allowing compilers to generate more efficient code. However, existing specializing defunctionalization techniques restrict how function values may be used, forcing implementations to fall back on costly dynamic alternatives. We propose lambda set specialization (LSS), the first specializing defunctionalization technique which imposes no restrictions on how function values may be used. We formulate LSS in terms of a polymorphic type system which tracks the flow of function values through the program, and use this type system to recast specialization of higher-order functions with respect to their arguments as a form of type monomorphization. We show that our type system admits a simple and tractable type inference algorithm, and give a formalization and fully-mechanized proof in the Isabelle/HOL proof assistant showing soundness and completeness of the type inference algorithm with respect to the type system. To show the benefits of LSS, we evaluate its impact on the run time performance of code generated by the MLton compiler for Standard ML, the OCaml compiler, and the new Morphic functional programming language. We find that pre-processing with LSS achieves run time speedups of up to 6.85x under MLton, 3.45x for OCaml, and 78.93x for Morphic. |
|---|---|
| AbstractList | Higher-order functions pose a challenge for both static program analyses and optimizing compilers. To simplify the analysis and compilation of languages with higher-order functions, a rich body of prior work has proposed a variety of defunctionalization techniques, which can eliminate higher-order functions from a program by transforming the program to a semantically-equivalent first-order representation. Several modern languages take this a step further, specializing higher-order functions with respect to the functions on which they operate, and in turn allowing compilers to generate more efficient code. However, existing specializing defunctionalization techniques restrict how function values may be used, forcing implementations to fall back on costly dynamic alternatives. We propose lambda set specialization (LSS), the first specializing defunctionalization technique which imposes no restrictions on how function values may be used. We formulate LSS in terms of a polymorphic type system which tracks the flow of function values through the program, and use this type system to recast specialization of higher-order functions with respect to their arguments as a form of type monomorphization. We show that our type system admits a simple and tractable type inference algorithm, and give a formalization and fully-mechanized proof in the Isabelle/HOL proof assistant showing soundness and completeness of the type inference algorithm with respect to the type system. To show the benefits of LSS, we evaluate its impact on the run time performance of code generated by the MLton compiler for Standard ML, the OCaml compiler, and the new Morphic functional programming language. We find that pre-processing with LSS achieves run time speedups of up to 6.85x under MLton, 3.45x for OCaml, and 78.93x for Morphic. |
| ArticleNumber | 146 |
| Author | Brandon, William Dai, Frank Berkow, Wilson Driscoll, Benjamin Milano, Mae |
| Author_xml | – sequence: 1 givenname: William orcidid: 0009-0007-9478-8757 surname: Brandon fullname: Brandon, William email: wbrandon@csail.mit.edu organization: Massachusetts Institute of Technology, USA – sequence: 2 givenname: Benjamin orcidid: 0000-0002-1901-1880 surname: Driscoll fullname: Driscoll, Benjamin email: bdrisc@stanford.edu organization: Stanford University, USA – sequence: 3 givenname: Frank orcidid: 0009-0003-9486-4060 surname: Dai fullname: Dai, Frank email: fydai@berkeley.edu organization: University of California at Berkeley, USA – sequence: 4 givenname: Wilson orcidid: 0009-0009-7376-7652 surname: Berkow fullname: Berkow, Wilson email: wberkow@berkeley.edu organization: University of California at Berkeley, USA – sequence: 5 givenname: Mae orcidid: 0000-0003-3126-7771 surname: Milano fullname: Milano, Mae email: mpmilano@berkeley.edu organization: University of California at Berkeley, USA |
| BookMark | eNptz01LAzEQBuAgFay1ePe0N0-rmSSbbMCLtn7BgofqeZlkszayHyWbHvTXa20tIp7mhXkY5j0mo67vHCGnQC8ARHbJMw1M0gMyZkJlKQgGo1_5iEyH4Y1SCpqLnOsxubpxMbqQzF297mz0fYeN_8BNSOIy9OvXZVJgaypMFi4mi5Wzfi9OyGGNzeCmuzkhL3e3z7OHtHi6f5xdFykypWKqObecamq4k8IoiUblDoUFqFGbXFBEQyVkJkPGZVXpWiIzQLV11iiBfELS7V0b-mEIri6tj98fxIC-KYGWm_blrv2XP__jV8G3GN7_kWdbibbdo5_lJw20Yv8 |
| CitedBy_id | crossref_primary_10_3389_fphy_2025_1596987 crossref_primary_10_1145_3729280 crossref_primary_10_1145_3747516 |
| Cites_doi | 10.1145/3473593 10.1007/BF01018828 10.1145/258948.258953 10.1145/237721.237791 10.1145/258948.258951 10.5281/zenodo.7712285 10.2307/1995158 10.1145/292540.292545 10.1145/1159876.1159877 10.1145/2628136.2628153 10.1007/s10990-006-8611-7 10.1145/800194.805852 10.1007/3-540-46425-5_4 10.1145/2187671.2187672 10.1145/75277.75283 10.1145/507635.507640 10.1007/978-3-030-18506-0_7 10.1017/S0956796802004331 10.1016/0022-0000(78)90014-4 10.1137/141000671 |
| ContentType | Journal Article |
| Copyright | Owner/Author |
| Copyright_xml | – notice: Owner/Author |
| DBID | AAYXX CITATION |
| DOI | 10.1145/3591260 |
| DatabaseName | CrossRef |
| DatabaseTitle | CrossRef |
| DatabaseTitleList | CrossRef |
| DeliveryMethod | fulltext_linktorsrc |
| Discipline | Computer Science |
| EISSN | 2475-1421 |
| EndPage | 1000 |
| ExternalDocumentID | 10_1145_3591260 3591260 |
| GrantInformation_xml | – fundername: NSF (National Science Foundation) grantid: CCF-1730628 funderid: http://dx.doi.org/10.13039/100000001 |
| GroupedDBID | AAKMM AAYFX ACM ADPZR AIKLT ALMA_UNASSIGNED_HOLDINGS GUFHI LHSKQ M~E OK1 ROL AAYXX AEFXT AEJOY AKRVB CITATION |
| ID | FETCH-LOGICAL-a277t-933c3090b3e64b76ab78ea4c11fa9b840aab0615b5a236dd9f6a2b109cecb74a3 |
| ISICitedReferencesCount | 3 |
| ISICitedReferencesURI | http://www.webofscience.com/api/gateway?GWVersion=2&SrcApp=Summon&SrcAuth=ProQuest&DestLinkType=CitingArticles&DestApp=WOS_CPL&KeyUT=001005701900042&url=https%3A%2F%2Fcvtisr.summon.serialssolutions.com%2F%23%21%2Fsearch%3Fho%3Df%26include.ft.matches%3Dt%26l%3Dnull%26q%3D |
| ISSN | 2475-1421 |
| IngestDate | Sat Nov 29 07:48:32 EST 2025 Tue Nov 18 22:25:43 EST 2025 Fri Feb 21 04:13:08 EST 2025 |
| IsDoiOpenAccess | true |
| IsOpenAccess | true |
| IsPeerReviewed | true |
| IsScholarly | true |
| Issue | PLDI |
| Keywords | defunctionalization monomorphization type systems |
| Language | English |
| License | This work is licensed under a Creative Commons Attribution 4.0 International License. |
| LinkModel | OpenURL |
| MergedId | FETCHMERGED-LOGICAL-a277t-933c3090b3e64b76ab78ea4c11fa9b840aab0615b5a236dd9f6a2b109cecb74a3 |
| ORCID | 0000-0003-3126-7771 0000-0002-1901-1880 0009-0007-9478-8757 0009-0009-7376-7652 0009-0003-9486-4060 |
| OpenAccessLink | https://dl.acm.org/doi/10.1145/3591260 |
| PageCount | 24 |
| ParticipantIDs | crossref_citationtrail_10_1145_3591260 crossref_primary_10_1145_3591260 acm_primary_3591260 |
| PublicationCentury | 2000 |
| PublicationDate | 2023-06-06 |
| PublicationDateYYYYMMDD | 2023-06-06 |
| PublicationDate_xml | – month: 06 year: 2023 text: 2023-06-06 day: 06 |
| PublicationDecade | 2020 |
| PublicationPlace | New York, NY, USA |
| PublicationPlace_xml | – name: New York, NY, USA |
| PublicationTitle | Proceedings of ACM on programming languages |
| PublicationTitleAbbrev | ACM PACMPL |
| PublicationYear | 2023 |
| Publisher | ACM |
| Publisher_xml | – name: ACM |
| References | Jeff Bezanson, Alan Edelman, Stefan Karpinski, and Viral B Shah. 2017. Julia: A fresh approach to numerical computing. SIAM review, 59, 1 (2017), 65–98. https://doi.org/10.1137/141000671 10.1137/141000671 Philip Wadler and Stephen Blott. 1989. How to make ad-hoc polymorphism less ad hoc. In Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. 60–76. https://doi.org/10.1145/75277.75283 10.1145/75277.75283 Anders Kiel Hovgaard. 2018. Higher-order functions for a high-performance programming language for GPUs. Master’s thesis. University of Copenhagen. Copenhagen, Denmark. Jan Midtgaard. 2012. Control-flow analysis of functional programs. ACM computing surveys (CSUR), 44, 3 (2012), 1–33. https://doi.org/10.1145/2187671.2187672 10.1145/2187671.2187672 Allyn Dimock, Ian Westmacott, Robert Muller, Franklyn Turbak, and Joseph Brian Wells. 2001. Functioning without closure: Type-safe customized function representations for Standard ML. In Proceedings of the sixth ACM SIGPLAN international conference on Functional programming. 14–25. https://doi.org/10.1145/507635.507640 10.1145/507635.507640 Anindya Banerjee. 1997. A Modular, Polyvariant and Type-Based Closure Analysis. In Proceedings of the Second ACM SIGPLAN International Conference on Functional Programming (ICFP ’97). Association for Computing Machinery, New York, NY, USA. 1–10. isbn:0897919181 https://doi.org/10.1145/258948.258951 10.1145/258948.258951 Stephen Weeks. 2006. Whole-program compilation in MLton. ML, 6 (2006), 1–1. https://doi.org/10.1145/1159876.1159877 10.1145/1159876.1159877 Steve Klabnik and Carol Nichols. 2019. The Rust Programming Language. No Starch Press, San Francisco, CA. Jeffrey M Bell, Françoise Bellegarde, and James Hook. 1997. Type-driven defunctionalization. In Proceedings of the second ACM SIGPLAN international conference on Functional programming. 25–37. https://doi.org/10.1145/258948.258953 10.1145/258948.258953 John C Reynolds. 1972. Definitional interpreters for higher-order programming languages. In Proceedings of the ACM annual conference - Volume 2. ACM, New York, NY, USA. 717–740. https://doi.org/10.1145/800194.805852 10.1145/800194.805852 Bjarne Stroustrup. 2013. The C++ Programming Language. Addison-Wesley, Boston, MA. William Brandon, Benjamin Driscoll, Frank Dai, and Wilson Berkow. 2023. Morphic Research Language. https://morphic-lang.org [Online] Anders Kiel Hovgaard, Troels Henriksen, and Martin Elsman. 2018. High-Performance Defunctionalisation in Futhark. In International Symposium on Trends in Functional Programming. Springer, Cham, Switzerland. 136–156. https://doi.org/10.1007/978-3-030-18506-0_7 10.1007/978-3-030-18506-0_7 Benjamin C Pierce. 2005. Advanced topics in types and programming languages. MIT Press, Cambridge, MA. William Brandon, Benjamin Driscoll, Frank Dai, Wilson Berkow, and Mae Milano. 2023. Better Defunctionalization Through Lambda Set Specialization. https://doi.org/10.5281/zenodo.7712285 10.5281/zenodo.7712285 Benjamin C Pierce. 2002. Types and programming languages. MIT Press, Cambridge, MA. Keith Wansbrough and Simon Peyton Jones. 1999. Once upon a polymorphic type. In Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. 15–28. https://doi.org/10.1145/292540.292545 10.1145/292540.292545 A.K. Wright. 1995. Simple imperative polymorphism. LISP and Symbolic Computation, 8 (1995), 343–355. https://doi.org/10.1007/BF01018828 10.1007/BF01018828 Yasuhiko Minamide, Greg Morrisett, and Robert Harper. 1996. Typed closure conversion. In Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on principles of programming languages. 271–283. https://doi.org/10.1145/237721.237791 10.1145/237721.237791 Robin Milner. 1978. A theory of type polymorphism in programming. Journal of computer and system sciences, 17, 3 (1978), 348–375. https://doi.org/10.1016/0022-0000(78)90014-4 10.1016/0022-0000(78)90014-4 Simon Peyton Jones and Simon Marlow. 2002. Secrets of the Glasgow Haskell Compiler inliner. Journal of Functional Programming, 12, 4-5 (2002), 393–434. https://doi.org/10.1017/S0956796802004331 10.1017/S0956796802004331 Corentin De Souza. 2022. Higher-order function specialization in Infer. Presented at the 43rd ACM SIGPLAN Conference on Programming Language Design and Implementation. Adam Paszke, Daniel Johnson, David Duvenaud, Dimitrios Vytiniotis, Alexey Radul, Matthew Johnson, Jonathan Ragan-Kelley, and Dougal Maclaurin. 2021. Getting to the point. Index sets and parallelism-preserving autodiff for pointful array programming. arXiv preprint arXiv:2104.05372, https://doi.org/10.1145/3473593 10.1145/3473593 Xavier Leroy, Damien Doligez, Alain Frisch, Jacques Garrigue, Didier Rémy, and Jérôme Vouillon. 2022. The OCaml system release 4.14: Documentation and user’s manual. Lars Bergstrom, Matthew Fluet, Matthew Le, John Reppy, and Nora Sandler. 2014. Practical and Effective Higher-Order Optimizations. In Proceedings of the 19th ACM SIGPLAN International Conference on Functional Programming (ICFP ’14). Association for Computing Machinery, New York, NY, USA. 81–93. isbn:9781450328739 https://doi.org/10.1145/2628136.2628153 10.1145/2628136.2628153 Henry Cejtin, Suresh Jagannathan, and Stephen Weeks. 2000. Flow-directed closure conversion for typed languages. In European Symposium on Programming. Springer, Berlin, Heidelberg. 56–71. https://doi.org/10.1007/3-540-46425-5_4 10.1007/3-540-46425-5_4 Roger Hindley. 1969. The Principal Type-Scheme of an Object in Combinatory Logic. Trans. Amer. Math. Soc., 146 (1969), 29–60. issn:00029947 https://doi.org/10.2307/1995158 10.2307/1995158 François Pottier and Nadji Gauthier. 2006. Polymorphic typed defunctionalization and concretization. Higher-Order and Symbolic Computation, 19, 1 (2006), 125–162. https://doi.org/10.1007/s10990-006-8611-7 10.1007/s10990-006-8611-7 e_1_2_2_4_1 e_1_2_2_25_1 e_1_2_2_5_1 e_1_2_2_6_1 e_1_2_2_23_1 e_1_2_2_7_1 e_1_2_2_22_1 e_1_2_2_1_1 e_1_2_2_2_1 e_1_2_2_3_1 Pierce Benjamin C (e_1_2_2_21_1) e_1_2_2_9_1 e_1_2_2_28_1 e_1_2_2_27_1 e_1_2_2_26_1 Souza Corentin De (e_1_2_2_8_1) 2022 e_1_2_2_13_1 e_1_2_2_12_1 e_1_2_2_10_1 e_1_2_2_19_1 e_1_2_2_18_1 Pierce Benjamin C (e_1_2_2_20_1) e_1_2_2_17_1 Klabnik Steve (e_1_2_2_14_1) e_1_2_2_16_1 Hovgaard Anders Kiel (e_1_2_2_11_1) e_1_2_2_15_1 Stroustrup Bjarne (e_1_2_2_24_1) |
| References_xml | – reference: Xavier Leroy, Damien Doligez, Alain Frisch, Jacques Garrigue, Didier Rémy, and Jérôme Vouillon. 2022. The OCaml system release 4.14: Documentation and user’s manual. – reference: Robin Milner. 1978. A theory of type polymorphism in programming. Journal of computer and system sciences, 17, 3 (1978), 348–375. https://doi.org/10.1016/0022-0000(78)90014-4 10.1016/0022-0000(78)90014-4 – reference: Benjamin C Pierce. 2002. Types and programming languages. MIT Press, Cambridge, MA. – reference: Yasuhiko Minamide, Greg Morrisett, and Robert Harper. 1996. Typed closure conversion. In Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on principles of programming languages. 271–283. https://doi.org/10.1145/237721.237791 10.1145/237721.237791 – reference: Lars Bergstrom, Matthew Fluet, Matthew Le, John Reppy, and Nora Sandler. 2014. Practical and Effective Higher-Order Optimizations. In Proceedings of the 19th ACM SIGPLAN International Conference on Functional Programming (ICFP ’14). Association for Computing Machinery, New York, NY, USA. 81–93. isbn:9781450328739 https://doi.org/10.1145/2628136.2628153 10.1145/2628136.2628153 – reference: Jan Midtgaard. 2012. Control-flow analysis of functional programs. ACM computing surveys (CSUR), 44, 3 (2012), 1–33. https://doi.org/10.1145/2187671.2187672 10.1145/2187671.2187672 – reference: William Brandon, Benjamin Driscoll, Frank Dai, Wilson Berkow, and Mae Milano. 2023. Better Defunctionalization Through Lambda Set Specialization. https://doi.org/10.5281/zenodo.7712285 10.5281/zenodo.7712285 – reference: Simon Peyton Jones and Simon Marlow. 2002. Secrets of the Glasgow Haskell Compiler inliner. Journal of Functional Programming, 12, 4-5 (2002), 393–434. https://doi.org/10.1017/S0956796802004331 10.1017/S0956796802004331 – reference: John C Reynolds. 1972. Definitional interpreters for higher-order programming languages. In Proceedings of the ACM annual conference - Volume 2. ACM, New York, NY, USA. 717–740. https://doi.org/10.1145/800194.805852 10.1145/800194.805852 – reference: Adam Paszke, Daniel Johnson, David Duvenaud, Dimitrios Vytiniotis, Alexey Radul, Matthew Johnson, Jonathan Ragan-Kelley, and Dougal Maclaurin. 2021. Getting to the point. Index sets and parallelism-preserving autodiff for pointful array programming. arXiv preprint arXiv:2104.05372, https://doi.org/10.1145/3473593 10.1145/3473593 – reference: Jeffrey M Bell, Françoise Bellegarde, and James Hook. 1997. Type-driven defunctionalization. In Proceedings of the second ACM SIGPLAN international conference on Functional programming. 25–37. https://doi.org/10.1145/258948.258953 10.1145/258948.258953 – reference: Henry Cejtin, Suresh Jagannathan, and Stephen Weeks. 2000. Flow-directed closure conversion for typed languages. In European Symposium on Programming. Springer, Berlin, Heidelberg. 56–71. https://doi.org/10.1007/3-540-46425-5_4 10.1007/3-540-46425-5_4 – reference: Keith Wansbrough and Simon Peyton Jones. 1999. Once upon a polymorphic type. In Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. 15–28. https://doi.org/10.1145/292540.292545 10.1145/292540.292545 – reference: A.K. Wright. 1995. Simple imperative polymorphism. LISP and Symbolic Computation, 8 (1995), 343–355. https://doi.org/10.1007/BF01018828 10.1007/BF01018828 – reference: Steve Klabnik and Carol Nichols. 2019. The Rust Programming Language. No Starch Press, San Francisco, CA. – reference: Bjarne Stroustrup. 2013. The C++ Programming Language. Addison-Wesley, Boston, MA. – reference: Anders Kiel Hovgaard. 2018. Higher-order functions for a high-performance programming language for GPUs. Master’s thesis. University of Copenhagen. Copenhagen, Denmark. – reference: Anindya Banerjee. 1997. A Modular, Polyvariant and Type-Based Closure Analysis. In Proceedings of the Second ACM SIGPLAN International Conference on Functional Programming (ICFP ’97). Association for Computing Machinery, New York, NY, USA. 1–10. isbn:0897919181 https://doi.org/10.1145/258948.258951 10.1145/258948.258951 – reference: François Pottier and Nadji Gauthier. 2006. Polymorphic typed defunctionalization and concretization. Higher-Order and Symbolic Computation, 19, 1 (2006), 125–162. https://doi.org/10.1007/s10990-006-8611-7 10.1007/s10990-006-8611-7 – reference: Philip Wadler and Stephen Blott. 1989. How to make ad-hoc polymorphism less ad hoc. In Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. 60–76. https://doi.org/10.1145/75277.75283 10.1145/75277.75283 – reference: Stephen Weeks. 2006. Whole-program compilation in MLton. ML, 6 (2006), 1–1. https://doi.org/10.1145/1159876.1159877 10.1145/1159876.1159877 – reference: Roger Hindley. 1969. The Principal Type-Scheme of an Object in Combinatory Logic. Trans. Amer. Math. Soc., 146 (1969), 29–60. issn:00029947 https://doi.org/10.2307/1995158 10.2307/1995158 – reference: Allyn Dimock, Ian Westmacott, Robert Muller, Franklyn Turbak, and Joseph Brian Wells. 2001. Functioning without closure: Type-safe customized function representations for Standard ML. In Proceedings of the sixth ACM SIGPLAN international conference on Functional programming. 14–25. https://doi.org/10.1145/507635.507640 10.1145/507635.507640 – reference: Anders Kiel Hovgaard, Troels Henriksen, and Martin Elsman. 2018. High-Performance Defunctionalisation in Futhark. In International Symposium on Trends in Functional Programming. Springer, Cham, Switzerland. 136–156. https://doi.org/10.1007/978-3-030-18506-0_7 10.1007/978-3-030-18506-0_7 – reference: William Brandon, Benjamin Driscoll, Frank Dai, and Wilson Berkow. 2023. Morphic Research Language. https://morphic-lang.org [Online] – reference: Benjamin C Pierce. 2005. Advanced topics in types and programming languages. MIT Press, Cambridge, MA. – reference: Corentin De Souza. 2022. Higher-order function specialization in Infer. Presented at the 43rd ACM SIGPLAN Conference on Programming Language Design and Implementation. – reference: Jeff Bezanson, Alan Edelman, Stefan Karpinski, and Viral B Shah. 2017. Julia: A fresh approach to numerical computing. SIAM review, 59, 1 (2017), 65–98. https://doi.org/10.1137/141000671 10.1137/141000671 – ident: e_1_2_2_19_1 doi: 10.1145/3473593 – ident: e_1_2_2_28_1 doi: 10.1007/BF01018828 – ident: e_1_2_2_2_1 doi: 10.1145/258948.258953 – ident: e_1_2_2_18_1 doi: 10.1145/237721.237791 – ident: e_1_2_2_1_1 doi: 10.1145/258948.258951 – ident: e_1_2_2_6_1 doi: 10.5281/zenodo.7712285 – ident: e_1_2_2_10_1 doi: 10.2307/1995158 – ident: e_1_2_2_15_1 – ident: e_1_2_2_26_1 doi: 10.1145/292540.292545 – volume-title: Advanced topics in types and programming languages ident: e_1_2_2_21_1 – ident: e_1_2_2_27_1 doi: 10.1145/1159876.1159877 – ident: e_1_2_2_3_1 doi: 10.1145/2628136.2628153 – volume-title: The Rust Programming Language ident: e_1_2_2_14_1 – ident: e_1_2_2_22_1 doi: 10.1007/s10990-006-8611-7 – volume-title: Types and programming languages ident: e_1_2_2_20_1 – ident: e_1_2_2_23_1 doi: 10.1145/800194.805852 – ident: e_1_2_2_7_1 doi: 10.1007/3-540-46425-5_4 – ident: e_1_2_2_16_1 doi: 10.1145/2187671.2187672 – volume-title: The C++ Programming Language ident: e_1_2_2_24_1 – volume-title: 43rd ACM SIGPLAN Conference on Programming Language Design and Implementation. year: 2022 ident: e_1_2_2_8_1 – ident: e_1_2_2_25_1 doi: 10.1145/75277.75283 – ident: e_1_2_2_5_1 – ident: e_1_2_2_9_1 doi: 10.1145/507635.507640 – ident: e_1_2_2_12_1 doi: 10.1007/978-3-030-18506-0_7 – ident: e_1_2_2_13_1 doi: 10.1017/S0956796802004331 – ident: e_1_2_2_17_1 doi: 10.1016/0022-0000(78)90014-4 – ident: e_1_2_2_4_1 doi: 10.1137/141000671 – volume-title: Higher-order functions for a high-performance programming language for GPUs. Master’s thesis ident: e_1_2_2_11_1 |
| SSID | ssj0001934839 |
| Score | 2.2496428 |
| Snippet | Higher-order functions pose a challenge for both static program analyses and optimizing compilers. To simplify the analysis and compilation of languages with... |
| SourceID | crossref acm |
| SourceType | Enrichment Source Index Database Publisher |
| StartPage | 977 |
| SubjectTerms | Polymorphism Procedures, functions and subroutines Software and its engineering |
| SubjectTermsDisplay | Software and its engineering -- Polymorphism Software and its engineering -- Procedures, functions and subroutines |
| Title | Better Defunctionalization through Lambda Set Specialization |
| URI | https://dl.acm.org/doi/10.1145/3591260 |
| Volume | 7 |
| WOSCitedRecordID | wos001005701900042&url=https%3A%2F%2Fcvtisr.summon.serialssolutions.com%2F%23%21%2Fsearch%3Fho%3Df%26include.ft.matches%3Dt%26l%3Dnull%26q%3D |
| hasFullText | 1 |
| inHoldings | 1 |
| isFullTextHit | |
| isPrint | |
| journalDatabaseRights | – providerCode: PRVHPJ databaseName: ROAD: Directory of Open Access Scholarly Resources customDbUrl: eissn: 2475-1421 dateEnd: 99991231 omitProxy: false ssIdentifier: ssj0001934839 issn: 2475-1421 databaseCode: M~E dateStart: 20170101 isFulltext: true titleUrlDefault: https://road.issn.org providerName: ISSN International Centre |
| link | http://cvtisr.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwtV1LT9wwELYWyoFLS3moSwvyAXELxLETx1IvFFpRCdAeQOK28isSj03RdkGcOPOzO44db1itBBx6iSLLtiLPp5nJeGY-hHYyy91tS5Uoo0zCKkITVRGZlAbsjdKCa5U2ZBP87Ky8vBSDXu-5rYV5uOV1XT4-irv_KmoYA2G70tl3iDtuCgPwDkKHJ4gdnm8S_I-mQAcUiTNZPtIXai0jKc-JHCkjQU9MWv75MKPrqg6iaWuyPQ4OT93FQsjnGrkIQxvrnEbawfAFcpAQx4l-MugSB7kGTra-lqOriMojz4jd0MfHnez4xt86-X6S3eBERpskqmKqwzLG84QwXwS9Z-eMBSXMO1gbnBz97uhUEXhevHl29xHzVT9zXTJoLkjmGQpeNteeMXoxFdEXZufDsHABfcg4vLok0KdOtE5QVja0dPHrfQW2W7sf1joHR486Dk7HUzlfQR_DLwY-8ND4jHq2XkWfWvoOHLT5GvrukYLnIAUHpGCPFAxIwS-Rso4ufv08PzxOAplGIjPOJ4mgVNNUpIragileSMVLK5kmpJJCwW--lMq5tyqXGS2MEVUhM0VSoa1WnEm6gRbrP7X9gjBRuSY5N-Aca2bzUtiistQYXqiUkbTqo1U4h-Gdb5fSnmwf7bbnMtSh_7yjQbkdzoigj3Cc2O4xM2Xz9Slf0fIUkN_Q4mR8b7fQkn6YXP0dbzfS_QeJmHOt |
| linkProvider | ISSN International Centre |
| openUrl | ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Better+Defunctionalization+through+Lambda+Set+Specialization&rft.jtitle=Proceedings+of+ACM+on+programming+languages&rft.au=Brandon%2C+William&rft.au=Driscoll%2C+Benjamin&rft.au=Dai%2C+Frank&rft.au=Berkow%2C+Wilson&rft.date=2023-06-06&rft.issn=2475-1421&rft.eissn=2475-1421&rft.volume=7&rft.issue=PLDI&rft.spage=977&rft.epage=1000&rft_id=info:doi/10.1145%2F3591260&rft.externalDBID=n%2Fa&rft.externalDocID=10_1145_3591260 |
| thumbnail_l | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=2475-1421&client=summon |
| thumbnail_m | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=2475-1421&client=summon |
| thumbnail_s | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=2475-1421&client=summon |