<div dir="ltr">Every function is jitted the first time it is called if you&#39;re running on a platform that the JIT supports (currently x86 and ARM).<div><br></div><div style>Robby</div></div><div class="gmail_extra"><br>
<br><div class="gmail_quote">On Thu, May 23, 2013 at 1:25 PM, Greg Hendershott <span dir="ltr">&lt;<a href="mailto:greghendershott@gmail.com" target="_blank">greghendershott@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
p.s.<br>
<div class="im"><br>
&gt; Also: Am I correct that the user-supplied function gets JIT-ed, and<br>
&gt; there&#39;s no big performance hit from this?  (I think the answer is no,<br>
<br>
</div>That question had mixed polarities. :)  I should have written, I think<br>
the answer is No there&#39;s no big performance hit, and Yes it gets<br>
JIT-ed.<br>
<div class="HOEnZb"><div class="h5"><br>
On Thu, May 23, 2013 at 2:22 PM, Greg Hendershott<br>
&lt;<a href="mailto:greghendershott@gmail.com">greghendershott@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;ve never had a reason to use `dynamic-require`, but now I think I do.<br>
&gt;<br>
&gt; For my Frog static blog generator, I&#39;d like to provide a light<br>
&gt; &quot;template&quot; feature, where the user can override the default layout of<br>
&gt; the main container &lt;div&gt; in the page.<br>
&gt;<br>
&gt; I have an existing function that returns an xexpr for this. So my idea<br>
&gt; is to let the user optionally supply a `template.rkt` file that<br>
&gt; `provide`s a function named (say) `container` that returns (listof<br>
&gt; xexpr?).<br>
&gt;<br>
&gt; So I think what I want to do is something like this:<br>
&gt;<br>
&gt; (define (container-proc)<br>
&gt;   (define p (build-path (src-path) &quot;template.rkt&quot;))<br>
&gt;   (cond [(file-exists? p)<br>
&gt;          (dynamic-require p<br>
&gt;                           &#39;container<br>
&gt;                           (thunk default-container))]<br>
&gt;         [else default-container]))<br>
&gt;<br>
&gt; The built-in `default-container` looks something like this:<br>
&gt;<br>
&gt; (define (default-container bootstrap-row-class ;&quot;row&quot; or &quot;row-fluid&quot;<br>
&gt;                            bodies              ;listof xexpr?: main content<br>
&gt;                            tocs                ;listof xexpr?: TOC<br>
&gt;                            tags/feeds          ;listof xexpr?: tag/feed links<br>
&gt;                            follow)             ;listof xexpr?: Twitter, etc.<br>
&gt;   `((div ([class ,bootstrap-row-class])<br>
&gt;          ;; Left column<br>
&gt;          (div ([id &quot;left-sidebar&quot;]<br>
&gt;                [class &quot;span2 bs-docs-sidebar&quot;])<br>
&gt;               ,@tocs<br>
&gt;               (p nbsp))<br>
&gt;          ;; Main column<br>
&gt;          (div ([id &quot;content&quot;]<br>
&gt;                [class &quot;span8&quot;])<br>
&gt;               ,@bodies)<br>
&gt;          ;; Right column<br>
&gt;          (div ([id &quot;right-sidebar&quot;]<br>
&gt;                [class &quot;span2&quot;])<br>
&gt;               ,@(tags/feeds)<br>
&gt;               ,@(follow)))))<br>
&gt;<br>
&gt; The user-supplied template.rkt would provide some variation on it. For<br>
&gt; example they don&#39;t want any left column with a TOC, so they supply<br>
&gt; this:<br>
&gt;<br>
&gt; ;; template.rkt<br>
&gt; #lang racket<br>
&gt; (provide container)<br>
&gt; (define (container bootstrap-row-class ;&quot;row&quot; or &quot;row-fluid&quot;<br>
&gt;                    bodies              ;listof xexpr?: main content<br>
&gt;                    tocs                ;listof xexpr?: TOC<br>
&gt;                    tags/feeds          ;listof xexpr?: tag/feed links<br>
&gt;                    follow)             ;listof xexpr?: Twitter, etc.<br>
&gt;   `((div ([class ,bootstrap-row-class])<br>
&gt;          ;; Don&#39;t want any left column; ignore `tocs`<br>
&gt;          ;; Main column<br>
&gt;          (div ([id &quot;content&quot;]<br>
&gt;                [class &quot;span9&quot;]) ;wider<br>
&gt;               ,@bodies)<br>
&gt;          ;; Right column: Tags/feeds/follow<br>
&gt;          (div ([id &quot;right-sidebar&quot;]<br>
&gt;                [class &quot;span3&quot;]) ;wider<br>
&gt;               ,@(tags/feeds)<br>
&gt;               ,@(follow)))))<br>
&gt;<br>
&gt; In a quick experiment this seems to work fine. I could also go further<br>
&gt; and make this a tiny s-exp #lang, to make the end user experience even<br>
&gt; simpler. But meanwhile, and before that, I just want to make sure that<br>
&gt; `dynamic-require` is a reasonable way to do this?  Does anyone<br>
&gt; disagree?<br>
&gt;<br>
&gt; Also: Am I correct that the user-supplied function gets JIT-ed, and<br>
&gt; there&#39;s no big performance hit from this?  (I think the answer is no,<br>
&gt; because from reviewing Racket&#39;s own source, I got the impression that<br>
&gt; all modules are built on dynamic-require, but I might have<br>
&gt; understood.)<br>
&gt;<br>
&gt; Thank you in advance for any advice or suggestions!<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>