<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 21, 2013 at 10:42 AM, Eric Dobson <span dir="ltr">&lt;<a href="mailto:eric.n.dobson@gmail.com" target="_blank">eric.n.dobson@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">I am under the assumption that the compiled directory is just a cache<br>
of the byte code version of the compiled source code, and that racket<br>
should use the source code when ever that cache is invalid. This is<br>
currently not true, as my examples show, yet racket does work to make<br>
it mostly true. So my question is why doesn&#39;t racket do the same check<br>
that raco make does?<br>
<br></blockquote><div><br></div><div style>I believe the concern is that it is expensive (in terms of filesystem access). This decision was made a very long time ago, tho, and I don&#39;t know if we&#39;ve done any real measurements or if maybe the balance has changed.</div>
<div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
No I don&#39;t want racket to run raco make before requiring the file.<br>
That would update the compiled directories, (which likely isn&#39;t<br>
expensive, but not the feature I&#39;m asking about).<br>
<div class="HOEnZb"><div class="h5"><br>
On Thu, Mar 21, 2013 at 8:34 AM, Tobias Hammer &lt;<a href="mailto:tobias.hammer@dlr.de">tobias.hammer@dlr.de</a>&gt; wrote:<br>
&gt; You can use a little &#39;preload&#39; script:<br>
&gt;<br>
&gt; wrap-compile.rkt<br>
&gt; #lang racket<br>
&gt; (require compiler/cm)<br>
&gt; (current-load/use-compiled<br>
&gt;  (make-compilation-manager-load/use-compiled-handler))<br>
&gt;<br>
&gt; and run with racket -t wrap-compile.rkt &lt;more&gt;<br>
&gt; I would really love to see this functionality as a command line option to<br>
&gt; the console racket<br>
&gt;<br>
&gt; Tobias<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, 21 Mar 2013 16:31:51 +0100, Eric Dobson &lt;<a href="mailto:eric.n.dobson@gmail.com">eric.n.dobson@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;<br>
&gt;&gt; So anyone who just uses the command line tools is out of luck? I like<br>
&gt;&gt; my build system to be correct, and it seems weird that there is work<br>
&gt;&gt; to make sure the right zo file is matched with the source file but<br>
&gt;&gt; that it is incorrect in some simple cases.<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Mar 21, 2013 at 8:19 AM, Robby Findler<br>
&gt;&gt; &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Or use DrRacket and turn on the auto compilation feature. Or set up<br>
&gt;&gt;&gt; compiler/cm yourself to do that.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Robby<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Thu, Mar 21, 2013 at 10:16 AM, Eric Dobson &lt;<a href="mailto:eric.n.dobson@gmail.com">eric.n.dobson@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; That doesn&#39;t explain why I can get the same behavior as the macro with<br>
&gt;&gt;&gt;&gt; a function call, probably inlining is responsible for that though.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; So the take away is that if I want my running system to represent the<br>
&gt;&gt;&gt;&gt; current state of the source files I either need to run raco make every<br>
&gt;&gt;&gt;&gt; single time, or never run raco make. That seems very counter<br>
&gt;&gt;&gt;&gt; intuitive.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Thu, Mar 21, 2013 at 1:51 AM, Tobias Hammer &lt;<a href="mailto:tobias.hammer@dlr.de">tobias.hammer@dlr.de</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt; The difference lies in the method how racket and raco make check for<br>
&gt;&gt;&gt;&gt; &gt; changes.<br>
&gt;&gt;&gt;&gt; &gt; - racket only looks at each individual file&#39;s timestamp source and .zo<br>
&gt;&gt;&gt;&gt; &gt; timestamp and uses whichever is never.<br>
&gt;&gt;&gt;&gt; &gt; - raco make always checks if the file has changed or any of its<br>
&gt;&gt;&gt;&gt; &gt; dependencies<br>
&gt;&gt;&gt;&gt; &gt; has changed to decide if it has to recompile the file.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Whats happens in version 1 is that the macro is already expanded in<br>
&gt;&gt;&gt;&gt; &gt; a.zo<br>
&gt;&gt;&gt;&gt; &gt; and<br>
&gt;&gt;&gt;&gt; &gt; a.zo is still never than a.rkt. Therefore racket loads a.zo (but<br>
&gt;&gt;&gt;&gt; &gt; b.rkt)<br>
&gt;&gt;&gt;&gt; &gt; and<br>
&gt;&gt;&gt;&gt; &gt; prints &#39;version1.<br>
&gt;&gt;&gt;&gt; &gt; In version 2 raco make (or more correctly compiler/cm) checks a.rkt,<br>
&gt;&gt;&gt;&gt; &gt; finds<br>
&gt;&gt;&gt;&gt; &gt; the dependency to b.rkt, notices the change in b.rkt (by calculating a<br>
&gt;&gt;&gt;&gt; &gt; checksum over the whole dependency tree if i remember correct) and<br>
&gt;&gt;&gt;&gt; &gt; therefore<br>
&gt;&gt;&gt;&gt; &gt; recompiles a.rkt AND b.rkt.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Version 3 should as far as i understand never differ, assumed raco<br>
&gt;&gt;&gt;&gt; &gt; make<br>
&gt;&gt;&gt;&gt; &gt; works.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Tobias<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; On Thu, 21 Mar 2013 06:23:24 +0100, Eric Dobson<br>
&gt;&gt;&gt;&gt; &gt; &lt;<a href="mailto:eric.n.dobson@gmail.com">eric.n.dobson@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; I&#39;m trying to understand what are the guarantees that raco make is<br>
&gt;&gt;&gt;&gt; &gt;&gt; meant to provide. I&#39;m going to limit this to simple programs, no<br>
&gt;&gt;&gt;&gt; &gt;&gt; fancy<br>
&gt;&gt;&gt;&gt; &gt;&gt; dynamic requires, or trying to trick the compiler.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; In the following scenario:<br>
&gt;&gt;&gt;&gt; &gt;&gt; 1. Edit files<br>
&gt;&gt;&gt;&gt; &gt;&gt; 2. run &#39;raco make &lt;files&gt;&#39;<br>
&gt;&gt;&gt;&gt; &gt;&gt; 3. Change files<br>
&gt;&gt;&gt;&gt; &gt;&gt; I expect all of these to have the same effect during the running of<br>
&gt;&gt;&gt;&gt; &gt;&gt; phase 0 when running racket.<br>
&gt;&gt;&gt;&gt; &gt;&gt; 4. racket &lt;main-file&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; or<br>
&gt;&gt;&gt;&gt; &gt;&gt; 4. raco make &lt;files&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; 5. racket &lt;main-file&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; or<br>
&gt;&gt;&gt;&gt; &gt;&gt; 4. rm -rf compiled/<br>
&gt;&gt;&gt;&gt; &gt;&gt; 5. raco make &lt;files&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; 6. racket &lt;main-file&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; I can make version 1 and 2 differ with the following program:<br>
&gt;&gt;&gt;&gt; &gt;&gt; a.rkt<br>
&gt;&gt;&gt;&gt; &gt;&gt; #lang racket<br>
&gt;&gt;&gt;&gt; &gt;&gt; (require &quot;b.rkt&quot;)<br>
&gt;&gt;&gt;&gt; &gt;&gt; (macro)<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; #lang racket<br>
&gt;&gt;&gt;&gt; &gt;&gt; (provide maco)<br>
&gt;&gt;&gt;&gt; &gt;&gt; (define-syntax (macro stx)<br>
&gt;&gt;&gt;&gt; &gt;&gt;   #&#39;&#39;version1)<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Where the edit is changing version1 to version2. I can also replicate<br>
&gt;&gt;&gt;&gt; &gt;&gt; this with a function and not a macro.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; I thought I could make version 2 and version 3 differ, but cannot<br>
&gt;&gt;&gt;&gt; &gt;&gt; seem<br>
&gt;&gt;&gt;&gt; &gt;&gt; to replicate it now, but it would be helpful to know if I see<br>
&gt;&gt;&gt;&gt; &gt;&gt; something that is fixed by clearing the compiled directories.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; My understanding was that racket used the same logic as raco make on<br>
&gt;&gt;&gt;&gt; &gt;&gt; whether or not to use the compiled versions versus recompiling, and<br>
&gt;&gt;&gt;&gt; &gt;&gt; this seems to refute that. Can someone give some insight on what I<br>
&gt;&gt;&gt;&gt; &gt;&gt; should be expecting?<br>
&gt;&gt;&gt;&gt; &gt;&gt; ____________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;   Racket Users list:<br>
&gt;&gt;&gt;&gt; &gt;&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; --<br>
&gt;&gt;&gt;&gt; &gt; ---------------------------------------------------------<br>
&gt;&gt;&gt;&gt; &gt; Tobias Hammer<br>
&gt;&gt;&gt;&gt; &gt; DLR / Robotics and Mechatronics Center (RMC)<br>
&gt;&gt;&gt;&gt; &gt; Muenchner Str. 20, D-82234 Wessling<br>
&gt;&gt;&gt;&gt; &gt; Tel.: 08153/28-1487<br>
&gt;&gt;&gt;&gt; &gt; Mail: <a href="mailto:tobias.hammer@dlr.de">tobias.hammer@dlr.de</a><br>
&gt;&gt;&gt;&gt; ____________________<br>
&gt;&gt;&gt;&gt;   Racket Users list:<br>
&gt;&gt;&gt;&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; ---------------------------------------------------------<br>
&gt; Tobias Hammer<br>
&gt; DLR / Robotics and Mechatronics Center (RMC)<br>
&gt; Muenchner Str. 20, D-82234 Wessling<br>
&gt; Tel.: 08153/28-1487<br>
&gt; Mail: <a href="mailto:tobias.hammer@dlr.de">tobias.hammer@dlr.de</a><br>
</div></div></blockquote></div><br></div></div>