{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T11:07:55Z","timestamp":1784200075161,"version":"3.55.0"},"reference-count":68,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","license":[{"start":{"date-parts":[[2025,6,13]],"date-time":"2025-06-13T00:00:00Z","timestamp":1749772800000},"content-version":"vor","delay-in-days":3,"URL":"http:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["FW-HTF 2129008,CA-HDR 2033558"],"award-info":[{"award-number":["FW-HTF 2129008,CA-HDR 2033558"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,6,10]]},"abstract":"<jats:p>\n                    Direct manipulation programming gives users a way to write programs without directly writing code, by using the familiar GUI-style interactions they know from direct manipulation interfaces. To date, direct manipulation programming systems have relied on two core components: (1) a\n                    <jats:italic toggle=\"yes\">patch<\/jats:italic>\n                    component, which modifies the program based on a GUI interaction, and (2) a\n                    <jats:italic toggle=\"yes\">forward evaluator<\/jats:italic>\n                    , which executes the modified program to produce an updated program output. This architecture has worked for developing short-running programs\u2014i.e., programs that reliably execute in &lt;1 second\u2014generating outputs such as SVG and HTML documents. However, direct manipulation programming has not yet been applied to long-running programs (e.g., data visualization, mapping), perhaps because executing such programs in response to every GUI interaction would mean crossing outside of interactive speeds. We propose extending direct manipulation programming to long-running programs by pairing a standard\n                    <jats:italic toggle=\"yes\">patch<\/jats:italic>\n                    component (\n                    <jats:bold>patch<\/jats:bold>\n                    ) with a corresponding\n                    <jats:italic toggle=\"yes\">reconciliation<\/jats:italic>\n                    component (\n                    <jats:bold>recon<\/jats:bold>\n                    ).\n                    <jats:bold>recon<\/jats:bold>\n                    directly updates the program\n                    <jats:italic toggle=\"yes\">output<\/jats:italic>\n                    in response to a GUI interaction, obviating the need for forward evaluation.\n                  <\/jats:p>\n                  <jats:p>\n                    We introduce corresponding\n                    <jats:bold>patch<\/jats:bold>\n                    and\n                    <jats:bold>recon<\/jats:bold>\n                    procedures for the domain of geospatial data visualization and prove them sound\u2014that is, we show that the output produced by\n                    <jats:bold>recon<\/jats:bold>\n                    is identical to the output produced by forward-evaluating a\n                    <jats:bold>patch<\/jats:bold>\n                    -modified program.\n                    <jats:bold>recon<\/jats:bold>\n                    can operate both incrementally and in parallel with\n                    <jats:bold>patch<\/jats:bold>\n                    . Our implementation of our\n                    <jats:bold>patch<\/jats:bold>\n                    -\n                    <jats:bold>recon<\/jats:bold>\n                    instantiation achieves a 2.92\u00d7 median reduction in interface latency compared to forward evaluation on a suite of real-world geospatial visualization tasks. Looking forward, our results suggest that\n                    <jats:italic toggle=\"yes\">patch-reconciliation correspondence<\/jats:italic>\n                    offers a promising pathway for extending direct manipulation programming to domains involving large-scale computation.\n                  <\/jats:p>","DOI":"10.1145\/3729278","type":"journal-article","created":{"date-parts":[[2025,6,13]],"date-time":"2025-06-13T16:02:27Z","timestamp":1749830547000},"page":"699-724","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Fast Direct Manipulation Programming with Patch-Reconciliation Correspondence"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-9462-2123","authenticated-orcid":false,"given":"Parker","family":"Ziegler","sequence":"first","affiliation":[{"name":"University of California at Berkeley, Berkeley, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-2311-1873","authenticated-orcid":false,"given":"Justin","family":"Lubin","sequence":"additional","affiliation":[{"name":"University of California at Berkeley, Berkeley, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-0557-3580","authenticated-orcid":false,"given":"Sarah E.","family":"Chasins","sequence":"additional","affiliation":[{"name":"University of California at Berkeley, Berkeley, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,6,13]]},"reference":[{"key":"e_1_3_2_2_2","doi-asserted-by":"publisher","DOI":"10.1145\/3514221.3517889"},{"key":"e_1_3_2_3_2","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-28641-4_22"},{"key":"e_1_3_2_4_2","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ESA.2020.2"},{"key":"e_1_3_2_5_2","doi-asserted-by":"publisher","DOI":"10.1145\/1186632.1186634"},{"key":"e_1_3_2_6_2","unstructured":"Adobe. 2024. Adobe Illustrator. https:\/\/www.adobe.com\/products\/illustrator.html. Accessed: 2024-11-14."},{"key":"e_1_3_2_7_2","unstructured":"Adobe. 2024. Adobe Photoshop. https:\/\/www.adobe.com\/products\/photoshop.html. Accessed: 2024-11-12."},{"key":"e_1_3_2_8_2","doi-asserted-by":"publisher","DOI":"10.1145\/3409964.3461799"},{"key":"e_1_3_2_9_2","doi-asserted-by":"publisher","DOI":"10.1145\/74334.74347"},{"key":"e_1_3_2_10_2","doi-asserted-by":"publisher","DOI":"10.1145\/603867.603884"},{"key":"e_1_3_2_11_2","doi-asserted-by":"publisher","DOI":"10.1145\/319628.319634"},{"key":"e_1_3_2_12_2","doi-asserted-by":"publisher","DOI":"10.1145\/1328438.1328487"},{"key":"e_1_3_2_13_2","doi-asserted-by":"publisher","DOI":"10.1145\/1142351.1142399"},{"key":"e_1_3_2_14_2","doi-asserted-by":"publisher","DOI":"10.1145\/2628136.2628150"},{"key":"e_1_3_2_15_2","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908103"},{"key":"e_1_3_2_16_2","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462161"},{"key":"e_1_3_2_17_2","doi-asserted-by":"publisher","DOI":"10.1145\/567532.567544"},{"key":"e_1_3_2_18_2","unstructured":"MDN Web Docs. 2024. Performance \u2013 Web APIs. https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Performance. Accessed: 2024-10-09."},{"key":"e_1_3_2_19_2","doi-asserted-by":"publisher","DOI":"10.1145\/258948.258973"},{"key":"e_1_3_2_20_2","unstructured":"Facebook. 2024. React. https:\/\/react.dev\/. Accessed: 2024-09-24."},{"key":"e_1_3_2_21_2","unstructured":"Facebook. 2024. Virtual DOM and Internals. https:\/\/legacy.reactjs.org\/docs\/faq-internals.html. Accessed: 2024-11-13."},{"key":"e_1_3_2_22_2","unstructured":"Figma. 2024. Figma. https:\/\/figma.com\/. Accessed: 2024-11-12."},{"key":"e_1_3_2_23_2","doi-asserted-by":"publisher","DOI":"10.1145\/1232420.1232424"},{"key":"e_1_3_2_24_2","doi-asserted-by":"publisher","DOI":"10.1145\/2559206.2581138"},{"key":"e_1_3_2_25_2","doi-asserted-by":"publisher","DOI":"10.1145\/223784.223849"},{"key":"e_1_3_2_26_2","doi-asserted-by":"publisher","DOI":"10.7551\/mitpress\/4472.001.0001"},{"key":"e_1_3_2_27_2","doi-asserted-by":"publisher","DOI":"10.1145\/170035.170066"},{"key":"e_1_3_2_28_2","doi-asserted-by":"publisher","DOI":"10.1145\/1142473.1142560"},{"key":"e_1_3_2_29_2","unstructured":"Rich Harris and Svelte Contributors. 2024. Svelte. https:\/\/svelte.dev\/. Accessed: 2024-09-24."},{"key":"e_1_3_2_30_2","doi-asserted-by":"publisher","DOI":"10.1145\/2984511.2984575"},{"key":"e_1_3_2_31_2","doi-asserted-by":"publisher","DOI":"10.1145\/3332165.3347925"},{"key":"e_1_3_2_32_2","doi-asserted-by":"publisher","DOI":"10.1145\/3180155.3180165"},{"key":"e_1_3_2_33_2","doi-asserted-by":"publisher","DOI":"10.1145\/3025453.3025927"},{"key":"e_1_3_2_34_2","doi-asserted-by":"publisher","DOI":"10.1145\/800229.806956"},{"key":"e_1_3_2_35_2","doi-asserted-by":"publisher","DOI":"10.1145\/3472749.3474804"},{"key":"e_1_3_2_36_2","unstructured":"MapLibre. 2024. MapLibre GL JS. https:\/\/maplibre.org\/maplibre-gl-js\/docs\/. Accessed: 2023-04-05."},{"key":"e_1_3_2_37_2","doi-asserted-by":"publisher","DOI":"10.1145\/2784731.2784750"},{"key":"e_1_3_2_38_2","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-89884-1_2"},{"key":"e_1_3_2_39_2","doi-asserted-by":"publisher","DOI":"10.1145\/3276497"},{"key":"e_1_3_2_40_2","doi-asserted-by":"publisher","DOI":"10.1109\/TVCG.2022.3209460"},{"key":"e_1_3_2_41_2","unstructured":"Mermaid Contributors. 2025. Mermaid \u2014 Diagramming and Charting Tool. https:\/\/mermaid.js.org\/. Accessed: 2025-03-23."},{"key":"e_1_3_2_42_2","unstructured":"Microsoft. 2024. Playwright. https:\/\/playwright.dev\/. Accessed: 2024-10-09."},{"key":"e_1_3_2_43_2","doi-asserted-by":"publisher","DOI":"10.1007\/s10009-009-0124-3"},{"key":"e_1_3_2_44_2","doi-asserted-by":"publisher","DOI":"10.1145\/3453483.3454059"},{"key":"e_1_3_2_45_2","doi-asserted-by":"publisher","DOI":"10.1145\/2543728.2543737"},{"key":"e_1_3_2_46_2","doi-asserted-by":"publisher","DOI":"10.1145\/318593.318629"},{"key":"e_1_3_2_47_2","doi-asserted-by":"publisher","DOI":"10.1145\/2986012.2986022"},{"key":"e_1_3_2_48_2","doi-asserted-by":"publisher","DOI":"10.1145\/502874.502889"},{"key":"e_1_3_2_49_2","doi-asserted-by":"publisher","DOI":"10.1145\/1069774.1069785"},{"key":"e_1_3_2_50_2","doi-asserted-by":"publisher","DOI":"10.1007\/11603023_15"},{"key":"e_1_3_2_51_2","doi-asserted-by":"publisher","DOI":"10.1007\/11799573_7"},{"key":"e_1_3_2_52_2","doi-asserted-by":"publisher","DOI":"10.1109\/TVCG.2016.2599030"},{"key":"e_1_3_2_53_2","doi-asserted-by":"publisher","DOI":"10.1145\/2642918.2647360"},{"key":"e_1_3_2_54_2","volume-title":"Transmorphic: Mapping Direct Manipulation to Source Code Transformations","author":"Schreiber R.","year":"2017","unstructured":"R. Schreiber, R. Krahn, D.H.H. Ingalls, and R. Hirschfeld. 2017. Transmorphic: Mapping Direct Manipulation to Source Code Transformations. Universit\u00e4tsverlag Potsdam, Potsdam, Germany. https:\/\/books.google.com\/books?id=88RADgAAQBAJ"},{"key":"e_1_3_2_55_2","volume-title":"LIVE Workshop","author":"Schuster Christopher","year":"2016","unstructured":"Christopher Schuster and Cormac Flanagan. 2016. Live Programming by Example: Using Direct Manipulation for Live Program Synthesis. In LIVE Workshop. Rome, Italy."},{"key":"e_1_3_2_56_2","doi-asserted-by":"publisher","DOI":"10.1145\/502874.502887"},{"key":"e_1_3_2_57_2","unstructured":"Samyukta Sherugar and Raluca Budiu. 2016. Direct Manipulation: Definition. https:\/\/www.nngroup.com\/articles\/direct-manipulation. Accessed: 2024-11-14."},{"key":"e_1_3_2_58_2","doi-asserted-by":"publisher","DOI":"10.1109\/MC.1983.1654471"},{"key":"e_1_3_2_59_2","doi-asserted-by":"publisher","DOI":"10.1145\/244795.244799"},{"key":"e_1_3_2_60_2","unstructured":"Vega Contributors. 2025. Vega \u2014 A Visualization Grammar. https:\/\/vega.github.io\/vega\/about\/. Accessed: 2025-03-23."},{"key":"e_1_3_2_61_2","unstructured":"Vega-Lite Contributors. 2025. Vega-Lite \u2014 A High-Level Grammar of Interactive Graphics. https:\/\/vega.github.io\/vega-lite\/. Accessed: 2025-03-23."},{"key":"e_1_3_2_62_2","doi-asserted-by":"publisher","DOI":"10.1145\/1480881.1480904"},{"key":"e_1_3_2_63_2","doi-asserted-by":"publisher","DOI":"10.1007\/s10703-023-00436-9"},{"key":"e_1_3_2_64_2","doi-asserted-by":"publisher","DOI":"10.1145\/502949.502888"},{"key":"e_1_3_2_65_2","doi-asserted-by":"publisher","DOI":"10.1145\/3586035"},{"key":"e_1_3_2_66_2","doi-asserted-by":"publisher","DOI":"10.1145\/3510003.3510195"},{"key":"e_1_3_2_67_2","doi-asserted-by":"publisher","DOI":"10.1145\/3632883"},{"key":"e_1_3_2_68_2","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.15047320"},{"key":"e_1_3_2_69_2","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.15079881"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3729278","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3729278","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:09:28Z","timestamp":1784196568000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3729278"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,10]]},"references-count":68,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2025,6,10]]}},"alternative-id":["10.1145\/3729278"],"URL":"https:\/\/doi.org\/10.1145\/3729278","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,10]]},"assertion":[{"value":"2024-11-15","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-03-06","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-06-13","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}