This question may be tangentially related, but I'll bring it up here: It seems that, even if it is just the last module that has to compile that fails, nothing is cached/saved, and on subsequent compilations, the entire application will need to be recompiled. I'm unsure if there are technical limitations that cause that to be true, though.
On Monday, June 21, 2021 at 10:01:56 AM UTC-4 Allen Madsen wrote: > +1 > > I've noticed mtime changes in some scenarios related to CI and docker, > that causes things to be recompiled again even though there's no other > change to the files. > > Allen Madsen > http://www.allenmadsen.com > > > On Mon, Jun 21, 2021 at 3:29 AM Marc-André Lafortune < > marc-...@marc-andre.ca> wrote: > >> >> >> On Mon, Jun 21, 2021 at 2:54 AM José Valim <jose....@dashbit.co> wrote: >> >>> Hi Marc-André! >>> >>> There is no particular reason, this is a functionality that could be >>> added. In particular we can continue checking the mtime and file size but >>> compare the contents if the mtime changed but the file size is the same. >>> >> >> Yep 👍 >> >> >>> I also think we should update the mtime anyway, even if the hash is the >>> same. WDYT? >>> >> >> Yes, otherwise we might keep re-hashing the file over and over again. >> >> >>> Feel free to open up an issue or, if you want to tackle it, even send a >>> PR! >>> >> >> Awesome. I'll check if I can come up with a PR in the next few days, and >> if not I'll create an issue. >> >> Thanks. It's so awesome to get such quick feedback 💛 >> >> >>> >>> Thanks! >>> >>> On Mon, Jun 21, 2021 at 8:20 AM Marc-André Lafortune < >>> marc-...@marc-andre.ca> wrote: >>> >>>> I'm a newbie, sorry if this has been asked before but I couldn't find >>>> anything. >>>> >>>> Currently, elixir uses last modification dates to determine files that >>>> need to be recompiled. >>>> >>>> ``` >>>> $ mix compile >>>> # ... >>>> $ touch lib/some/file.ex >>>> $ mix compile >>>> Compiling <n> files (.ex) >>>> ``` >>>> >>>> Could Elixir not verify that in addition to a modification time change, >>>> that the actual text content has changed by comparing a hash of it? In the >>>> example above, the file `lib/some/file.ex` would be hashed a second time, >>>> but no recompilation would occur. >>>> >>>> Currently, many operations may change the last modification date even >>>> if no content at all has changed: >>>> * switch to a different branch, switch back >>>> * do an interactive rebase: >>>> - to rewrite a commit message, >>>> - to reorder some commits >>>> - to squash some commits together >>>> - etc. >>>> >>>> While the content of the files does not change (at all) in these >>>> examples, some very long recompilations may occur because elixir only >>>> relies only on modification times and not on file hashes. >>>> Hashing a file is orders of magnitude faster than compiling it, and >>>> realizing that the potentially large number of compile-time dependencies >>>> of >>>> a given file do not need to be recompiled is infinitely faster than >>>> recompiling them all for nothing. >>>> >>>> I am presuming that hash collisions are deemed so incredible unlikely >>>> to be acceptable, but if not, then I'd ask the same question but with >>>> using >>>> the complete content of the source file instead of a hash of it. Copying a >>>> source file is again an order of magnitude faster than the time it takes >>>> to >>>> recompile it. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "elixir-lang-core" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to elixir-lang-co...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/e7a68d8d-0102-483d-a4ec-58849eb88ef6n%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/e7a68d8d-0102-483d-a4ec-58849eb88ef6n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "elixir-lang-core" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/elixir-lang-core/8-30JVn_8M0/unsubscribe >>> . >>> To unsubscribe from this group and all its topics, send an email to >>> elixir-lang-co...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L-_BRhadhXVckZ5TX4wLqgmxm-iuGHQr4M5Kdq4xM_1w%40mail.gmail.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L-_BRhadhXVckZ5TX4wLqgmxm-iuGHQr4M5Kdq4xM_1w%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to elixir-lang-co...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/CADwvmaWP%2BccDF9QRdDfL8_B8fXuFXeFSL-fV0vLgOVqFH8LiHw%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/CADwvmaWP%2BccDF9QRdDfL8_B8fXuFXeFSL-fV0vLgOVqFH8LiHw%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/93dc87b6-6d61-43b9-81aa-5b740a525f15n%40googlegroups.com.