{"id":4321,"date":"2015-07-15T13:00:28","date_gmt":"2015-07-15T13:00:28","guid":{"rendered":"http:\/\/writeasync.net\/?p=4321"},"modified":"2015-07-15T04:15:27","modified_gmt":"2015-07-15T04:15:27","slug":"async-pasts","status":"publish","type":"post","link":"http:\/\/writeasync.net\/?p=4321","title":{"rendered":"Async pasts"},"content":{"rendered":"<p>When did asynchronous programming originate? I&#8217;m no historian, but one contender for the earliest roots of async would be <a href=\"https:\/\/en.wikipedia.org\/wiki\/Melvin_Conway\">Melvin Conway<\/a>&#8216;s <a href=\"https:\/\/en.wikipedia.org\/wiki\/Coroutine\">coroutines<\/a>. His 1963 paper <a href=\"http:\/\/www.uqac.ca\/flemieux\/PRO102\/p396-conway.pdf\">&#8220;Design of a Separable Transition-Diagram Compiler&#8221;<\/a> introduces coroutines and notes that they &#8220;can greatly simplify the conception of a program when its modules do not communicate with each other synchronously.&#8221;<\/p>\n<p>About 10 years afterward, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Pipeline_(Unix)\">Unix pipes<\/a> arrived. In some sense, pipes were the first practical asynchronous programming model, albeit at the process level. Sure enough, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Douglas_McIlroy\">Douglas McIlroy<\/a> <a href=\"http:\/\/www.princeton.edu\/~hos\/Mahoney\/expotape.htm\">cites Conway&#8217;s paper<\/a> as one source of inspiration for the idea.<\/p>\n<p>Flash forward to the 21st century and everything old is new again. C# has <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/dscyy5s0.aspx\">iterator methods<\/a>, Python has <a href=\"https:\/\/wiki.python.org\/moin\/Generators\">generators<\/a>, Ruby has <a href=\"http:\/\/www.rubyist.net\/~slagell\/ruby\/iterators.html\">iterators<\/a>, and so on, with many of these constructs forming the basic building blocks of an asynchronous programming model.<\/p>\n<p>Thanks for the inspiration, <a href=\"http:\/\/melconway.com\/\">Melvin<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When did asynchronous programming originate? I&#8217;m no historian, but one contender for the earliest roots of async would be Melvin Conway&#8216;s coroutines. His 1963 paper &#8220;Design of a Separable Transition-Diagram Compiler&#8221; introduces coroutines and notes that they &#8220;can greatly simplify&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-4321","post","type-post","status-publish","format-standard","hentry","category-async"],"_links":{"self":[{"href":"http:\/\/writeasync.net\/index.php?rest_route=\/wp\/v2\/posts\/4321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/writeasync.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/writeasync.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/writeasync.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/writeasync.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4321"}],"version-history":[{"count":0,"href":"http:\/\/writeasync.net\/index.php?rest_route=\/wp\/v2\/posts\/4321\/revisions"}],"wp:attachment":[{"href":"http:\/\/writeasync.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/writeasync.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4321"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/writeasync.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}