1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-12-22 04:50:09 +00:00
pdf2htmlEX/demo/demo1.page
2013-09-28 13:30:57 +08:00

2 lines
31 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="pd w0 h0"><div id="pf1" class="pf" data-page-no="1"><div class="pc pc1"><div class="t m0 x0 h1 y0 ff1 fs0 fc0 sc0 ls0 ws0">T<span class="_ _0"></span>race-based<span class="_ _1"> </span>J<span class="_ _2"></span>ust-in-T<span class="_ _2"></span>ime<span class="_ _1"> </span>T<span class="_ _0"></span>ype<span class="_ _1"> </span>Specialization<span class="_ _1"> </span>f<span class="_ _2"></span>or<span class="_ _1"> </span>Dynamic</div><div class="t m0 x1 h1 y1 ff1 fs0 fc0 sc0 ls0 ws0">Languages</div><div class="t m0 x2 h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">Andreas<span class="_ _3"> </span>Gal</div><div class="t m0 x3 h3 y3 ff3 fs2 fc0 sc0 ls0 ws0"><span class="_ _4"> </span><span class="ff4">+</span></div><div class="t m0 x4 h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Brendan<span class="_ _3"> </span>Eich</div><div class="t m0 x5 h4 y3 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x6 h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Mike<span class="_ _3"> </span>Sha<span class="_ _2"></span>ver</div><div class="t m0 x7 h4 y3 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x8 h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>David<span class="_ _3"> </span>Anderson</div><div class="t m0 x9 h4 y3 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 xa h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>David<span class="_ _3"> </span>Mandelin</div><div class="t m0 xb h4 y3 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 xc h2 y2 ff2 fs1 fc0 sc0 ls0 ws0">,</div><div class="t m0 xd h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">Mohammad<span class="_ _3"> </span>R.<span class="_ _3"> </span>Haghighat</div><div class="t m0 xe h3 y5 ff4 fs2 fc0 sc0 ls0 ws0">$</div><div class="t m0 xf h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Blake<span class="_ _3"> </span>Kaplan</div><div class="t m0 x10 h4 y5 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x11 h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Graydon<span class="_ _3"> </span>Hoare</div><div class="t m0 x12 h4 y5 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x13 h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Boris<span class="_ _3"> </span>Zbarsky</div><div class="t m0 x14 h4 y5 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x15 h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Jason<span class="_ _3"> </span>Orendorf<span class="_ _2"></span>f</div><div class="t m0 x16 h4 y5 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x17 h2 y4 ff2 fs1 fc0 sc0 ls0 ws0">,</div><div class="t m0 x18 h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">Jesse<span class="_ _3"> </span>Ruderman</div><div class="t m0 x19 h4 y7 ff3 fs2 fc0 sc0 ls0 ws0"></div><div class="t m0 x1a h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Edwin<span class="_ _3"> </span>Smith</div><div class="t m0 xe h3 y7 ff4 fs2 fc0 sc0 ls0 ws0">#</div><div class="t m0 x1b h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Rick<span class="_ _3"> </span>Reitmaier</div><div class="t m0 x1c h3 y7 ff4 fs2 fc0 sc0 ls0 ws0">#</div><div class="t m0 x1d h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Michael<span class="_ _3"> </span>Bebenita</div><div class="t m0 x1e h3 y7 ff4 fs2 fc0 sc0 ls0 ws0">+</div><div class="t m0 x1f h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Mason<span class="_ _3"> </span>Chang</div><div class="t m0 x20 h3 y7 ff4 fs2 fc0 sc0 ls0 ws0">+<span class="_ _4"></span>#</div><div class="t m0 x21 h2 y6 ff2 fs1 fc0 sc0 ls0 ws0">,<span class="_ _3"> </span>Michael<span class="_ _3"> </span>Franz</div><div class="t m0 x22 h3 y7 ff4 fs2 fc0 sc0 ls0 ws0">+</div><div class="t m0 x23 h5 y8 ff2 fs3 fc0 sc0 ls0 ws0">Mozilla<span class="_ _3"> </span>Corporation</div><div class="t m0 x24 h6 y9 ff5 fs4 fc0 sc0 ls0 ws0"></div><div class="t m0 x25 h7 ya ff6 fs3 fc0 sc0 ls0 ws0">{<span class="ff7">gal,brendan,shaver,danderson,dmandelin,mrbkap,graydon,bz,jorendorff,jruderman</span>}<span class="ff7">@mozilla.com</span></div><div class="t m0 x26 h5 yb ff2 fs3 fc0 sc0 ls0 ws0">Adobe<span class="_ _3"> </span>Corporation</div><div class="t m0 x27 h8 yc ff8 fs4 fc0 sc0 ls0 ws0">#</div><div class="t m0 x28 h7 yd ff6 fs3 fc0 sc0 ls0 ws0">{<span class="ff7">edwsmith,rreitmai</span>}<span class="ff7">@adobe.com</span></div><div class="t m0 x29 h5 ye ff2 fs3 fc0 sc0 ls0 ws0">Intel<span class="_ _3"> </span>Corporation</div><div class="t m0 x2a h8 yf ff8 fs4 fc0 sc0 ls0 ws0">$</div><div class="t m0 x2b h7 y10 ff6 fs3 fc0 sc0 ls0 ws0">{<span class="ff7">mohammad.r.haghighat</span>}<span class="ff7">@intel.com</span></div><div class="t m0 x2c h5 y11 ff2 fs3 fc0 sc0 ls0 ws0">Univ<span class="_ _2"></span>ersity<span class="_ _5"> </span>of<span class="_ _5"> </span>California,<span class="_ _5"> </span>Irvine</div><div class="t m0 x2d h8 y12 ff8 fs4 fc0 sc0 ls0 ws0">+</div><div class="t m0 x2e h7 y13 ff6 fs3 fc0 sc0 ls0 ws0">{<span class="ff7">mbebenit,changm,franz</span>}<span class="ff7">@uci.edu</span></div><div class="t m0 x2f h9 y14 ff1 fs1 fc0 sc0 ls0 ws0">Abstract</div><div class="t m0 x2f h5 y15 ff2 fs3 fc0 sc0 ls0 ws0">Dynamic<span class="_ _3"> </span>languages<span class="_ _6"> </span>such<span class="_ _3"> </span>as<span class="_ _6"> </span>Jav<span class="_ _2"></span>aScript<span class="_ _3"> </span>are<span class="_ _6"> </span>more<span class="_ _3"> </span>difficult<span class="_ _3"> </span>to<span class="_ _6"> </span>com-</div><div class="t m0 x2f h5 y16 ff2 fs3 fc0 sc0 ls0 ws0">pile<span class="_ _3"> </span>than<span class="_ _5"> </span>statically<span class="_ _3"> </span>typed<span class="_ _5"> </span>ones.<span class="_ _3"> </span>Since<span class="_ _5"> </span>no<span class="_ _3"> </span>concrete<span class="_ _5"> </span>type<span class="_ _3"> </span>information</div><div class="t m0 x2f h5 y17 ff2 fs3 fc0 sc0 ls0 ws0">is<span class="_ _5"> </span>a<span class="_ _2"></span>v<span class="_ _2"></span>ailable,<span class="_ _7"> </span>traditional<span class="_ _5"> </span>compilers<span class="_ _7"> </span>need<span class="_ _7"> </span>to<span class="_ _5"> </span>emit<span class="_ _7"> </span>generic<span class="_ _5"> </span>code<span class="_ _7"> </span>that<span class="_ _7"> </span>can</div><div class="t m0 x2f h5 y18 ff2 fs3 fc0 sc0 ls0 ws0">handle<span class="_ _5"> </span>all<span class="_ _5"> </span>possible<span class="_ _5"> </span>type<span class="_ _5"> </span>combinations<span class="_ _5"> </span>at<span class="_ _5"> </span>runtime.<span class="_ _7"> </span>W<span class="_ _2"></span>e<span class="_ _5"> </span>present<span class="_ _5"> </span>an<span class="_ _5"> </span>al-</div><div class="t m0 x2f h5 y19 ff2 fs3 fc0 sc0 ls0 ws0">ternativ<span class="_ _2"></span>e<span class="_ _6"> </span>compilation<span class="_ _8"> </span>technique<span class="_ _6"> </span>for<span class="_ _8"> </span>dynamically-typed<span class="_ _8"> </span>languages</div><div class="t m0 x2f h5 y1a ff2 fs3 fc0 sc0 ls0 ws0">that<span class="_ _3"> </span>identifies<span class="_ _5"> </span>frequently<span class="_ _5"> </span>executed<span class="_ _5"> </span>loop<span class="_ _3"> </span>traces<span class="_ _5"> </span>at<span class="_ _3"> </span>run-time<span class="_ _5"> </span>and<span class="_ _3"> </span>then</div><div class="t m0 x2f h5 y1b ff2 fs3 fc0 sc0 ls0 ws0">generates<span class="_ _6"> </span>machine<span class="_ _8"> </span>code<span class="_ _8"> </span>on<span class="_ _6"> </span>the<span class="_ _8"> </span>fly<span class="_ _6"> </span>that<span class="_ _8"> </span>is<span class="_ _8"> </span>specialized<span class="_ _6"> </span>for<span class="_ _8"> </span>the<span class="_ _6"> </span>ac-</div><div class="t m0 x2f h5 y1c ff2 fs3 fc0 sc0 ls0 ws0">tual<span class="_ _3"> </span>dynamic<span class="_ _6"> </span>types<span class="_ _6"> </span>occurring<span class="_ _3"> </span>on<span class="_ _6"> </span>each<span class="_ _3"> </span>path<span class="_ _6"> </span>through<span class="_ _3"> </span>the<span class="_ _6"> </span>loop.<span class="_ _3"> </span>Our</div><div class="t m0 x2f h5 y1d ff2 fs3 fc0 sc0 ls0 ws0">method<span class="_ _5"> </span>provides<span class="_ _5"> </span>cheap<span class="_ _5"> </span>inter<span class="_ _2"></span>-procedural<span class="_ _5"> </span>type<span class="_ _5"> </span>s<span class="_ _2"></span>pecialization,<span class="_ _5"> </span>and<span class="_ _5"> </span>an</div><div class="t m0 x2f h5 y1e ff2 fs3 fc0 sc0 ls0 ws0">elegant<span class="_ _5"> </span>and<span class="_ _5"> </span>ef<span class="_ _2"></span>ficient<span class="_ _5"> </span>w<span class="_ _2"></span>ay<span class="_ _5"> </span>of<span class="_ _5"> </span>incrementally<span class="_ _5"> </span>compiling<span class="_ _5"> </span>lazily<span class="_ _5"> </span>discov-</div><div class="t m0 x2f h5 y1f ff2 fs3 fc0 sc0 ls0 ws0">ered<span class="_ _3"> </span>alternati<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _5"> </span>paths<span class="_ _3"> </span>through<span class="_ _5"> </span>nested<span class="_ _3"> </span>loops.<span class="_ _5"> </span>W<span class="_ _2"></span>e<span class="_ _5"> </span>have<span class="_ _5"> </span>implemented</div><div class="t m0 x2f h5 y20 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>dynamic<span class="_ _5"> </span>compiler<span class="_ _3"> </span>for<span class="_ _3"> </span>Ja<span class="_ _2"></span>v<span class="_ _2"></span>aScript<span class="_ _3"> </span>based<span class="_ _5"> </span>on<span class="_ _3"> </span>our<span class="_ _3"> </span>technique<span class="_ _5"> </span>and<span class="_ _3"> </span>we</div><div class="t m0 x2f h5 y21 ff2 fs3 fc0 sc0 ls0 ws0">hav<span class="_ _2"></span>e<span class="_ _6"> </span>measured<span class="_ _6"> </span>speedups<span class="_ _6"> </span>of<span class="_ _6"> </span>10x<span class="_ _3"> </span>and<span class="_ _6"> </span>more<span class="_ _6"> </span>for<span class="_ _6"> </span>certain<span class="_ _6"> </span>benchmark</div><div class="t m0 x2f h5 y22 ff2 fs3 fc0 sc0 ls0 ws0">programs.</div><div class="t m0 x2f h5 y23 ff9 fs3 fc0 sc0 ls0 ws0">Categories<span class="_ _8"> </span>and<span class="_ _8"> </span>Subject<span class="_ _8"> </span>Descriptors<span class="_ _9"> </span><span class="ff2">D.3.4<span class="_ _8"> </span>[<span class="ffa">Pr<span class="_ _2"></span>ogr<span class="_ _2"></span>amming<span class="_ _8"> </span>Lan-</span></span></div><div class="t m0 x2f h5 y24 ffa fs3 fc0 sc0 ls0 ws0">guages<span class="ff2">]:<span class="_ _5"> </span>Processors<span class="_ _5"> </span>—<span class="_ _5"> </span></span>Incremental<span class="_ _5"> </span>compilers,<span class="_ _5"> </span>code<span class="_ _5"> </span>gener<span class="_ _2"></span>ation<span class="ff2">.</span></div><div class="t m0 x2f h5 y25 ff9 fs3 fc0 sc0 ls0 ws0">General<span class="_ _3"> </span>T<span class="_ _2"></span>erms<span class="_ _9"> </span><span class="ff2">Design,<span class="_ _3"> </span>Experimentation,<span class="_ _3"> </span>Measurement,<span class="_ _3"> </span>Perfor-</span></div><div class="t m0 x2f h5 y26 ff2 fs3 fc0 sc0 ls0 ws0">mance.</div><div class="t m0 x2f h5 y27 ff9 fs3 fc0 sc0 ls0 ws0">Keyw<span class="_ _2"></span>ords<span class="_ _9"> </span><span class="ff2">Ja<span class="_ _2"></span>v<span class="_ _2"></span>aScript,<span class="_ _5"> </span>just-in-time<span class="_ _5"> </span>compilation,<span class="_ _5"> </span>trace<span class="_ _3"> </span>trees.</span></div><div class="t m0 x2f h9 y28 ff1 fs1 fc0 sc0 ls0 ws0">1.<span class="_ _a"> </span>Introduction</div><div class="t m0 x2f h5 y29 ffa fs3 fc0 sc0 ls0 ws0">Dynamic<span class="_ _5"> </span>langua<span class="_ _2"></span>ges<span class="_ _5"> </span><span class="ff2">such<span class="_ _7"> </span>as<span class="_ _5"> </span>Jav<span class="_ _2"></span>aScript,<span class="_ _5"> </span>Python,<span class="_ _5"> </span>and<span class="_ _7"> </span>Ruby<span class="_ _2"></span>,<span class="_ _5"> </span>are<span class="_ _7"> </span>pop-</span></div><div class="t m0 x2f h5 y2a ff2 fs3 fc0 sc0 ls0 ws0">ular<span class="_ _5"> </span>since<span class="_ _3"> </span>the<span class="_ _2"></span>y<span class="_ _5"> </span>are<span class="_ _5"> </span>expressiv<span class="_ _2"></span>e,<span class="_ _5"> </span>accessible<span class="_ _3"> </span>to<span class="_ _5"> </span>non-e<span class="_ _2"></span>xperts,<span class="_ _5"> </span>and<span class="_ _3"> </span>mak<span class="_ _2"></span>e</div><div class="t m0 x2f h5 y2b ff2 fs3 fc0 sc0 ls0 ws0">deployment<span class="_ _3"> </span>as<span class="_ _5"> </span>easy<span class="_ _3"> </span>as<span class="_ _5"> </span>distributing<span class="_ _3"> </span>a<span class="_ _5"> </span>source<span class="_ _3"> </span>file.<span class="_ _5"> </span>They<span class="_ _3"> </span>are<span class="_ _5"> </span>used<span class="_ _3"> </span>for</div><div class="t m0 x2f h5 y2c ff2 fs3 fc0 sc0 ls0 ws0">small<span class="_ _6"> </span>scripts<span class="_ _6"> </span>as<span class="_ _8"> </span>well<span class="_ _6"> </span>as<span class="_ _6"> </span>for<span class="_ _8"> </span>complex<span class="_ _6"> </span>applications.<span class="_ _6"> </span>Jav<span class="_ _2"></span>aScript,<span class="_ _6"> </span>for</div><div class="t m0 x2f h5 y2d ff2 fs3 fc0 sc0 ls0 ws0">example,<span class="_ _5"> </span>is<span class="_ _3"> </span>the<span class="_ _5"> </span>de<span class="_ _5"> </span>facto<span class="_ _3"> </span>standard<span class="_ _5"> </span>for<span class="_ _5"> </span>client-side<span class="_ _3"> </span>web<span class="_ _5"> </span>programming</div><div class="t m0 x2f ha y2e ff2 fs5 fc0 sc0 ls0 ws0">Permission<span class="_ _5"> </span>to<span class="_ _3"> </span>mak<span class="_ _2"></span>e<span class="_ _5"> </span>digital<span class="_ _5"> </span>or<span class="_ _3"> </span>hard<span class="_ _5"> </span>copies<span class="_ _5"> </span>of<span class="_ _5"> </span>all<span class="_ _3"> </span>or<span class="_ _5"> </span>part<span class="_ _5"> </span>of<span class="_ _5"> </span>this<span class="_ _5"> </span>work<span class="_ _3"> </span>for<span class="_ _5"> </span>personal<span class="_ _5"> </span>or</div><div class="t m0 x2f ha y2f ff2 fs5 fc0 sc0 ls0 ws0">classroom<span class="_ _5"> </span>use<span class="_ _7"> </span>is<span class="_ _5"> </span>granted<span class="_ _5"> </span>without<span class="_ _7"> </span>fee<span class="_ _5"> </span>provided<span class="_ _5"> </span>that<span class="_ _7"> </span>copies<span class="_ _5"> </span>are<span class="_ _5"> </span>not<span class="_ _7"> </span>made<span class="_ _5"> </span>or<span class="_ _5"> </span>distrib<span class="_ _2"></span>uted</div><div class="t m0 x2f ha y30 ff2 fs5 fc0 sc0 ls0 ws0">for<span class="_ _7"> </span>profit<span class="_ _7"> </span>or<span class="_ _5"> </span>commercial<span class="_ _7"> </span>adv<span class="_ _2"></span>antage<span class="_ _7"> </span>and<span class="_ _7"> </span>that<span class="_ _7"> </span>copies<span class="_ _7"> </span>bear<span class="_ _5"> </span>this<span class="_ _7"> </span>notice<span class="_ _7"> </span>and<span class="_ _7"> </span>the<span class="_ _7"> </span>full<span class="_ _7"> </span>citation</div><div class="t m0 x2f ha y31 ff2 fs5 fc0 sc0 ls0 ws0">on<span class="_ _5"> </span>the<span class="_ _7"> </span>first<span class="_ _5"> </span>page.<span class="_ _5"> </span>T<span class="_ _b"></span>o<span class="_ _5"> </span>cop<span class="_ _2"></span>y<span class="_ _5"> </span>otherwise,<span class="_ _7"> </span>to<span class="_ _5"> </span>republish,<span class="_ _5"> </span>to<span class="_ _7"> </span>post<span class="_ _5"> </span>on<span class="_ _7"> </span>servers<span class="_ _5"> </span>or<span class="_ _5"> </span>to<span class="_ _7"> </span>redistribute</div><div class="t m0 x2f ha y32 ff2 fs5 fc0 sc0 ls0 ws0">to<span class="_ _7"> </span>lists,<span class="_ _5"> </span>requires<span class="_ _7"> </span>prior<span class="_ _5"> </span>specific<span class="_ _7"> </span>permission<span class="_ _7"> </span>and/or<span class="_ _5"> </span>a<span class="_ _7"> </span>fee.</div><div class="t m0 x2f ha y33 ffb fs5 fc0 sc0 ls0 ws0">PLDI09,<span class="_ _c"> </span><span class="ff2">June<span class="_ _7"> </span>1520,<span class="_ _5"> </span>2009,<span class="_ _7"> </span>Dublin,<span class="_ _5"> </span>Ireland.</span></div><div class="t m0 x2f ha y34 ff2 fs5 fc0 sc0 ls0 ws0">Copyright</div><div class="t m0 x30 ha y35 ff2 fs5 fc0 sc0 ls0 ws0">c</div><div class="t m0 x31 ha y34 ffc fs5 fc0 sc0 ls0 ws0"><span class="_ _7"> </span><span class="ff2">2009<span class="_ _5"> </span>A<span class="_ _2"></span>CM<span class="_ _7"> </span>978-1-60558-392-1/09/06.<span class="_ _7"> </span>.<span class="_ _4"></span>.<span class="_ _7"> </span>$5.00</span></div><div class="t m0 x32 h5 y36 ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _3"> </span>is<span class="_ _5"> </span>used<span class="_ _5"> </span>for<span class="_ _3"> </span>the<span class="_ _5"> </span>application<span class="_ _3"> </span>logic<span class="_ _5"> </span>of<span class="_ _5"> </span>browser-based<span class="_ _5"> </span>productivity</div><div class="t m0 x32 h5 y37 ff2 fs3 fc0 sc0 ls0 ws0">applications<span class="_ _3"> </span>such<span class="_ _6"> </span>as<span class="_ _3"> </span>Google<span class="_ _6"> </span>Mail,<span class="_ _3"> </span>Google<span class="_ _3"> </span>Docs<span class="_ _6"> </span>and<span class="_ _3"> </span>Zimbra<span class="_ _3"> </span>Col-</div><div class="t m0 x32 h5 y38 ff2 fs3 fc0 sc0 ls0 ws0">laboration<span class="_ _6"> </span>Suite.<span class="_ _8"> </span>In<span class="_ _8"> </span>this<span class="_ _6"> </span>domain,<span class="_ _8"> </span>in<span class="_ _8"> </span>order<span class="_ _6"> </span>to<span class="_ _8"> </span>provide<span class="_ _6"> </span>a<span class="_ _8"> </span>fluid<span class="_ _6"> </span>user</div><div class="t m0 x32 h5 y39 ff2 fs3 fc0 sc0 ls0 ws0">experience<span class="_ _5"> </span>and<span class="_ _7"> </span>enable<span class="_ _5"> </span>a<span class="_ _7"> </span>new<span class="_ _5"> </span>generation<span class="_ _7"> </span>of<span class="_ _5"> </span>applications,<span class="_ _7"> </span>virtual<span class="_ _5"> </span>ma-</div><div class="t m0 x32 h5 y3a ff2 fs3 fc0 sc0 ls0 ws0">chines<span class="_ _5"> </span>must<span class="_ _5"> </span>provide<span class="_ _5"> </span>a<span class="_ _5"> </span>low<span class="_ _5"> </span>startup<span class="_ _5"> </span>time<span class="_ _3"> </span>and<span class="_ _5"> </span>high<span class="_ _5"> </span>performance.</div><div class="t m0 x33 h5 y3b ff2 fs3 fc0 sc0 ls0 ws0">Compilers<span class="_ _3"> </span>for<span class="_ _3"> </span>statically<span class="_ _3"> </span>typed<span class="_ _3"> </span>languages<span class="_ _3"> </span>rely<span class="_ _5"> </span>on<span class="_ _3"> </span>type<span class="_ _3"> </span>informa-</div><div class="t m0 x32 h5 y3c ff2 fs3 fc0 sc0 ls0 ws0">tion<span class="_ _5"> </span>to<span class="_ _7"> </span>generate<span class="_ _5"> </span>ef<span class="_ _2"></span>ficient<span class="_ _7"> </span>machine<span class="_ _5"> </span>code.<span class="_ _7"> </span>In<span class="_ _5"> </span>a<span class="_ _7"> </span>dynamically<span class="_ _5"> </span>typed<span class="_ _7"> </span>pro-</div><div class="t m0 x32 h5 y3d ff2 fs3 fc0 sc0 ls0 ws0">gramming<span class="_ _8"> </span>language<span class="_ _8"> </span>such<span class="_ _8"> </span>as<span class="_ _8"> </span>Jav<span class="_ _2"></span>aScript,<span class="_ _6"> </span>the<span class="_ _8"> </span>types<span class="_ _8"> </span>of<span class="_ _8"> </span>expressions</div><div class="t m0 x32 h5 y3e ff2 fs3 fc0 sc0 ls0 ws0">may<span class="_ _3"> </span>vary<span class="_ _3"> </span>at<span class="_ _6"> </span>runtime.<span class="_ _3"> </span>This<span class="_ _3"> </span>means<span class="_ _6"> </span>that<span class="_ _3"> </span>the<span class="_ _3"> </span>compiler<span class="_ _6"> </span>can<span class="_ _3"> </span>no<span class="_ _3"> </span>longer</div><div class="t m0 x32 h5 y3f ff2 fs3 fc0 sc0 ls0 ws0">easily<span class="_ _3"> </span>transform<span class="_ _3"> </span>operations<span class="_ _6"> </span>into<span class="_ _3"> </span>machine<span class="_ _3"> </span>instructions<span class="_ _3"> </span>that<span class="_ _6"> </span>operate</div><div class="t m0 x32 h5 y40 ff2 fs3 fc0 sc0 ls0 ws0">on<span class="_ _5"> </span>one<span class="_ _3"> </span>specific<span class="_ _5"> </span>type.<span class="_ _3"> </span>W<span class="_ _2"></span>ithout<span class="_ _5"> </span>exact<span class="_ _5"> </span>type<span class="_ _5"> </span>information,<span class="_ _3"> </span>the<span class="_ _5"> </span>compiler</div><div class="t m0 x32 h5 y41 ff2 fs3 fc0 sc0 ls0 ws0">must<span class="_ _3"> </span>emit<span class="_ _3"> </span>slower<span class="_ _3"> </span>generalized<span class="_ _3"> </span>machine<span class="_ _3"> </span>code<span class="_ _3"> </span>that<span class="_ _3"> </span>can<span class="_ _3"> </span>deal<span class="_ _3"> </span>with<span class="_ _3"> </span>all</div><div class="t m0 x32 h5 y42 ff2 fs3 fc0 sc0 ls0 ws0">potential<span class="_ _3"> </span>type<span class="_ _5"> </span>combinations.<span class="_ _3"> </span>While<span class="_ _3"> </span>compile-time<span class="_ _3"> </span>static<span class="_ _5"> </span>type<span class="_ _3"> </span>infer<span class="_ _2"></span>-</div><div class="t m0 x32 h5 y43 ff2 fs3 fc0 sc0 ls0 ws0">ence<span class="_ _8"> </span>might<span class="_ _d"> </span>be<span class="_ _8"> </span>able<span class="_ _d"> </span>to<span class="_ _8"> </span>gather<span class="_ _d"> </span>type<span class="_ _8"> </span>information<span class="_ _d"> </span>to<span class="_ _8"> </span>generate<span class="_ _d"> </span>opti-</div><div class="t m0 x32 h5 y44 ff2 fs3 fc0 sc0 ls0 ws0">mized<span class="_ _6"> </span>machine<span class="_ _6"> </span>code,<span class="_ _6"> </span>traditional<span class="_ _6"> </span>static<span class="_ _8"> </span>analysis<span class="_ _6"> </span>is<span class="_ _6"> </span>very<span class="_ _6"> </span>expensi<span class="_ _2"></span>ve</div><div class="t m0 x32 h5 y45 ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _5"> </span>hence<span class="_ _5"> </span>not<span class="_ _3"> </span>well<span class="_ _5"> </span>suited<span class="_ _5"> </span>for<span class="_ _5"> </span>the<span class="_ _5"> </span>highly<span class="_ _3"> </span>interacti<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _5"> </span>en<span class="_ _2"></span>vironment<span class="_ _5"> </span>of</div><div class="t m0 x32 h5 y23 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _5"> </span>web<span class="_ _5"> </span>browser<span class="_ _2"></span>.</div><div class="t m0 x33 h5 y24 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _d"> </span>present<span class="_ _8"> </span>a<span class="_ _d"> </span>trace-based<span class="_ _8"> </span>compilation<span class="_ _d"> </span>technique<span class="_ _8"> </span>for<span class="_ _8"> </span>dynamic</div><div class="t m0 x32 h5 y46 ff2 fs3 fc0 sc0 ls0 ws0">languages<span class="_ _3"> </span>that<span class="_ _5"> </span>reconciles<span class="_ _3"> </span>speed<span class="_ _3"> </span>of<span class="_ _5"> </span>compilation<span class="_ _3"> </span>with<span class="_ _3"> </span>e<span class="_ _2"></span>xcellent<span class="_ _3"> </span>per<span class="_ _2"></span>-</div><div class="t m0 x32 h5 y47 ff2 fs3 fc0 sc0 ls0 ws0">formance<span class="_ _5"> </span>of<span class="_ _7"> </span>the<span class="_ _5"> </span>generated<span class="_ _7"> </span>machine<span class="_ _5"> </span>code.<span class="_ _5"> </span>Our<span class="_ _7"> </span>system<span class="_ _5"> </span>uses<span class="_ _7"> </span>a<span class="_ _5"> </span>mixed-</div><div class="t m0 x32 h5 y48 ff2 fs3 fc0 sc0 ls0 ws0">mode<span class="_ _5"> </span>ex<span class="_ _2"></span>ecution<span class="_ _5"> </span>approach:<span class="_ _5"> </span>the<span class="_ _5"> </span>system<span class="_ _7"> </span>starts<span class="_ _5"> </span>running<span class="_ _5"> </span>Jav<span class="_ _2"></span>aScript<span class="_ _5"> </span>in<span class="_ _5"> </span>a</div><div class="t m0 x32 h5 y49 ff2 fs3 fc0 sc0 ls0 ws0">fast-starting<span class="_ _3"> </span>bytecode<span class="_ _5"> </span>interpreter<span class="_ _2"></span>.<span class="_ _5"> </span>As<span class="_ _3"> </span>the<span class="_ _3"> </span>program<span class="_ _5"> </span>runs,<span class="_ _3"> </span>the<span class="_ _5"> </span>system</div><div class="t m0 x32 h5 y4a ff2 fs3 fc0 sc0 ls0 ws0">identifies<span class="_ _d"> </span><span class="ffa">hot<span class="_ _d"> </span></span>(frequently<span class="_ _d"> </span>e<span class="_ _2"></span>xecuted)<span class="_ _8"> </span>bytecode<span class="_ _d"> </span>sequences,<span class="_ _d"> </span>records</div><div class="t m0 x32 h5 y4b ff2 fs3 fc0 sc0 ls0 ws0">them,<span class="_ _6"> </span>and<span class="_ _8"> </span>compiles<span class="_ _6"> </span>them<span class="_ _6"> </span>to<span class="_ _8"> </span>fast<span class="_ _6"> </span>nativ<span class="_ _2"></span>e<span class="_ _6"> </span>code.<span class="_ _6"> </span>W<span class="_ _2"></span>e<span class="_ _6"> </span>call<span class="_ _6"> </span>such<span class="_ _6"> </span>a<span class="_ _8"> </span>se-</div><div class="t m0 x32 h5 y4c ff2 fs3 fc0 sc0 ls0 ws0">quence<span class="_ _5"> </span>of<span class="_ _5"> </span>instructions<span class="_ _3"> </span>a<span class="_ _5"> </span><span class="ffa">tr<span class="_ _2"></span>ace<span class="ff2">.</span></span></div><div class="t m0 x33 h5 y4d ff2 fs3 fc0 sc0 ls0 ws0">Unlike<span class="_ _8"> </span>method-based<span class="_ _d"> </span>dynamic<span class="_ _d"> </span>compilers,<span class="_ _d"> </span>our<span class="_ _8"> </span>dynamic<span class="_ _d"> </span>com-</div><div class="t m0 x32 h5 y4e ff2 fs3 fc0 sc0 ls0 ws0">piler<span class="_ _8"> </span>operates<span class="_ _8"> </span>at<span class="_ _8"> </span>the<span class="_ _8"> </span>granularity<span class="_ _8"> </span>of<span class="_ _8"> </span>individual<span class="_ _6"> </span>loops.<span class="_ _8"> </span>This<span class="_ _8"> </span>design</div><div class="t m0 x32 h5 y4f ff2 fs3 fc0 sc0 ls0 ws0">choice<span class="_ _8"> </span>is<span class="_ _8"> </span>based<span class="_ _8"> </span>on<span class="_ _8"> </span>the<span class="_ _8"> </span>expectation<span class="_ _8"> </span>that<span class="_ _8"> </span>programs<span class="_ _8"> </span>spend<span class="_ _8"> </span>most<span class="_ _8"> </span>of</div><div class="t m0 x32 h5 y50 ff2 fs3 fc0 sc0 ls0 ws0">their<span class="_ _3"> </span>time<span class="_ _3"> </span>in<span class="_ _6"> </span>hot<span class="_ _3"> </span>loops.<span class="_ _3"> </span>Even<span class="_ _3"> </span>in<span class="_ _3"> </span>dynamically<span class="_ _6"> </span>typed<span class="_ _3"> </span>languages,<span class="_ _3"> </span>we</div><div class="t m0 x32 h5 y51 ff2 fs3 fc0 sc0 ls0 ws0">expect<span class="_ _5"> </span>hot<span class="_ _7"> </span>loops<span class="_ _5"> </span>to<span class="_ _5"> </span>be<span class="_ _5"> </span>mostly<span class="_ _7"> </span><span class="ffa">type-stable</span>,<span class="_ _5"> </span>meaning<span class="_ _5"> </span>that<span class="_ _5"> </span>the<span class="_ _7"> </span>types<span class="_ _5"> </span>of</div><div class="t m0 x32 h5 y52 ff2 fs3 fc0 sc0 ls0 ws0">values<span class="_ _5"> </span>are<span class="_ _7"> </span>in<span class="_ _2"></span>variant.<span class="_ _7"> </span>(12)<span class="_ _5"> </span>For<span class="_ _5"> </span>e<span class="_ _2"></span>xample,<span class="_ _5"> </span>we<span class="_ _7"> </span>would<span class="_ _5"> </span>expect<span class="_ _5"> </span>loop<span class="_ _7"> </span>coun-</div><div class="t m0 x32 h5 y53 ff2 fs3 fc0 sc0 ls0 ws0">ters<span class="_ _5"> </span>that<span class="_ _5"> </span>start<span class="_ _3"> </span>as<span class="_ _5"> </span>integers<span class="_ _5"> </span>to<span class="_ _5"> </span>remain<span class="_ _5"> </span>integers<span class="_ _5"> </span>for<span class="_ _5"> </span>all<span class="_ _3"> </span>iterations.<span class="_ _5"> </span>When</div><div class="t m0 x32 h5 y54 ff2 fs3 fc0 sc0 ls0 ws0">both<span class="_ _3"> </span>of<span class="_ _3"> </span>these<span class="_ _6"> </span>expectations<span class="_ _3"> </span>hold,<span class="_ _3"> </span>a<span class="_ _3"> </span>trace-based<span class="_ _3"> </span>compiler<span class="_ _6"> </span>can<span class="_ _3"> </span>cov<span class="_ _2"></span>er</div><div class="t m0 x32 h5 y55 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>program<span class="_ _5"> </span>e<span class="_ _2"></span>xecution<span class="_ _5"> </span>with<span class="_ _5"> </span>a<span class="_ _7"> </span>small<span class="_ _5"> </span>number<span class="_ _5"> </span>of<span class="_ _5"> </span>type-specialized,<span class="_ _5"> </span>ef-</div><div class="t m0 x32 h5 y56 ff2 fs3 fc0 sc0 ls0 ws0">ficiently<span class="_ _5"> </span>compiled<span class="_ _5"> </span>traces.</div><div class="t m0 x33 h5 y57 ff2 fs3 fc0 sc0 ls0 ws0">Each<span class="_ _3"> </span>compiled<span class="_ _5"> </span>trace<span class="_ _5"> </span>covers<span class="_ _5"> </span>one<span class="_ _3"> </span>path<span class="_ _5"> </span>through<span class="_ _3"> </span>the<span class="_ _5"> </span>program<span class="_ _3"> </span>with</div><div class="t m0 x32 h5 y58 ff2 fs3 fc0 sc0 ls0 ws0">one<span class="_ _5"> </span>mapping<span class="_ _5"> </span>of<span class="_ _7"> </span>values<span class="_ _5"> </span>to<span class="_ _7"> </span>types.<span class="_ _5"> </span>When<span class="_ _5"> </span>the<span class="_ _5"> </span>VM<span class="_ _7"> </span>executes<span class="_ _5"> </span>a<span class="_ _7"> </span>compiled</div><div class="t m0 x32 h5 y59 ff2 fs3 fc0 sc0 ls0 ws0">trace,<span class="_ _1"> </span>it<span class="_ _1"> </span>cannot<span class="_ _d"> </span>guarantee<span class="_ _1"> </span>that<span class="_ _1"> </span>the<span class="_ _1"> </span>same<span class="_ _d"> </span>path<span class="_ _1"> </span>will<span class="_ _1"> </span>be<span class="_ _d"> </span>followed</div><div class="t m0 x32 h5 y5a ff2 fs3 fc0 sc0 ls0 ws0">or<span class="_ _d"> </span>that<span class="_ _8"> </span>the<span class="_ _d"> </span>same<span class="_ _d"> </span>types<span class="_ _8"> </span>will<span class="_ _d"> </span>occur<span class="_ _d"> </span>in<span class="_ _8"> </span>subsequent<span class="_ _d"> </span>loop<span class="_ _d"> </span>iterations.</div></div><div class="pi" data-data='{"ctm":[1.673203,0.000000,0.000000,1.673203,0.000000,0.000000]}'></div></div></div>