{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,2,5]],"date-time":"2026-02-05T09:38:19Z","timestamp":1770284299465,"version":"3.49.0"},"reference-count":21,"publisher":"Association for Computing Machinery (ACM)","issue":"6","license":[{"start":{"date-parts":[[2004,11,1]],"date-time":"2004-11-01T00:00:00Z","timestamp":1099267200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Program. Lang. Syst."],"published-print":{"date-parts":[[2004,11]]},"abstract":"<jats:p>Security folklore holds that a security mechanism based on stack inspection is incompatible with a global tail call optimization policy; that an implementation of such a language must allocate memory for a source-code tail call, and a program that uses only tail calls (and no other memory-allocating construct) may nevertheless exhaust the available memory. In this article, we prove this widely held belief wrong. We exhibit an abstract machine for a language with security stack inspection whose space consumption function is equivalent to that of the canonical tail call optimizing abstract machine. Our machine is surprisingly simple and suggests that tail calls are as easy to implement in a security setting as they are in a conventional one.<\/jats:p>","DOI":"10.1145\/1034774.1034778","type":"journal-article","created":{"date-parts":[[2005,1,26]],"date-time":"2005-01-26T16:35:53Z","timestamp":1106757353000},"page":"1029-1052","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":30,"title":["A tail-recursive machine with stack inspection"],"prefix":"10.1145","volume":"26","author":[{"given":"John","family":"Clements","sequence":"first","affiliation":[{"name":"Northeastern University, Boston, MA"}]},{"given":"Matthias","family":"Felleisen","sequence":"additional","affiliation":[{"name":"Northeastern University, Boston, MA"}]}],"member":"320","published-online":{"date-parts":[[2004,11]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Proceedings of the ACM SIGPLAN International Conference on Functional Programming. 129--140","author":"Benton N.","unstructured":"Benton , N. , Kennedy , A. , and Russell , G . 1998. Compiling standard ML to Java bytecodes . In Proceedings of the ACM SIGPLAN International Conference on Functional Programming. 129--140 .]] 10.1145\/289423.289435 Benton, N., Kennedy, A., and Russell, G. 1998. Compiling standard ML to Java bytecodes. In Proceedings of the ACM SIGPLAN International Conference on Functional Programming. 129--140.]] 10.1145\/289423.289435"},{"key":"e_1_2_1_2_1","volume-title":"Volume I: The Common Language Runtime","author":"Box D.","unstructured":"Box , D. 2002. Essential . NET , Volume I: The Common Language Runtime . Addison-Wesley , Reading, MA .]] Box, D. 2002. Essential. NET, Volume I: The Common Language Runtime. Addison-Wesley, Reading, MA.]]"},{"key":"e_1_2_1_3_1","volume-title":"Proceedings of the European Symposium on Programming. 320--334","author":"Clements J.","unstructured":"Clements , J. , Flatt , M. , and Felleisen , M . 2001. Modeling an algebraic stepper . In Proceedings of the European Symposium on Programming. 320--334 .]] Clements, J., Flatt, M., and Felleisen, M. 2001. Modeling an algebraic stepper. In Proceedings of the European Symposium on Programming. 320--334.]]"},{"key":"e_1_2_1_4_1","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation. 174--185","author":"Clinger W. D.","year":"1998","unstructured":"Clinger , W. D. 1998 . Proper tail recursion and space efficiency . In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation. 174--185 .]] 10.1145\/277650.277719 Clinger, W. D. 1998. Proper tail recursion and space efficiency. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation. 174--185.]] 10.1145\/277650.277719"},{"key":"e_1_2_1_5_1","volume-title":"Proceedings of the IEEE Symposium on Security and Privacy. 246--255","author":"Erlingsson U.","unstructured":"Erlingsson , U. and Schneider , F. B . 2000. IRM enforcement of Java stack inspection . In Proceedings of the IEEE Symposium on Security and Privacy. 246--255 .]] Erlingsson, U. and Schneider, F. B. 2000. IRM enforcement of Java stack inspection. In Proceedings of the IEEE Symposium on Security and Privacy. 246--255.]]"},{"key":"e_1_2_1_6_1","unstructured":"Felleisen M. and Flatt M. 1989--2002. Programming languages and their calculi. Unpublished manuscript. Available online at &lt;http:\/\/www.ccs.neu.edu\/home\/matthias\/3810-w02\/mono.ps.gz&gt;.]]  Felleisen M. and Flatt M. 1989--2002. Programming languages and their calculi. Unpublished manuscript. Available online at &lt;http:\/\/www.ccs.neu.edu\/home\/matthias\/3810-w02\/mono.ps.gz&gt;.]]"},{"key":"e_1_2_1_7_1","unstructured":"Felleisen M. and Friedman D. P. 1986. Control operators the SECD-machine and the \u03bb-calculus. In Formal Description of Programming Concepts III M. Wirsing Ed. Elsevier Science Publishers B.V. Amsterdam The Netherlands 193--217.]]  Felleisen M. and Friedman D. P. 1986. Control operators the SECD-machine and the \u03bb-calculus. In Formal Description of Programming Concepts III M. Wirsing Ed. Elsevier Science Publishers B.V. Amsterdam The Netherlands 193--217.]]"},{"key":"e_1_2_1_8_1","unstructured":"Flatt M. 1995--2002. PLT MzScheme: Language manual. Available online at &lt;http:\/\/www.plt-scheme.org&gt;.]]  Flatt M. 1995--2002. PLT MzScheme: Language manual. Available online at &lt;http:\/\/www.plt-scheme.org&gt;.]]"},{"key":"e_1_2_1_9_1","volume-title":"Proceedings of the Symposium on Principles of Programming Languages. 307--318","author":"Fournet C.","unstructured":"Fournet , C. and Gordon , A. D . 2002. Stack inspection: Theory and variants . In Proceedings of the Symposium on Principles of Programming Languages. 307--318 .]] 10.1145\/503272.503301 Fournet, C. and Gordon, A. D. 2002. Stack inspection: Theory and variants. In Proceedings of the Symposium on Principles of Programming Languages. 307--318.]] 10.1145\/503272.503301"},{"key":"e_1_2_1_10_1","unstructured":"Gamma E. Helm R. Johnson R. and Vlissides J. 1995. Design Patterns. Addison-Wesley Reading MA.]]  Gamma E. Helm R. Johnson R. and Vlissides J. 1995. Design Patterns. Addison-Wesley Reading MA.]]"},{"key":"e_1_2_1_11_1","volume-title":"Inside Java 2 Platform Security. Sun Microsystems","author":"Gong L.","unstructured":"Gong , L. 1999. Inside Java 2 Platform Security. Sun Microsystems , Santa Clara, CA .]] Gong, L. 1999. Inside Java 2 Platform Security. Sun Microsystems, Santa Clara, CA.]]"},{"key":"e_1_2_1_12_1","volume-title":"Proceedings of the Computer Security Foundations Workshop. 224--232","author":"Karjoth G.","year":"2000","unstructured":"Karjoth , G. 2000 . An operational semantics of Java 2 access control . In Proceedings of the Computer Security Foundations Workshop. 224--232 .]] Karjoth, G. 2000. An operational semantics of Java 2 access control. In Proceedings of the Computer Security Foundations Workshop. 224--232.]]"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/290229.290234"},{"key":"e_1_2_1_14_1","unstructured":"Microsoft. 2002. Common language runtime SDK documentation. Available online at http:\/\/www.microsoft.com. Part of NET SDK documentation.]]  Microsoft. 2002. Common language runtime SDK documentation. Available online at http:\/\/www.microsoft.com. Part of NET SDK documentation.]]"},{"key":"e_1_2_1_15_1","doi-asserted-by":"crossref","unstructured":"Plotkin G. D. 1975. Call-by-name call-by-value and the \u03bb-calculus. Theoret. Comput. Sci. 125--159.]]  Plotkin G. D. 1975. Call-by-name call-by-value and the \u03bb-calculus. Theoret. Comput. Sci. 125--159.]]","DOI":"10.1016\/0304-3975(75)90017-1"},{"key":"e_1_2_1_16_1","volume-title":"Proceedings of the European Symposium on Programming. 30--45","author":"Pottier F.","unstructured":"Pottier , F. , Skalka , C. , and Smith , S . 2001. A systematic approach to static access control . In Proceedings of the European Symposium on Programming. 30--45 .]] Pottier, F., Skalka, C., and Smith, S. 2001. A systematic approach to static access control. In Proceedings of the European Symposium on Programming. 30--45.]]"},{"key":"e_1_2_1_17_1","volume-title":"Proceedings of the SIGPLAN BABEL Workshop on Multi-Language Infrastructure and Interoperability. 155--168","author":"Schinz M.","unstructured":"Schinz , M. and Odersky , M . 2001. Tail call elimination on the Java virtual machine . In Proceedings of the SIGPLAN BABEL Workshop on Multi-Language Infrastructure and Interoperability. 155--168 .]] Schinz, M. and Odersky, M. 2001. Tail call elimination on the Java virtual machine. In Proceedings of the SIGPLAN BABEL Workshop on Multi-Language Infrastructure and Interoperability. 155--168.]]"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/357766.351244"},{"key":"e_1_2_1_19_1","volume-title":"Proceedings of the 1977 Annual ACM Conference. 153--162","author":"Steele","year":"1977","unstructured":"Steele Jr ., G. L. 1977 . Debunking the 'expensive procedure call' myth . In Proceedings of the 1977 Annual ACM Conference. 153--162 .]] 10.1145\/800179.810196 Steele Jr., G. L. 1977. Debunking the 'expensive procedure call' myth. In Proceedings of the 1977 Annual ACM Conference. 153--162.]] 10.1145\/800179.810196"},{"key":"e_1_2_1_20_1","volume-title":"Proceedings of the 16th Symposium on Operating Systems Principles. 116--128","author":"Wallach D.","unstructured":"Wallach , D. , Balfanz , D. , Dean , D. , and Felten , E . 1997. Extensible security architectures for Java . In Proceedings of the 16th Symposium on Operating Systems Principles. 116--128 .]] 10.1145\/268998.266668 Wallach, D., Balfanz, D., Dean, D., and Felten, E. 1997. Extensible security architectures for Java. In Proceedings of the 16th Symposium on Operating Systems Principles. 116--128.]] 10.1145\/268998.266668"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/363516.363520"}],"container-title":["ACM Transactions on Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1034774.1034778","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1034774.1034778","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T17:23:58Z","timestamp":1750267438000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1034774.1034778"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2004,11]]},"references-count":21,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2004,11]]}},"alternative-id":["10.1145\/1034774.1034778"],"URL":"https:\/\/doi.org\/10.1145\/1034774.1034778","relation":{},"ISSN":["0164-0925","1558-4593"],"issn-type":[{"value":"0164-0925","type":"print"},{"value":"1558-4593","type":"electronic"}],"subject":[],"published":{"date-parts":[[2004,11]]},"assertion":[{"value":"2004-11-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}