{"id":1570,"date":"2021-10-19T11:18:35","date_gmt":"2021-10-19T18:18:35","guid":{"rendered":"https:\/\/alarmingdevelopment.org\/?p=1570"},"modified":"2022-09-29T12:20:36","modified_gmt":"2022-09-29T19:20:36","slug":"version-control-for-structure-editing","status":"publish","type":"post","link":"https:\/\/alarmingdevelopment.org\/?p=1570","title":{"rendered":"Version Control for Structure Editing"},"content":{"rendered":"\n<p>That\u2019s the headline for my latest project (with T<a href=\"http:\/\/tomasp.net\/\">omas Petricek<\/a>), presented at <a href=\"https:\/\/2021.splashcon.org\/home\/hatra-2021#About\">HATRA<\/a>. [<a href=\"https:\/\/arxiv.org\/abs\/2110.08993\">paper<\/a>] [<a href=\"https:\/\/vimeo.com\/631461226\">recorded talk<\/a>]<\/p>\n\n\n\n<p>With this work I am finally confronting the demon cursing my work: version control. If we are to liberate programming from text we need to make structure editing work, including version control. After all, there will be limited benefit from structure editing if collaboration forces us to return to text editing. It feels like this chronic problem has been dragging me down forever. I\u2019ve spent endless effort trying to handle differencing and merging with embedded unique IDs, but I never got it fully worked out, and it remained as technical \u201cdark matter\u201d clogging all my projects. I finally had to accept that the whole approach wasn\u2019t working, and start over.<\/p>\n\n\n\n<p>I\u2019ve turned to the idea of Operational Transformation (OT), which is how Google Docs works. But OT does synchronization, not version control, so I\u2019ve repurposed and generalized it to support long-lived variants with difference inspection and manual merging. Surprisingly, it seems no one has done this before, and I had to invent a new theory.<\/p>\n\n\n\n<p>The result is \u201chigh-level\u201d version control. By observing the history of edits we can do much more intelligent version control. For example a rename refactoring is a single atomic operation that does not conflict with any other, whereas in textual VC it conflicts with every change on the same line as an instance of the name. There is also a big opportunity to simplify the conceptual model of version control, which is frankly an utter disaster in git. Perhaps version control is actually the weak point of the textual edifice, where we might be able to win a battle.<\/p>\n\n\n\n<p>The paper situates our work as reviving the \u201cimage-based\u201d programming model of Smalltalk and LISP machines and other beloved systems like HyperCard. Images combined all code and data into harmonious and habitable programming worlds. But the difficulty of collaboration and distribution were major blockers for image-based systems. Because images combine code and data, we must also deal with schema change, which we talk about in the paper. We see schema change as another overlooked benefit to structure editing to help incentivize the move from text.<\/p>\n\n\n\n<p>We have a long way to go towards that vision, but at least this paper is a concrete step. I haven\u2019t published a paper in ages. Thanks to Tomas for helping me reboot.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>That\u2019s the headline for my latest project (with Tomas Petricek), presented at HATRA. [paper] [recorded talk] With this work I am finally confronting the demon cursing my work: version control. If we are to liberate programming from text we need to make structure editing work, including version control. After all, there will be limited benefit &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/alarmingdevelopment.org\/?p=1570\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Version Control for Structure Editing&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1570","post","type-post","status-publish","format-standard","hentry","category-general"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pfEnU-pk","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/1570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1570"}],"version-history":[{"count":9,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/1570\/revisions"}],"predecessor-version":[{"id":1646,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/1570\/revisions\/1646"}],"wp:attachment":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}