{"id":234,"date":"2010-01-26T17:28:35","date_gmt":"2010-01-26T06:28:35","guid":{"rendered":"http:\/\/blog.mozilla.org\/nnethercote\/?p=234"},"modified":"2010-01-26T17:28:35","modified_gmt":"2010-01-26T06:28:35","slug":"my-contribution-to-firefox-3-6","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/nnethercote\/2010\/01\/26\/my-contribution-to-firefox-3-6\/","title":{"rendered":"My Contribution to Firefox 3.6"},"content":{"rendered":"<p>Firefox 3.6 is the first Firefox release that has my code in it.\u00a0 Much of it was written over six months ago, so it&#8217;s nice that it&#8217;s finally seeing the light of day.\u00a0 It&#8217;s also fun to know that my code is running on the machines of my friends and family;\u00a0 that&#8217;s new for me.<\/p>\n<p>One friend asked what my specific contribution to the release was.\u00a0 I said &#8220;in some cases it might be a little faster and a little less likely to crash&#8221;.\u00a0 At the December all-hands, when people asked me what I&#8217;ve been working on, I said &#8220;<a href=\"https:\/\/bugzilla.mozilla.org\/buglist.cgi?emailassigned_to1=1;query_format=advanced;short_desc=nanojit%20lirasm;short_desc_type=anywordssubstr;email1=nnethercote%40mozilla.com;resolution=FIXED;emailtype1=exact\">filing the sharp edges off Nanojit<\/a>&#8220;.\u00a0 Nanojit is the JIT compiler back-end used by TraceMonkey;\u00a0 it translates a low-level intermediate representation called LIR into native code.\u00a0 It has some clever features and does a pretty good job in many respects but a year ago a lot of its code was, well, awful.\u00a0 It&#8217;s now <strong>much<\/strong> better:\u00a0 simpler, faster, with fewer ways to go wrong, more internal sanity checking, and better testing (including some <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=519873\">fuzzing<\/a>).\u00a0 And many of these improvements didn&#8217;t make it into 3.6.<\/p>\n<p>I have a <a href=\"https:\/\/bugzilla.mozilla.org\/buglist.cgi?short_desc=nanojit%20lirasm;resolution=DUPLICATE;resolution=---;emailtype1=exact;emailassigned_to1=1;query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;short_desc_type=anywordssubstr;email1=nnethercote%40mozilla.com\">few more fixes to make<\/a>, but Nanojit improvements are winding down, and my attention will soon be focused elsewhere within TraceMonkey.\u00a0 I thought that I would be spending some time this year improving the quality of Nanojit&#8217;s code generation, but I&#8217;ve found that the quality is already pretty good.\u00a0 This perhaps isn&#8217;t so surprising because LIR is so low-level that it&#8217;s pretty close to machine code.\u00a0 However, while determining that I found that the LIR generated by the TraceMonkey front-end is <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=536630\">often awful<\/a>.\u00a0 It looks like there is some fat to trim there!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Firefox 3.6 is the first Firefox release that has my code in it.\u00a0 Much of it was written over six months ago, so it&#8217;s nice that it&#8217;s finally seeing the light of day.\u00a0 It&#8217;s also fun to know that my code is running on the machines of my friends and family;\u00a0 that&#8217;s new for me. [&hellip;]<\/p>\n","protected":false},"author":139,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[617,467],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts\/234"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}