{"id":13630,"date":"2016-02-19T13:58:10","date_gmt":"2016-02-19T18:58:10","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=13630"},"modified":"2016-02-19T22:03:03","modified_gmt":"2016-02-20T03:03:03","slug":"not-too-late-to-change","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2016\/02\/19\/not-too-late-to-change\/","title":{"rendered":"Not Too Late to Change"},"content":{"rendered":"<p><a href=\"https:\/\/twitter.com\/siracusa\/status\/699255050082844673\">John Siracusa<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/siracusa\/status\/699255050082844673\"><p>As you watch the churn in the Swift language and the many source-incompatible changes, remember stories like this.<\/p><\/blockquote>\n\n<p><a href=\"http:\/\/www.lysator.liu.se\/c\/dmr-on-or.html\">Dennis Ritchie<\/a>, on C:<\/p>\n<blockquote cite=\"http:\/\/www.lysator.liu.se\/c\/dmr-on-or.html\"><p>In retrospect it would have been better to go ahead and change the precedence\nof <code>&amp;<\/code> to higher than<code> ==<\/code> but it seemed safer just to split <code>&amp;<\/code> and <code>&amp;&amp;<\/code>\nwithout moving <code>&amp;<\/code> past an existing operator. (After all, we had several\nhundred kilobytes of source code, and maybe 3 installations....)<\/p><\/blockquote>\n\n<p><a href=\"http:\/\/www.catb.org\/esr\/writings\/taoup\/html\/ch15s04.html\">Stuart Feldman<\/a>, on Make (via <a href=\"https:\/\/twitter.com\/kjhealy\/status\/699256520685576194\">Kieran Healy<\/a>):<\/p>\n<blockquote cite=\"http:\/\/www.catb.org\/esr\/writings\/taoup\/html\/ch15s04.html\"><p>Why the tab in column 1? Yacc was new, Lex was brand new. I hadn&rsquo;t tried either, so I figured this would be a good excuse to learn. After getting myself snarled up with my first stab at Lex, I just did something simple with the pattern newline-tab. It worked, it stayed. And then a few weeks later I had a user population of about a dozen, most of them friends, and I didn&rsquo;t want to screw up my embedded base. The rest, sadly, is history.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/siracusa\/status\/699255432066547712\">John Siracusa<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/siracusa\/status\/699255432066547712\"><p>Languages last a long time. Even multiple years into their existence is not &ldquo;too late&rdquo; to change things for the better.<\/p><\/blockquote>\n\n<p>Update (2016-02-19): <a href=\"https:\/\/twitter.com\/landonfuller\/status\/700764643241783296\">Landon<\/a> <a href=\"https:\/\/twitter.com\/landonfuller\/status\/700765096260161536\">Fuller<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/landonfuller\/status\/700764643241783296\"><p>Not much consideration given to path dependence; &ldquo;the &#8230; equilibrium achieved depends partly on the process of getting there&rdquo;<\/p><\/blockquote><blockquote cite=\"https:\/\/twitter.com\/landonfuller\/status\/700765096260161536\"><p>Simple example; unstable languages mean unstable libraries. Ecosystems and culture build up around and optimize for that problem.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>John Siracusa: As you watch the churn in the Swift language and the many source-incompatible changes, remember stories like this. Dennis Ritchie, on C: In retrospect it would have been better to go ahead and change the precedence of &amp; to higher than == but it seemed safer just to split &amp; and &amp;&amp; without [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[45,295,46,1182,71,901,163],"class_list":["post-13630","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-c","tag-history","tag-languagedesign","tag-make","tag-programming","tag-swift-programming-language","tag-unix"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/13630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=13630"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/13630\/revisions"}],"predecessor-version":[{"id":13636,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/13630\/revisions\/13636"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=13630"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=13630"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=13630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}