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...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Proceedings of ACM on programming languages Jg. 7; H. PLDI; S. 977 - 1000
Hauptverfasser: Brandon, William, Driscoll, Benjamin, Dai, Frank, Berkow, Wilson, Milano, Mae
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