{"id":222,"date":"2009-04-27T12:04:01","date_gmt":"2009-04-27T17:04:01","guid":{"rendered":"http:\/\/alarmingdevelopment.org\/?p=222"},"modified":"2009-04-27T12:04:01","modified_gmt":"2009-04-27T17:04:01","slug":"the-summer-of-code","status":"publish","type":"post","link":"https:\/\/alarmingdevelopment.org\/?p=222","title":{"rendered":"The Summer of Code"},"content":{"rendered":"<p>The time has come to stop writing papers and start releasing code.<br \/>\n<!--more--><br \/>\nThis last paper is a turning point. I now know enough to start building something more solid than a demo. The fundamental problem of mutable state and effects has been blocking me for years, but now I finally have an approach that fits with my other ideas. I had a sort of monadic approach in Subtext 1 but it just wasn&#8217;t good enough.<\/p>\n<p>The other breakthrough for me is syntax. The paper seemed to present a textual programming language, but that was an artifice. I have come up with a syntax that is IDE-equivalent, isomorphic with IDE operations. Yet it looks like code from a distance. I think I have found where syntax belongs: in the IDE, and only in the IDE. The keyboard is a very efficient input device, so having a way to type in syntax is effective. Likewise we have highly developed mental skills for reading and understanding grammatical text. I am using text as a UI mechanism, not as a representation. The internal representation is still in terms of semantic data structures as in Subtext, and more specifically, as <em>first-class differences<\/em> between structures. Text is ephemeral, not <em>the source<\/em>. The biggest difference is revealed in names &#8211; they can be ambiguous, and it is even possible to refer to anonymous structures. Humans are really good at disambiguating by context. Computers aren&#8217;t, so the IDE will ask you to clarify ambiguous names when you enter them. There are no source files, and no compiler, only an IDE on top of a persistent data model, yet you can still read and write code textually. As I said in the conclusion of the paper, it is important to satisfy both verbal and visual thinkers.<\/p>\n<p>The other win with this treatment of syntax is that it lets me decouple the IDE from the interpreter. My next step will be an interpreter with a textual REPL, as in the paper. I think of it like the console inside many games: an internal hacker&#8217;s interface. I will still need to build a fancy IDE to do cool demos. But I won&#8217;t need an IDE to play with the interpreter, and I can get it out faster.<\/p>\n<p>I hope a working prototype that other people can play with will open up new avenues for communicating and collaborating. That is what people have been telling me here for years, but now I am finally ready.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The time has come to stop writing papers and start releasing code.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3,1],"tags":[],"class_list":["post-222","post","type-post","status-publish","format-standard","hentry","category-announcements","category-general"],"jetpack_shortlink":"https:\/\/wp.me\/pfEnU-3A","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/222","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=222"}],"version-history":[{"count":6,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/222\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/222\/revisions\/228"}],"wp:attachment":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}