Yes, Sam. I don't think anyone is happy with the status quo.<div><br></div><div>Perhaps the tradeoffs have changed since last time a careful investigation happened. </div><div><br></div><div>Robby<span></span><br><br>On Saturday, April 5, 2014, Sam Tobin-Hochstadt <<a href="mailto:samth@cs.indiana.edu">samth@cs.indiana.edu</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I don't think this is a good answer for Racket. Certainly the docs<br>
don't say that you need to always do this if you want your program to<br>
work right. If Racket doesn't work right in the presence of stale<br>
compiled filed, then it should just error in those cases, rather than<br>
doing the wrong thing. Of course it would be better to work correctly<br>
in that case, but this is a hard problem, and it's reasonable to not<br>
have a solution. But having the system act like it works when it<br>
doesn't is worse.<br>
<br>
Sam<br>
<br>
On Sat, Apr 5, 2014 at 8:13 AM, Robby Findler<br>
<<a>robby@eecs.northwestern.edu</a>> wrote:<br>
> raco make x.rkt && racket x.rkt<br>
><br>
> Robby<br>
><br>
><br>
> On Fri, Apr 4, 2014 at 11:16 PM, Eric Dobson <<a>eric.n.dobson@gmail.com</a>><br>
> wrote:<br>
>><br>
>> Great that explains it and with that information I was able to<br>
>> simplify my test case to<br>
>><br>
>> tmp.rkt<br>
>> #lang racket<br>
>><br>
>> (require "tmp2.rkt")<br>
>><br>
>> (define-syntax (go stx)<br>
>> (foo))<br>
>><br>
>> (go)<br>
>><br>
>> tmp2.rkt<br>
>> #lang racket<br>
>><br>
>> (provide (for-syntax foo))<br>
>><br>
>> (begin-for-syntax<br>
>> (define (foo) #'3))<br>
>><br>
>> So now the question is how do I run my code so as to not be bit by<br>
>> this? I want a command to run my program that is both fast to run and<br>
>> correct with regards to my source. My previous assumption was that the<br>
>> zo file's logic was safe if I wasn't trying to break it but I now know<br>
>> better. Is my only option to either always compile or never compile?<br>
>><br>
>><br>
>> On Fri, Apr 4, 2014 at 7:15 AM, Matthew Flatt <<a>mflatt@cs.utah.edu</a>> wrote:<br>
>> > If I understand the question:<br>
>> ><br>
>> > * With 34c3eed615, "pr12644.rkt" can compile and run.<br>
>> ><br>
>> > * With d29df205f7, "pr12644.rkt" fails to compile.<br>
>> ><br>
>> > * A bytecode form of "pr12644.rkt" compiled with 34c3eed615 can still<br>
>> > run in d29df205f7, because run-time support for "pr12644.rkt" didn't<br>
>> > change.<br>
>> ><br>
>> > * When you tell `racket` to run "pr12644.rkt", it will use a ".zo" for<br>
>> > each of "pr12644.rkt" and its dependencies as long each individual<br>
>> > ".zo" file has a newer timestamp than its ".rkt" file. That is, the<br>
>> > only timestamp comparisons are on individual ".rkt" and ".zo" pairs.<br>
>> ><br>
>> > * When you tell `raco make` to build "pr12644.rkt", it checks<br>
>> > dependencies (via ".dep" file) and compares a ".rkt" file's<br>
>> > timestamp against the times of all of its dependencies, instead of<br>
>> > just checking individual ".rkt" and ".zo" pairs. That's why a `raco<br>
>> > make` in d29df205f7 tries to recompile "pr12644.rkt".<br>
>> ><br>
>> > At Thu, 3 Apr 2014 09:41:19 -0700, Eric Dobson wrote:<br>
>> >> I have seen multiple times changes in TR not getting properly<br>
>> >> propogated to TR programs in my debugging, and I finally have found a<br>
>> >> repeatable example.<br>
>> >><br>
>> >> I am under the impression that if I compile a file and then change a<br>
>> >> (transitive) dependency of it, then it should have to be recompiled,<br>
>> >> but I am not seeing that.<br>
>> >><br>
>> >> Steps to reproduce:<br>
>> >> git checkout 34c3eed6155765a1e457f69194786575128a13a5<br>
>> >> raco setup -D typed-racket typed<br>
>> >> raco make<br>
>> >><br>
>> >> pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/pr12644.rkt<br>
>> >> racket -l tests/typed-racket/succeed/pr12644<br>
>> >><br>
>> >> The test should run successfully and output '(6 7 8 9)<br>
>> >><br>
>> >> Now make the change (rolling forward one commit):<br>
>> >> git checkout d29df205f7bb8347f60c82206b74e3e167e2de24<br>
>> >> racket -l tests/typed-racket/succeed/pr12644<br>
>> >> raco make<br>
>> >><br>
>> >> pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/pr12644.rkt<br>
>> >><br>
>> >> The test runs the first time successfully but fails if you try to<br>
>> >> compile it again. Can someone explain why this is not working like I<br>
>> >> expect?<br>
</blockquote></div>