{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,5,24]],"date-time":"2025-05-24T07:47:00Z","timestamp":1748072820740},"reference-count":28,"publisher":"Cambridge University Press (CUP)","issue":"4","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":4786,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1995,10]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p><jats:italic>Monitoring semantics<\/jats:italic>is a formal model of program execution which captures \u2018monitoring activity\u2019 as found in profilers, tracers, debuggers, etc. Beyond its theoretical interest, this formalism provides a new methodology for implementing a large family of source-level monitoring activities for sequential deterministic programming languages. In this article we explore the use of monitoring semantics in the specification and implementation of a variety of monitors: profilers, tracers, collecting interpreters, and, most importantly, interactive source-level debuggers. Although we consider such monitors only for (both strict and non-strict) functional languages, the methodology extends easily to imperative languages, since it begins with a continuation semantics specification.<\/jats:p><jats:p>In addition, using standard partial evaluation techniques as an optimization strategy, we show that the methodology forms a practical basis for building real monitors. Our system can be optimized at two levels of specialization: specializing the interpreter with respect to a monitor specification automatically yields an instrumented interpreter; further specializing this instrumented interpreter with respect to a source program yields an instrumented program, i.e. one in which the extra code to perform monitoring has been automatically embedded into the program.<\/jats:p>","DOI":"10.1017\/s0956796800001465","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T16:11:23Z","timestamp":1226074283000},"page":"501-547","source":"Crossref","is-referenced-by-count":10,"title":["Semantics directed program execution monitoring"],"prefix":"10.1017","volume":"5","author":[{"given":"Amir","family":"Kishon","sequence":"first","affiliation":[]},{"given":"Paul","family":"Hudak","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800001465_ref008","article-title":"A denotational semantics of inheritance and its correctness","volume":"24","author":"Cook","year":"1989","journal-title":"OOPSLA 1989. SIGPLAN Notices"},{"key":"S0956796800001465_ref006","volume-title":"Partial Evaluation and Mixed Computation","author":"Bj\u00f8rner","year":"1988"},{"key":"S0956796800001465_ref004","unstructured":"Berry D. (1991) Generating Program Animators from Programming Language Semantics. PhD thesis, University of Edinburgh, June."},{"key":"S0956796800001465_ref019","doi-asserted-by":"crossref","unstructured":"Kranz D. A. , Kelsey R. , Rees J. A. , Hudak P. , Philbin J. and Adams N. I. (1986) Orbit: An optimizing compiler for Scheme. In: Proceedings of the SIGPLAN Symposium on Compiler Construction. pp. 219\u2013233, June.","DOI":"10.1145\/13310.13333"},{"key":"S0956796800001465_ref002","volume-title":"A Practical Introduction to Denotational Semantics","author":"Allison","year":"1986"},{"key":"S0956796800001465_ref023","volume-title":"Concurrent Prolog, collected papers","volume":"2","author":"Safra","year":"1989"},{"key":"S0956796800001465_ref001","volume-title":"Structure and Interpretation of Computer Programs","author":"Abelson","year":"1985"},{"key":"S0956796800001465_ref025","volume-title":"The Art of Prolog, Advanced Programming Techniques","author":"Sterling","year":"1986"},{"key":"S0956796800001465_ref016","unstructured":"Kishon A. (1992) Theory and Practice of Semantics-directed Program Execution Monitoring. PhD thesis, Yale University, May. (Also Yale Research Report YALEU\/DCS\/RR-905.)"},{"key":"S0956796800001465_ref026","first-page":"77","volume-title":"A denotational definition of the programming language Pascal","author":"Tennent","year":"1977"},{"key":"S0956796800001465_ref020","volume-title":"Realistic Compiler Generation","author":"Lee","year":"1989"},{"key":"S0956796800001465_ref007","volume-title":"Revised4 report on the algorithmic language scheme","author":"Clinger","year":"1991"},{"key":"S0956796800001465_ref010","first-page":"53","volume-title":"Lisp and Symbolic Computation","volume":"1","author":"Dybvig","year":"1988"},{"key":"S0956796800001465_ref003","doi-asserted-by":"crossref","unstructured":"Appel A. W. and Jim T. (1989) Continuation-passing, closure-passing style. In: ACM Symposium on Principles of Programming Languages. pp. 193\u2013302, January.","DOI":"10.1145\/75277.75303"},{"key":"S0956796800001465_ref009","doi-asserted-by":"crossref","unstructured":"Delisle N. M. , Menicosy D. E. and Schwarts M. D. (1984) Viewing a programming environment as a single tool. In: Proceedings of the ACM SIGSOFT\/SIGPLAN Software Engineering Symposium on Practical Software Development Environments, April. (SIGPLAN Notices, 19(5), May.)","DOI":"10.1145\/800020.808248"},{"key":"S0956796800001465_ref011","doi-asserted-by":"crossref","unstructured":"Hall C. V. and O'Donnell J. T. (1985) Debugging in a side effect free programming environment. In: Proceedings SIGPLAN Symposium on Programming Languages and Programming Environments, June.","DOI":"10.1145\/800225.806827"},{"key":"S0956796800001465_ref012","doi-asserted-by":"publisher","DOI":"10.1145\/130697.130698"},{"key":"S0956796800001465_ref013","doi-asserted-by":"crossref","DOI":"10.1145\/130697.130699","article-title":"Report on the Programming Language Haskell, A Non-strict Purely Functional Language (Version 1.2)","volume":"27","author":"Hudak","year":"1992","journal-title":"SIGPLAN Notices"},{"key":"S0956796800001465_ref015","volume-title":"Mix: a self-applicable partial evaluator for experiments in compiler generation","author":"Jones","year":"1987"},{"key":"S0956796800001465_ref027","doi-asserted-by":"crossref","unstructured":"Tolmach A. P. and Appel A. W. (1990) Debugging Standard ML without reverse engineering. In: Proceedings ACM Conference on Lisp and functional programming, June.","DOI":"10.1145\/91556.91564"},{"key":"S0956796800001465_ref018","unstructured":"Kranz D. A. (1988) ORBIT: An Optimizing Compiler for Scheme. PhD thesis, Yale University."},{"key":"S0956796800001465_ref021","volume-title":"Lisp and Symbolic Computation, 1","author":"O'Donnell","year":"1988"},{"key":"S0956796800001465_ref022","doi-asserted-by":"crossref","unstructured":"Reddy U. (1988) Objects as closures: Abstract semantics of object oriented languages. In: ACM Conference on Lisp and Functional Programming.","DOI":"10.1145\/62678.62721"},{"key":"S0956796800001465_ref024","volume-title":"Algorithmic Program Debugging","author":"Shapiro","year":"1982"},{"key":"S0956796800001465_ref028","doi-asserted-by":"publisher","DOI":"10.1007\/BF03037389"},{"key":"S0956796800001465_ref017","unstructured":"Kishon A. , Hudak P. and Consel C. (1988) Monitoring semantics: A formal framework for specifying, implementing and reasoning about execution monitors. In: Proceedings of the ACM Conference on Programming Languages Design and Implementation.ACM, June."},{"key":"S0956796800001465_ref014","doi-asserted-by":"crossref","unstructured":"Hudak P. and Young J. (1988) A collecting interpretation of expressions (without powerdomains). In: Proceedings of the ACM Symposium of Principles of Programming Languages.ACM.","DOI":"10.1145\/73560.73570"},{"key":"S0956796800001465_ref005","unstructured":"Bertotm Y. (1988) Occurrences in debugger specifications. In: Proceedings ACM Conference on Programming Languages Design and Implementation.ACM, 06."}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800001465","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2020,5,10]],"date-time":"2020-05-10T00:09:08Z","timestamp":1589069348000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800001465\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1995,10]]},"references-count":28,"journal-issue":{"issue":"4","published-print":{"date-parts":[[1995,10]]}},"alternative-id":["S0956796800001465"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800001465","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1995,10]]}}}