{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:06:00Z","timestamp":1779836760504,"version":"3.53.1"},"reference-count":59,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2019,2,20]],"date-time":"2019-02-20T00:00:00Z","timestamp":1550620800000},"content-version":"unspecified","delay-in-days":50,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2019]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>A sound gradual type system ensures that untyped components of a program can never break the guarantees of statically typed components. This assurance relies on runtime checks, which in turn impose performance overhead in proportion to the frequency and nature of interaction between typed and untyped components. The literature on gradual typing lacks rigorous descriptions of methods for measuring the performance of gradual type systems. This gap has consequences for the implementors of gradual type systems and developers who use such systems. Without systematic evaluation of mixed-typed programs, implementors cannot precisely determine how improvements to a gradual type system affect performance. Developers cannot predict whether adding types to part of a program will significantly degrade (or improve) its performance. This paper presents the first method for evaluating the performance of sound gradual type systems. The method quantifies both the absolute performance of a gradual type system and the relative performance of two implementations of the same gradual type system. To validate the method, the paper reports on its application to 20 programs and 3 implementations of Typed Racket.<\/jats:p>","DOI":"10.1017\/s0956796818000217","type":"journal-article","created":{"date-parts":[[2019,2,20]],"date-time":"2019-02-20T09:37:23Z","timestamp":1550655443000},"source":"Crossref","is-referenced-by-count":14,"title":["How to evaluate the performance of gradual type systems"],"prefix":"10.1017","volume":"29","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-7078-9287","authenticated-orcid":false,"given":"BEN","family":"GREENMAN","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"ASUMU","family":"TAKIKAWA","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"MAX S.","family":"NEW","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"DANIEL","family":"FELTEY","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"ROBERT BRUCE","family":"FINDLER","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"JAN","family":"VITEK","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"MATTHIAS","family":"FELLEISEN","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2019,2,20]]},"reference":[{"key":"S0956796818000217_ref17","first-page":"417","volume-title":"Proceedings of ACM International Conference on Functional Programming","author":"Garcia","year":"2013"},{"key":"S0956796818000217_ref48","first-page":"943","volume-title":"Proceedings of ACM Conference on Object-Oriented Programming","author":"Strickland","year":"2012"},{"key":"S0956796818000217_ref41","first-page":"425","volume-title":"Proceedings ACM Conference on Programming Language Design and Implementation","author":"Siek","year":"2015"},{"key":"S0956796818000217_ref46","volume-title":"Common Lisp the Language","author":"Steele","year":"1990"},{"key":"S0956796818000217_ref20","first-page":"181","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Greenberg","year":"2015"},{"key":"S0956796818000217_ref42","volume-title":"Proceedings of Dynamic Languages Symposium","author":"Siek","year":"2008"},{"key":"S0956796818000217_ref45","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-46663-6_3"},{"key":"S0956796818000217_ref10","first-page":"214","volume-title":"Proceedings of European Symposium on Programming","author":"Dimoulas","year":"2012"},{"key":"S0956796818000217_ref5","first-page":"54:1","volume-title":"Proceedings of the ACM on Programming Languages","volume":"1","author":"Bauman","year":"2017"},{"key":"S0956796818000217_ref4","first-page":"22","volume-title":"Proceedings of ACM International Conference on Functional Programming","author":"Bauman","year":"2015"},{"key":"S0956796818000217_ref14","unstructured":"Franz, Volker H. (2007) Ratios: A short guide to confidence limits and proper use. Unpublished Manuscript. https:\/\/arxiv.org\/abs\/0710.2024."},{"key":"S0956796818000217_ref54","first-page":"964","volume-title":"Proceedings of Dynamic Languages Symposium","author":"Tobin-Hochstadt","year":"2006"},{"key":"S0956796818000217_ref35","unstructured":"Nguyen, L. C. (2014) Tough Behavior in Repeated Bargaining Game. A Computer Simulation Study. Master in Economics dissertation, University of Trento."},{"key":"S0956796818000217_ref12","first-page":"23","volume-title":"Proceedings of ACM Conference on Programming Language Design and Implementation","author":"Flanagan","year":"1996"},{"key":"S0956796818000217_ref25","first-page":"205","volume-title":"Proceedings of ACM Symposium on LISP and Functional Programming","author":"Henglein","year":"1992"},{"key":"S0956796818000217_ref34","doi-asserted-by":"crossref","first-page":"333","DOI":"10.1098\/rsta.1937.0005","article-title":"Outline of a theory of statistical estimation based on the classical theory of probability","volume":"236","author":"Neyman","year":"1937","journal-title":"Philos. Trans. R. Soc. Lond"},{"key":"S0956796818000217_ref21","unstructured":"Greenberg, M. (2016) Space-efficient latent contracts. arXiv:1604.02474v4. Accessed 2018-12-03."},{"key":"S0956796818000217_ref50","first-page":"4","volume-title":"Proceedings of European Conference on Object-Oriented Programming","author":"Takikawa","year":"2015"},{"key":"S0956796818000217_ref51","first-page":"456","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Takikawa","year":"2016"},{"key":"S0956796818000217_ref49","first-page":"187","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Suzuki","year":"1981"},{"key":"S0956796818000217_ref43","first-page":"432","volume-title":"Proceedings of European Symposium on Programming","author":"Siek","year":"2015"},{"key":"S0956796818000217_ref24","first-page":"83","article-title":"Code layout as a source of noise in JVM performance","volume":"4","author":"Gu","year":"2005","journal-title":"Stud. Inform. Univers"},{"key":"S0956796818000217_ref7","first-page":"278","volume-title":"Proceedings of ACM Conference on Programming Language Design and Implementation","author":"Cartwright","year":"1991"},{"key":"S0956796818000217_ref8","first-page":"236","volume-title":"Proceedings of European Symposium on Programming","author":"Consel","year":"1988"},{"key":"S0956796818000217_ref13","first-page":"705","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Flatt","year":"2016"},{"key":"S0956796818000217_ref19","first-page":"429","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Garcia","year":"2016"},{"key":"S0956796818000217_ref59","first-page":"459","volume-title":"Proceedins of European Conference on Object-Oriented Programming","author":"Wolff","year":"2011"},{"key":"S0956796818000217_ref26","first-page":"192","volume-title":"Proceedings of ACM International Conference on Functional Programming Languages and Computer Architecture","author":"Henglein","year":"1995"},{"key":"S0956796818000217_ref29","volume-title":"Sage: Unified Hybrid Checking for First-Class Types, General Refinement Types, and Dynamic (Extended Report)","author":"Knowles","year":"2007"},{"key":"S0956796818000217_ref40","first-page":"2006","volume-title":"Proceedings of Scheme and Functional Programming Workshop","author":"Siek","year":"2006"},{"key":"S0956796818000217_ref58","first-page":"762","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Vitousek","year":"2017"},{"key":"S0956796818000217_ref1","first-page":"163","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Aiken","year":"1994"},{"key":"S0956796818000217_ref33","first-page":"265","volume-title":"Proceedings of ACM International Conference on Architectural Support for Programming Languages and Operating Systems","author":"Mytkowicz","year":"2009"},{"key":"S0956796818000217_ref39","first-page":"76","volume-title":"Proceedings of European Conference on Object-Oriented Programming","author":"Richards","year":"2015"},{"key":"S0956796818000217_ref32","volume-title":"MACLISP Reference Manual","author":"Moon","year":"1974"},{"key":"S0956796818000217_ref3","first-page":"428","volume-title":"Proceedings of European Conference Object-Oriented Programming","author":"Anderson","year":"2005"},{"key":"S0956796818000217_ref11","doi-asserted-by":"crossref","first-page":"175","DOI":"10.1111\/j.2517-6161.1954.tb00159.x","article-title":"Some problems in interval estimation","volume":"16","author":"Fieller","year":"1957","journal-title":"J. R. Stat. Soc"},{"key":"S0956796818000217_ref22","first-page":"71:1","volume-title":"Proceedings of the ACM on Programming Languages","volume":"2","author":"Greenman","year":"2018"},{"key":"S0956796818000217_ref16","first-page":"366","volume-title":"Proceedings of International Static Analysis Symposium","author":"Gallesio","year":"1995"},{"key":"S0956796818000217_ref9","first-page":"219","volume-title":"Proceedings of ACM International Conference on Architectural Support for Programming Languages and Operating Systems","author":"Curtsinger","year":"2013"},{"key":"S0956796818000217_ref30","unstructured":"Lemonnier, E. (2006) Pluto: Or how to make Perl juggle with billions. Forum on Free and Open Source Software (FREENIX). Available at: http:\/\/erwan.lemonnier.se\/talks\/pluto.html. Accessed 2018-12-03."},{"key":"S0956796818000217_ref52","first-page":"793","volume-title":"Proceedings of ACM Conference on Object-Oriented Programming","author":"Takikawa","year":"2012"},{"key":"S0956796818000217_ref18","first-page":"303","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Garcia","year":"2015"},{"key":"S0956796818000217_ref55","first-page":"395","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Tobin-Hochstadt","year":"2008"},{"key":"S0956796818000217_ref57","doi-asserted-by":"publisher","DOI":"10.1145\/2661088.2661101"},{"key":"S0956796818000217_ref56","first-page":"17:1","volume-title":"Proceedings of Summit on Advances in Programming Languages","author":"Tobin-Hochstadt","year":"2017"},{"key":"S0956796818000217_ref36","first-page":"139","volume-title":"Proceedings of ACM International Conference on Functional Programming","author":"Nguyen","year":"2014"},{"key":"S0956796818000217_ref6","first-page":"117","volume-title":"Proceedings of ACM Conference on Object-Oriented Programming","author":"Bloom","year":"2009"},{"key":"S0956796818000217_ref23","doi-asserted-by":"publisher","DOI":"10.1145\/3175493.3162066"},{"key":"S0956796818000217_ref37","first-page":"167","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Rastogi","year":"2015"},{"key":"S0956796818000217_ref38","first-page":"462","volume-title":"Proceedings of ACM Conference on Programming Language Design and Implementation","author":"Ren","year":"2016"},{"key":"S0956796818000217_ref44","first-page":"365","volume-title":"Proceedings of ACM Symposium on Principles of Programming Languages","author":"Siek","year":"2010"},{"key":"S0956796818000217_ref47","first-page":"32","volume-title":"Proceedings of European Symposium on Programming","author":"Strickland","year":"2009"},{"key":"S0956796818000217_ref15","first-page":"1859","volume-title":"Proceedings of Symposium on Applied Computing","author":"Furr","year":"2009"},{"key":"S0956796818000217_ref27","doi-asserted-by":"publisher","DOI":"10.1007\/s10990-011-9066-z"},{"key":"S0956796818000217_ref28","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-60360-3_41"},{"key":"S0956796818000217_ref31","first-page":"12:1","article-title":"Operational semantics for multi-language programs","volume":"31","author":"Matthews","year":"2009","journal-title":"Trans. Program. Lang. Syst."},{"key":"S0956796818000217_ref2","doi-asserted-by":"crossref","first-page":"52","DOI":"10.1016\/j.scico.2013.06.006","article-title":"Gradual typing for Smalltalk","volume":"96","author":"Allende","year":"2013","journal-title":"Sci. Comput. Program"},{"key":"S0956796818000217_ref53","first-page":"229","volume-title":"Proceedings of European Symposium on Programming","author":"Takikawa","year":"2013"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796818000217","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:46Z","timestamp":1779835006000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796818000217\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019]]},"references-count":59,"alternative-id":["S0956796818000217"],"URL":"https:\/\/doi.org\/10.1017\/s0956796818000217","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019]]},"article-number":"e4"}}