{"id":182236,"date":"2008-12-02T00:00:00","date_gmt":"2009-10-31T09:28:44","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/msr-research-item\/compiling-the-web-building-a-just-in-time-compiler-for-javascript\/"},"modified":"2016-09-09T09:51:09","modified_gmt":"2016-09-09T16:51:09","slug":"compiling-the-web-building-a-just-in-time-compiler-for-javascript","status":"publish","type":"msr-video","link":"https:\/\/www.microsoft.com\/en-us\/research\/video\/compiling-the-web-building-a-just-in-time-compiler-for-javascript\/","title":{"rendered":"Compiling the Web &#8211; Building a Just-in-Time Compiler for JavaScript"},"content":{"rendered":"<div class=\"asset-content\">\n<p>Over the last decade we have made great strides towards improving the execution performance of virtual-machine (VM) based high level programming languages. Today, dynamic compilation is standard in most Java and C# VMs, enabling programs written in these languages to execute with similar efficiency as legacy type-unsafe C or assembly code.<\/p>\n<p>However, for the past decade much of the research and development effort in the Just-in-Time compilation domain was focused on the runtime compilation of statically typed languages, leaving an important and steadily growing field of programming languages behind: dynamically typed high level languages such as JavaScript, Python, PHP and Ruby. Combined with an explosive growth of web applications and the wide-spread use of dynamically typed programming languages for the client and server side of such web applications, this has created a situation where bytecode interpretation is suddenly again the predominant mode of execution for much of the code used on a daily basis on desktop computers, including popular web programs and services like Google Mail or Google Docs.<\/p>\n<p>In this talk I will report on the design and development of TraceMonkey, the JavaScript Just-in-Time compiler in Mozilla&#8217;s Firefox web browser. I will discuss the fundamental differences between statically typed and dynamically typed languages from the perspective of a compiler constructor, and I will highlight some of the unique challenges for compiling dynamically typed languages such as JavaScript.<\/p>\n<\/div>\n<p><!-- .asset-content --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the last decade we have made great strides towards improving the execution performance of virtual-machine (VM) based high level programming languages. Today, dynamic compilation is standard in most Java and C# VMs, enabling programs written in these languages to execute with similar efficiency as legacy type-unsafe C or assembly code. However, for the past [&hellip;]<\/p>\n","protected":false},"featured_media":194521,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr_hide_image_in_river":0,"footnotes":""},"research-area":[],"msr-video-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-session-type":[],"msr-impact-theme":[],"msr-pillar":[],"msr-episode":[],"msr-research-theme":[],"class_list":["post-182236","msr-video","type-msr-video","status-publish","has-post-thumbnail","hentry","msr-locale-en_us"],"msr_download_urls":"","msr_external_url":"https:\/\/youtu.be\/KmiWPd-Su0o","msr_secondary_video_url":"","msr_video_file":"","_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/182236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-video"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/182236\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/194521"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=182236"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=182236"},{"taxonomy":"msr-video-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video-type?post=182236"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=182236"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=182236"},{"taxonomy":"msr-session-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-session-type?post=182236"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=182236"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=182236"},{"taxonomy":"msr-episode","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-episode?post=182236"},{"taxonomy":"msr-research-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-research-theme?post=182236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}