{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:06:04Z","timestamp":1779836764640,"version":"3.53.1"},"reference-count":28,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2022,12,22]],"date-time":"2022-12-22T00:00:00Z","timestamp":1671667200000},"content-version":"unspecified","delay-in-days":355,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["cambridge.org"],"crossmark-restriction":true},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2022]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>In this paper, we introduce a tiered-priority scheme for a synchronous message-passing language with support for selective communication and first-class communication protocols. Crucially, our scheme allows higher priority threads to communicate with lower priority threads, providing the ability to express programs that would be rejected by classic priority mechanisms that disallow any (potentially) blocking interactions between threads of differing priorities. We formalize our scheme in a novel semantic framework featuring a collection of actions to represent possible communications. Utilizing our formalism, we prove several important and desirable properties of our priority scheme. We also provide a prototype implementation of our tiered-priority scheme capable of expressing Concurrent ML and built in the MLton SML compiler and runtime. We evaluate the viability of our implementation through three case studies: a prioritized buyer-seller protocol and predictable shutdown mechanisms in the Swerve web server and eXene windowing toolkit. Our experiments show that priority can be easily added to existing CML programs without degrading performance. Our system exhibits negligible overheads on more modest workloads.<\/jats:p>","DOI":"10.1017\/s0956796822000119","type":"journal-article","created":{"date-parts":[[2022,12,22]],"date-time":"2022-12-22T02:30:05Z","timestamp":1671676205000},"update-policy":"https:\/\/doi.org\/10.1017\/policypage","source":"Crossref","is-referenced-by-count":0,"title":["Send to me first: Priority in synchronous message-passing"],"prefix":"10.1017","volume":"32","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-3961-7118","authenticated-orcid":false,"given":"CHENG-EN","family":"CHUANG","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"GRANT","family":"IRACI","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":[[2022,12,22]]},"reference":[{"key":"S0956796822000119_ref6","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006916"},{"key":"S0956796822000119_ref27","unstructured":"Weisstein, E. W. Random Walk\u20131-Dimensional. From MathWorld\u2013A Wolfram Web Resource. Accessed March 17, 2022. Available at: https:\/\/mathworld.wolfram.com\/RandomWalk1-Dimensional.html"},{"key":"S0956796822000119_ref7","doi-asserted-by":"publisher","DOI":"10.1145\/1411204.1411222"},{"key":"S0956796822000119_ref14","volume-title":"The Rust Programming Language","author":"Klabnik","year":"2020"},{"key":"S0956796822000119_ref20","volume-title":"Concurrent Programming in ML","author":"Reppy","year":"2007"},{"key":"S0956796822000119_ref10","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796810000201"},{"key":"S0956796822000119_ref16","doi-asserted-by":"publisher","DOI":"10.7551\/mitpress\/2319.001.0001"},{"key":"S0956796822000119_ref8","doi-asserted-by":"publisher","DOI":"10.1109\/ISADS.2001.917389"},{"key":"S0956796822000119_ref4","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-67438-0_3"},{"key":"S0956796822000119_ref9","doi-asserted-by":"publisher","DOI":"10.1145\/996841.996849"},{"key":"S0956796822000119_ref11","unstructured":"Gansner, E. R. & Reppy, J. H. (1993) A Multi-Threaded Higher-Order User Interface Toolkit. User interface software."},{"key":"S0956796822000119_ref21","doi-asserted-by":"publisher","DOI":"10.1145\/507635.507655"},{"key":"S0956796822000119_ref12","unstructured":"Gerrand, A. (2010) Share Memory By Communicating. Accessed May 26, 2021. Available at: https:\/\/go.dev\/blog\/codelab-share"},{"key":"S0956796822000119_ref24","unstructured":"The Racket Reference (2019)."},{"key":"S0956796822000119_ref25","unstructured":"Using Binder IPC (2020)."},{"key":"S0956796822000119_ref15","doi-asserted-by":"publisher","DOI":"10.1145\/358818.358824"},{"key":"S0956796822000119_ref3","doi-asserted-by":"publisher","DOI":"10.1145\/1596550.1596589"},{"key":"S0956796822000119_ref19","doi-asserted-by":"publisher","DOI":"10.1145\/113445.113470"},{"key":"S0956796822000119_ref23","doi-asserted-by":"publisher","DOI":"10.1145\/800225.806844"},{"key":"S0956796822000119_ref13","doi-asserted-by":"publisher","DOI":"10.1016\/j.tcs.2008.09.019"},{"key":"S0956796822000119_ref17","unstructured":"Mueller, F. (1993) A Library Implementation of POSIX Threads under UNIX. USENIX Winter."},{"key":"S0956796822000119_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/3236790"},{"key":"S0956796822000119_ref22","unstructured":"Shipman, A. L. (2002) Unix System Programming with Standard ML. Accessed May 26, 2021. Available at: http:\/\/mlton.org\/References.attachments\/Shipman02.pdf"},{"key":"S0956796822000119_ref28","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993572"},{"key":"S0956796822000119_ref5","doi-asserted-by":"publisher","DOI":"10.1109\/MPIDC.1996.534113"},{"key":"S0956796822000119_ref26","first-page":"583","article-title":"Typing the behavior of software components using session types","volume":"73","author":"Vallecillo","year":"2006","journal-title":"Fundam. Inf."},{"key":"S0956796822000119_ref2","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4614-0676-1"},{"key":"S0956796822000119_ref1","volume-title":"Concurrent Programming in Erlang","author":"Armstrong","year":"1996"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796822000119","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:59Z","timestamp":1779835019000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796822000119\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022]]},"references-count":28,"alternative-id":["S0956796822000119"],"URL":"https:\/\/doi.org\/10.1017\/s0956796822000119","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2022]]},"assertion":[{"value":"\u00a9 The Author(s), 2022. Published by Cambridge University Press","name":"copyright","label":"Copyright","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}},{"value":"This is an Open Access article, distributed under the terms of the Creative Commons Attribution licence (https:\/\/creativecommons.org\/licenses\/by\/4.0\/), which permits unrestricted re-use, distribution and reproduction, provided the original article is properly cited.","name":"license","label":"License","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}},{"value":"This content has been made available to all.","name":"free","label":"Free to read"}],"article-number":"e16"}}