{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:38Z","timestamp":1779836738577,"version":"3.53.1"},"reference-count":68,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2021,8,31]],"date-time":"2021-08-31T00:00:00Z","timestamp":1630368000000},"content-version":"unspecified","delay-in-days":242,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":["cambridge.org"],"crossmark-restriction":true},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2021]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>There is a growing interest in leveraging functional programming languages in real-time and embedded contexts. Functional languages are appealing as many are strictly typed, amenable to formal methods, have limited mutation, and have simple but powerful concurrency control mechanisms. Although there have been many recent proposals for specialized domain-specific languages for embedded and real-time systems, there has been relatively little progress on adapting more general purpose functional languages for programming embedded and real-time systems. In this paper, we present our current work on leveraging Standard ML (SML) in the embedded and real-time domains. Specifically, we detail our experiences in modifying MLton, a whole-program optimizing compiler for SML, for use in such contexts. We focus primarily on the language runtime, reworking the threading subsystem, object model, and garbage collector. We provide preliminary results over a radar-based aircraft collision detector ported to SML.<\/jats:p>","DOI":"10.1017\/s0956796821000174","type":"journal-article","created":{"date-parts":[[2021,8,31]],"date-time":"2021-08-31T09:39:41Z","timestamp":1630402781000},"update-policy":"https:\/\/doi.org\/10.1017\/policypage","source":"Crossref","is-referenced-by-count":3,"title":["Real-time MLton: A Standard ML runtime for real-time functional programs"],"prefix":"10.1017","volume":"31","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-8430-9229","authenticated-orcid":false,"given":"BHARGAV","family":"SHIVKUMAR","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"JEFFREY","family":"MURPHY","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"LUKASZ","family":"ZIAREK","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2021,8,31]]},"reference":[{"key":"S0956796821000174_ref37","doi-asserted-by":"publisher","DOI":"10.1145\/2535838.2535841"},{"key":"S0956796821000174_ref29","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380200104"},{"key":"S0956796821000174_ref24","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512547"},{"key":"S0956796821000174_ref30","unstructured":"Hawkins, T. (2010) Atom: A Synchronous Hard Real-Time EDSL for GHC. Available at: https:\/\/github.com\/tomahawkins\/atom."},{"key":"S0956796821000174_ref63","unstructured":"Steele, G. L. (1978) Rabbit: A Compiler for Scheme. Tech. rept. USA."},{"key":"S0956796821000174_ref20","unstructured":"Go-Lang. (2013) Contiguous stacks. Available at: https:\/\/docs.google.com\/document\/d\/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ\/pub."},{"key":"S0956796821000174_ref27","unstructured":"Hammond, K. , Michaelson, G. & Pointon, R. (2007) The Hume Report, Version 1.1. Available at: http:\/\/www-fp.cs.st-andrews.ac.uk\/hume\/report\/hume-report.pdf."},{"key":"S0956796821000174_ref28","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2012.01.002"},{"key":"S0956796821000174_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/362790.362798"},{"key":"S0956796821000174_ref44","unstructured":"MLton. (2012) The MLton compiler and runtime system. Available at: http:\/\/www.mlton.org."},{"key":"S0956796821000174_ref39","first-page":"257","article-title":"A methodology for designing hierarchical scheduling systems","volume":"1","author":"Lipari","year":"2005","journal-title":"J. Embedded Comput."},{"key":"S0956796821000174_ref45","unstructured":"MLton Performance. (2012) MLton performance benchmarks. Available at: http:\/\/mlton.org\/Performance."},{"key":"S0956796821000174_ref22","doi-asserted-by":"publisher","DOI":"10.1109\/2.846318"},{"key":"S0956796821000174_ref40","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-45231-8_38"},{"key":"S0956796821000174_ref64","unstructured":"Timber, Language . (2008) Timber: A Gentle Introduction. Available at: http:\/\/www.timber-lang.org\/index_gentle.html."},{"key":"S0956796821000174_ref21","unstructured":"Goldstein, S. C. (1997) Lazy Threads Compiler and Runtime Structures for Fine-Grained Parallel Programming. PhD thesis, University of California\u2013Berkeley, Berkeley, CA."},{"key":"S0956796821000174_ref67","doi-asserted-by":"publisher","DOI":"10.1145\/507635.507654"},{"key":"S0956796821000174_ref33","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/32.2.98"},{"key":"S0956796821000174_ref12","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010016816429"},{"key":"S0956796821000174_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/359642.359655"},{"key":"S0956796821000174_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/363269.363280"},{"key":"S0956796821000174_ref31","unstructured":"Henties, T. , Hunt, J. J. , Locke, D. , Nilsen, K. , Schoeberl, M. & Vitek, J. (2009) Java for safety-critical applications. In 2nd International Workshop on the Certification of Safety-Critical Software Controlled Systems (SafeCert 2009)."},{"key":"S0956796821000174_ref42","doi-asserted-by":"publisher","DOI":"10.1145\/1375634.1375637"},{"key":"S0956796821000174_ref4","doi-asserted-by":"publisher","DOI":"10.1007\/s10009-003-0114-9"},{"key":"S0956796821000174_ref17","unstructured":"Erlang. (2021) Erlang Programming language official website. Available at: http:\/\/www.erlang.org\/."},{"key":"S0956796821000174_ref38","doi-asserted-by":"publisher","DOI":"10.1145\/2930957.2930958"},{"key":"S0956796821000174_ref32","doi-asserted-by":"publisher","DOI":"10.1145\/93542.93554"},{"key":"S0956796821000174_ref35","doi-asserted-by":"publisher","DOI":"10.1145\/1620405.1620412"},{"key":"S0956796821000174_ref16","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-39197-3_7"},{"key":"S0956796821000174_ref8","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-16256-5_6"},{"key":"S0956796821000174_ref43","doi-asserted-by":"publisher","DOI":"10.7551\/mitpress\/2319.001.0001"},{"key":"S0956796821000174_ref11","unstructured":"Cheng, P. (2001) Scalable Real-Time Parallel Garbage Collection for Symmetric Multiprocessors. PhD thesis, USA. AAI3179039."},{"key":"S0956796821000174_ref36","doi-asserted-by":"publisher","DOI":"10.1109\/RTSS.2009.40"},{"key":"S0956796821000174_ref62","doi-asserted-by":"publisher","DOI":"10.1145\/2258996.2259005"},{"key":"S0956796821000174_ref49","doi-asserted-by":"publisher","DOI":"10.1145\/173262.155111"},{"key":"S0956796821000174_ref60","doi-asserted-by":"publisher","DOI":"10.1145\/1288940.1288954"},{"key":"S0956796821000174_ref41","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-47884-1_3"},{"key":"S0956796821000174_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/780732.780744"},{"key":"S0956796821000174_ref53","unstructured":"RapiTime. (2021) Rapita Systems Ltd homepage. Available at: https:\/\/www.rapitasystems.com\/."},{"key":"S0956796821000174_ref3","doi-asserted-by":"publisher","DOI":"10.1017\/S095679680000157X"},{"key":"S0956796821000174_ref2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-18317-5_17"},{"key":"S0956796821000174_ref52","doi-asserted-by":"publisher","DOI":"10.1145\/1806596.1806615"},{"key":"S0956796821000174_ref56","doi-asserted-by":"publisher","DOI":"10.1145\/800194.805852"},{"key":"S0956796821000174_ref59","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-39197-3_8"},{"key":"S0956796821000174_ref50","doi-asserted-by":"publisher","DOI":"10.1145\/1292520.1292525"},{"key":"S0956796821000174_ref46","unstructured":"Morsing, D. (2014) How Stacks are Handled in Go. Available at: https:\/\/blog.cloudflare.com\/how-stacks-are-handled-in-go\/."},{"key":"S0956796821000174_ref66","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796898003086"},{"key":"S0956796821000174_ref13","doi-asserted-by":"publisher","DOI":"10.1145\/512429.512433"},{"key":"S0956796821000174_ref26","unstructured":"Hammond, K. (2003) Is it time for real-time functional programming? In Revised Selected Papers from the Fourth Symposium on Trends in Functional Programming, TFP 2003, Edinburgh, UK, 11\u201312 September 2003, Gilmore, S. (ed), vol. 4. Intellect, pp. 1\u201318."},{"key":"S0956796821000174_ref15","unstructured":"Elsman, M. (1999) Program Modules, Separate Compilation, and Intermodule Optimisation. DIKU."},{"key":"S0956796821000174_ref5","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.09.002"},{"key":"S0956796821000174_ref19","doi-asserted-by":"publisher","DOI":"10.1145\/381694.378815"},{"key":"S0956796821000174_ref1","unstructured":"Anderson, B. (2013) Abandoning segmented stacks in Rust. Available at: https:\/\/mail.mozilla.org\/pipermail\/rust-dev\/2013-November\/006314.html."},{"key":"S0956796821000174_ref55","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511574962"},{"key":"S0956796821000174_ref68","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993572"},{"key":"S0956796821000174_ref7","doi-asserted-by":"publisher","DOI":"10.1109\/REAL.1988.51108"},{"key":"S0956796821000174_ref58","doi-asserted-by":"publisher","DOI":"10.1145\/53990.54007"},{"key":"S0956796821000174_ref9","doi-asserted-by":"publisher","DOI":"10.1145\/249069.231395"},{"key":"S0956796821000174_ref34","doi-asserted-by":"publisher","DOI":"10.1201\/9781420082807"},{"key":"S0956796821000174_ref25","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45361-X_8"},{"key":"S0956796821000174_ref47","doi-asserted-by":"publisher","DOI":"10.1145\/3236790"},{"key":"S0956796821000174_ref54","doi-asserted-by":"publisher","DOI":"10.1145\/1113830.1113833"},{"key":"S0956796821000174_ref23","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512547"},{"key":"S0956796821000174_ref48","doi-asserted-by":"publisher","DOI":"10.1002\/cpe.4902"},{"key":"S0956796821000174_ref57","doi-asserted-by":"publisher","DOI":"10.1145\/363534.363546"},{"key":"S0956796821000174_ref65","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1996.2613"},{"key":"S0956796821000174_ref51","doi-asserted-by":"publisher","DOI":"10.1145\/1755913.1755922"},{"key":"S0956796821000174_ref61","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796814000161"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796821000174","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:12Z","timestamp":1779834972000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796821000174\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021]]},"references-count":68,"alternative-id":["S0956796821000174"],"URL":"https:\/\/doi.org\/10.1017\/s0956796821000174","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2021]]},"assertion":[{"value":"\u00a9 CSIRO and The Author(s), 2021. Published by Cambridge University Press.","name":"copyright","label":"Copyright","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}}],"article-number":"e19"}}