{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:53:56Z","timestamp":1776891236658,"version":"3.51.2"},"reference-count":59,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"2","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":4969,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1995,4]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>We have built a portable, instrumentation-based, replay debugger for the Standard ML of New Jersey compiler. Traditional \u2018source-level\u2019 debuggers for compiled languages actually operate at machine level, which makes them complex, difficult to port, and intolerant of compiler optimization. For secure languages like ML, however, debugging support can be provided without reference to the underlying machine, by adding instrumentation to program source code before compilation. Because instrumented code is (almost) ordinary source, it can be processed by the ordinary compiler. Our debugger is thus independent from the underlying hardware and runtime system, and from the optimization strategies used by the compiler. The debugger also provides reverse execution, both as a user feature and an internal mechanism. Reverse execution is implemented using a checkpoint and replay system; checkpoints are represented primarily by first-class continuations.<\/jats:p>","DOI":"10.1017\/s0956796800001313","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:12:15Z","timestamp":1226056335000},"page":"155-200","source":"Crossref","is-referenced-by-count":28,"title":["A Debugger for Standard ML"],"prefix":"10.46298","volume":"5","author":[{"given":"Andrew","family":"Tolmach","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Andrew W.","family":"Appel","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"25203","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800001313_ref021","first-page":"112","volume-title":"Proc. ACM SIGPLAN\/SIGOPS Workshop on Parallel and Distributed Debugging","volume":"24","author":"Feldman","year":"1988"},{"key":"S0956796800001313_ref033","doi-asserted-by":"publisher","DOI":"10.1145\/73560.73574"},{"key":"S0956796800001313_ref038","first-page":"211","volume-title":"Proc. Summer USENIX Conference","author":"Linton","year":"1990"},{"key":"S0956796800001313_ref019","first-page":"163","volume-title":"18th Annual ACM Symp. on Principles of Programming Languages","author":"Duba","year":"1991"},{"key":"S0956796800001313_ref017","first-page":"125","volume-title":"Proc. SIGPLAN Conf. on Programming Language Design and Implementation","volume":"23","author":"Coutant","year":"1988"},{"key":"S0956796800001313_ref013","first-page":"208","volume-title":"Proc. ACM Conference on Lisp and Functional Programming","author":"Cardelli","year":"1984"},{"key":"S0956796800001313_ref011","unstructured":"Bowen D. , Byrd L. , Pereira F. , Pereira L. and Warren D. (1984) Prolog-20 User's Manual."},{"key":"S0956796800001313_ref008","doi-asserted-by":"publisher","DOI":"10.1145\/357233.357234"},{"key":"S0956796800001313_ref044","unstructured":"Projet Formel, INRIA-ENS (1990) Caml reference manual (version 2.6.1). Technical Report 121, INRIA."},{"key":"S0956796800001313_ref007","unstructured":"Appel A. W. and Shao Z. (1994) An Empirical and Analytic Study of Stack vs. Heap Cost for Languages with Closures, J. Functional Programming (to appear)."},{"key":"S0956796800001313_ref023","first-page":"348","volume-title":"Proc. ACM Conference on Lisp and Functional Programming","author":"Friedman","year":"1984"},{"key":"S0956796800001313_ref010","doi-asserted-by":"publisher","DOI":"10.1145\/1006147.1006185"},{"key":"S0956796800001313_ref004","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380190206"},{"key":"S0956796800001313_ref047","unstructured":"Smith B. (1982) Reflection and semantics in a procedural language. Technical Report MIT-LCS-TR-272, Massachusetts Institute of Technology, Cambridge, MA."},{"key":"S0956796800001313_ref020","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806176"},{"key":"S0956796800001313_ref057","unstructured":"Zelkowitz M. (1971) Reversible Execution as a Diagnostic Tool. PhD thesis, Cornell University."},{"key":"S0956796800001313_ref001","doi-asserted-by":"publisher","DOI":"10.1109\/52.88940"},{"key":"S0956796800001313_ref015","doi-asserted-by":"publisher","DOI":"10.1145\/115372.115324"},{"key":"S0956796800001313_ref009","first-page":"567","volume-title":"Proc. AFIPS 1969 Spring Joint Computer Conference","volume":"34","author":"Balzer","year":"1969"},{"key":"S0956796800001313_ref034","volume-title":"Programming Languages: An Interpreter-Based Approach","author":"Kamin","year":"1990"},{"key":"S0956796800001313_ref006","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-54444-5_83"},{"key":"S0956796800001313_ref049","doi-asserted-by":"publisher","DOI":"10.1145\/358746.358755"},{"key":"S0956796800001313_ref028","first-page":"18","volume-title":"Proc. ACM Conference on Lisp and Functional Programming","author":"Haynes","year":"1984"},{"key":"S0956796800001313_ref018","volume-title":"The SIMPLE code","author":"Crowley","year":"1978"},{"key":"S0956796800001313_ref012","first-page":"127","volume-title":"Proc. Logic Programming Workshop","author":"Byrd","year":"1980"},{"key":"S0956796800001313_ref026","first-page":"59","volume-title":"Proc. AFIPS Spring Joint Computer Conference","volume":"36","author":"Grishman","year":"1970"},{"key":"S0956796800001313_ref014","first-page":"82","volume-title":"Proc. 2nd Int. Conf. on Architectural Support for Programming Languages and Operating Systems","author":"Cargill","year":"1987"},{"key":"S0956796800001313_ref022","doi-asserted-by":"publisher","DOI":"10.1145\/366707.367526"},{"key":"S0956796800001313_ref024","volume-title":"Smalltalk-80: The Language and Its Implementation","author":"Goldberg","year":"1983"},{"key":"S0956796800001313_ref025","doi-asserted-by":"publisher","DOI":"10.1145\/141471.141504"},{"key":"S0956796800001313_ref016","doi-asserted-by":"crossref","first-page":"1","DOI":"10.1145\/382130.382133","article-title":"Revised4 report on the algorithmic language Scheme","volume":"IV","author":"Clinger","year":"1991","journal-title":"LISP Pointers"},{"key":"S0956796800001313_ref027","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380080202"},{"key":"S0956796800001313_ref032","unstructured":"Hudak P. and Wadler P. (1990) Report on the programming language Haskell: A non-strict, purely functional language, Version 1.0. Technical Report YALEU\/DCS\/RR-777, Yale University, Dept. of Computer Science."},{"key":"S0956796800001313_ref050","volume-title":"Interlisp Reference Manual","author":"Teitelman","year":"1978"},{"key":"S0956796800001313_ref005","volume-title":"Compiling with Continuations","author":"Appel","year":"1992"},{"key":"S0956796800001313_ref029","doi-asserted-by":"publisher","DOI":"10.1145\/357172.357173"},{"key":"S0956796800001313_ref030","first-page":"193","volume-title":"Essays in Computing Science","author":"Hoare","year":"1989"},{"key":"S0956796800001313_ref035","first-page":"161","volume-title":"Proc. Summer USENIX Conference","author":"Kaufer","year":"1988"},{"key":"S0956796800001313_ref046","unstructured":"Reppy J. H. (1990) Asynchronous signals in Standard ML. Technical Report TR 90-1144, Cornell University, Dept. of Computer Science."},{"key":"S0956796800001313_ref036","first-page":"338","volume-title":"Proc. SIGPLAN Conference on Programming Language Design and Implementation","volume":"26","author":"Kishon","year":"1991"},{"key":"S0956796800001313_ref048","volume-title":"Using GDB: A Guide to the GNU Source-Level Debugger (GDB version 4.0)","author":"Stallman","year":"1991"},{"key":"S0956796800001313_ref037","doi-asserted-by":"publisher","DOI":"10.1145\/5001.5005"},{"key":"S0956796800001313_ref040","doi-asserted-by":"crossref","first-page":"78","DOI":"10.1145\/70082.68189","volume-title":"Proc. 3rd Int. Conference on Architectural Support for Programming Languages and Operating Systems","volume":"17","author":"Mellor-Crummey","year":"1989"},{"key":"S0956796800001313_ref041","volume-title":"The Definition of Standard ML","author":"Milner","year":"1990"},{"key":"S0956796800001313_ref042","first-page":"73","volume-title":"Proc. ACM SIGPLAN Workshop on State in Programming Langauges (SIPL '93)","author":"Morrisett","year":"1993"},{"key":"S0956796800001313_ref045","volume-title":"Elements of Functional Programming","author":"Reade","year":"1989"},{"key":"S0956796800001313_ref031","first-page":"32","volume-title":"Proc. SIGPLAN'92 Conference on Programming Language Design and Implementation","volume":"27","author":"H\u00f6lzle","year":"1992"},{"key":"S0956796800001313_ref051","unstructured":"Tolmach A. P. (1992) Debugging Standard ML. PhD thesis, Princeton University. (Also Princeton Univ. Dept. of Computer Science Tech. Rep. CS-TR-378-92.)"},{"key":"S0956796800001313_ref052","doi-asserted-by":"crossref","first-page":"120","DOI":"10.1145\/122759.122770","volume-title":"Proc. ACM\/ONR Workshop on Parallel and Distributed Debugging","volume":"26","author":"Tolmach","year":"1991"},{"key":"S0956796800001313_ref053","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-15975-4_26"},{"key":"S0956796800001313_ref054","first-page":"168","volume-title":"Proc. ACM SIGSOFT\/SIGPLAN Software Engineering Symposium on Practical Software Development Environments","volume":"19","author":"Vitter","year":"1984"},{"key":"S0956796800001313_ref055","first-page":"19","volume-title":"Proc. 1980 LISP Conference","author":"Wand","year":"1980"},{"key":"S0956796800001313_ref002","volume-title":"Compilers: Principles, Techniques, and Tools","author":"Aho","year":"1986"},{"key":"S0956796800001313_ref056","first-page":"330","volume-title":"Proc. SIGPLAN Conference on Programming Language Design and Implementation","volume":"24","author":"Wilson","year":"1989"},{"key":"S0956796800001313_ref043","unstructured":"Ophel J. L. (1991) AIMLESS: A Programming Environment for ML. PhD thesis, The Australian National University."},{"key":"S0956796800001313_ref059","unstructured":"Zurawski L. W. and Johnson R. E. (1991) Debugging optimized code with expected behavior. Unpublished manuscript."},{"key":"S0956796800001313_ref039","doi-asserted-by":"crossref","first-page":"147","DOI":"10.1145\/38765.38821","volume-title":"Proc. Conf. on Object-Oriented Programming Systems, Languages, and Applications","author":"Maes","year":"1987"},{"key":"S0956796800001313_ref003","doi-asserted-by":"publisher","DOI":"10.1007\/BF01811537"},{"key":"S0956796800001313_ref058","unstructured":"Zellweger P. T. (1984) Interactive Source-level Debugging of Optimized Programs. PhD thesis, University of California, Berkeley. (Also Xerox Corporation Palo Alto Research Center Tech. Report CSL-84-5.)"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800001313","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:18:05Z","timestamp":1776889085000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800001313\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1995,4]]},"references-count":59,"journal-issue":{"issue":"2","published-print":{"date-parts":[[1995,4]]}},"alternative-id":["S0956796800001313"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800001313","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1995,4]]}}}