{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,6]],"date-time":"2025-11-06T20:04:37Z","timestamp":1762459477617,"version":"3.41.0"},"reference-count":63,"publisher":"Association for Computing Machinery (ACM)","issue":"3","license":[{"start":{"date-parts":[[2017,5,26]],"date-time":"2017-05-26T00:00:00Z","timestamp":1495756800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"name":"Ateneo\/CSP Project SALT"},{"name":"MIUR PRIN CINA"},{"name":"University of Padova under the PRAT projects BECOM and ANCORE"},{"name":"ICT COST Action IC1201 BETTY"},{"name":"RS13MO12 DART"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Program. Lang. Syst."],"published-print":{"date-parts":[[2017,9,30]]},"abstract":"<jats:p>We introduce a novel approach to typestate-oriented programming based on the chemical metaphor: state and operations on objects are molecules of messages, and state transformations are chemical reactions. This approach allows us to investigate typestate in an inherently concurrent setting, whereby objects can be accessed and modified concurrently by several processes, each potentially changing only part of their state. We introduce a simple behavioral type theory to express in a uniform way both the private and the public interfaces of objects; describe and enforce structured object protocols consisting of possibilities, prohibitions, and obligations; and control object sharing.<\/jats:p>","DOI":"10.1145\/3064849","type":"journal-article","created":{"date-parts":[[2017,5,31]],"date-time":"2017-05-31T19:32:40Z","timestamp":1496259160000},"page":"1-45","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":6,"title":["The Chemical Approach to Typestate-Oriented Programming"],"prefix":"10.1145","volume":"39","author":[{"given":"Silvia","family":"Crafa","sequence":"first","affiliation":[{"name":"Universit\u00e0 di Padova, Padova, Italy"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-9097-1297","authenticated-orcid":false,"given":"Luca","family":"Padovani","sequence":"additional","affiliation":[{"name":"Universit\u00e0 di Torino, Torino, Italy"}]}],"member":"320","published-online":{"date-parts":[[2017,5,26]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.5555\/7929"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/1639950.1640073"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.5555\/2032497.2032501"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/1018203.1018205"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(92)90185-I"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027.1297050"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/321239.321249"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-33125-1_14"},{"key":"e_1_2_1_9_1","volume-title":"Proceedings of 30th European Conference on Object-Oriented Programming (ECOOP\u201916)","author":"Castegren Elias","year":"2016","unstructured":"Elias Castegren and Tobias Wrigstad. 2016. Reference capabilities for concurrency control. In Proceedings of 30th European Conference on Object-Oriented Programming (ECOOP\u201916). 5:1--5:26."},{"volume-title":"Regular Algebra and Finite Machines. William Clowes 8 Sons Ltd","author":"Conway John","key":"e_1_2_1_10_1","unstructured":"John Conway. 1971. Regular Algebra and Finite Machines. William Clowes 8 Sons Ltd, London, UK."},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0960129514000188"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(83)90059-2"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814270.2814287"},{"key":"e_1_2_1_14_1","volume-title":"Retrieved","author":"Crafa Silvia","year":"2017","unstructured":"Silvia Crafa and Luca Padovani. 2017. CobaltBlue. Retrieved April 13, 2017, from http:\/\/www.di.unito.it\/&sim;padovani\/Software\/CobaltBlue\/index.html."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1007\/s00236-008-0079-y"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2370776.2370794"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491509.2491519"},{"key":"e_1_2_1_18_1","series-title":"Lecture Notes in Computer Science","volume-title":"ECOOP 2004\u2014Object-Oriented Programming","author":"DeLine Robert","unstructured":"Robert DeLine and Manuel F\u00e4hndrich. 2004. Typestates for objects. In ECOOP 2004\u2014Object-Oriented Programming. Lecture Notes in Computer Science, Vol. 3086. Springer, 465--490."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.5555\/646158.680007"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512532"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237805"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.5555\/647424.725795"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.5555\/646732.703872"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1016\/S1567-8326(03)00040-7"},{"key":"e_1_2_1_25_1","volume-title":"Luc Maranget, and Alan Schmitt.","author":"Fournet C\u00e9dric","year":"2003","unstructured":"C\u00e9dric Fournet, Fabrice Le Fessant, Luc Maranget, and Alan Schmitt. 2003b. JoCaml: A language for concurrent distributed and mobile programming. In Advanced Functional Programming. Lecture Notes in Computer Science, Vol. 2638. Springer, 129--158."},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2629609"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796809990268"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/1706299.1706335"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.5555\/1788954.1788963"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1016\/0167-6423(87)90035-9"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1081706.1081713"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.5555\/1624775.1624804"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.5555\/646728.703349"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2827695"},{"key":"e_1_2_1_35_1","series-title":"Lecture Notes in Computer Science","volume-title":"Fundamental Approaches to Software Engineering","author":"Hu Raymond","unstructured":"Raymond Hu and Nobuko Yoshida. 2016. Hybrid session verification through endpoint API generation. In Fundamental Approaches to Software Engineering. Lecture Notes in Computer Science, Vol. 9633. Springer, 401--418."},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","unstructured":"Hans H\u00fcttel Ivan Lanese Vasco T. Vasconcelos Lu\u00eds Caires Marco Carbone Pierre-Malo Deni\u00e9lou Dimitris Mostrous et al. 2016. Foundations of session types and behavioural contracts. ACM Computing Surveys 49 1 3:1--3:36. 10.1145\/2873052","DOI":"10.1145\/2873052"},{"key":"e_1_2_1_37_1","series-title":"Lecture Notes in Computer Science","volume-title":"Advances in Computer Systems Architecture","author":"Itzstein G. Stewart Von","unstructured":"G. Stewart Von Itzstein and Mark Jasiunas. 2003. On implementing high level concurrency in Java. In Advances in Computer Systems Architecture. Lecture Notes in Computer Science, Vol. 2823. Springer, 151--165."},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993547"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/330249.330251"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/2967973.2968595"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(04)00143-4"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10515-010-0063-y"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/248052.248106"},{"key":"e_1_2_1_44_1","volume-title":"Retrieved","author":"Research Microsoft","year":"2004","unstructured":"Microsoft Research. 2004. Comega. Retrieved April 13, 2017, from https:\/\/www.microsoft.com\/en-us\/research\/project\/comega\/."},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","unstructured":"Elie Najm Abdelkrim Nimour and Jean-Bernard Stefani. 1999. Guaranteeing liveness in an object calculus through behavioural typing. In Proceedings of the Joint International Conference on Formal Description Techniques for Distributed Systems and Communication Protocols (FORTE\u201999) and Protocol Specification Testing and Verification (PSTV\u201999) Vol. 156. 203--221.","DOI":"10.5555\/646217.682002"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/165854.167976"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/2603088.2603116"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.5555\/2022067.2022086"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-13414-2_5"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0096-0551(01)00019-4"},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","DOI":"10.1002\/cpe.570"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.5555\/2372311.2372313"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.5555\/646735.701617"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-69611-7_17"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1145\/1449764.1449770"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.5555\/559050"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/1639950.1640060"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/2543920"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1986.6312929"},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2048066.2048122"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/2048066.2048111"},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.1017\/S095679681400001X"},{"key":"e_1_2_1_64_1","doi-asserted-by":"publisher","DOI":"10.1145\/2688500.2688545"}],"container-title":["ACM Transactions on Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3064849","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3064849","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:36:41Z","timestamp":1750217801000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3064849"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,5,26]]},"references-count":63,"journal-issue":{"issue":"3","published-print":{"date-parts":[[2017,9,30]]}},"alternative-id":["10.1145\/3064849"],"URL":"https:\/\/doi.org\/10.1145\/3064849","relation":{},"ISSN":["0164-0925","1558-4593"],"issn-type":[{"type":"print","value":"0164-0925"},{"type":"electronic","value":"1558-4593"}],"subject":[],"published":{"date-parts":[[2017,5,26]]},"assertion":[{"value":"2016-03-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2017-03-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2017-05-26","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}