> On 25 Jan 2021, at 11:40, Boris Kuznetsov <m...@achempion.com> wrote: > > Recompilation (and delay) on every new run seems like a major issue. > > Probably, if you call `Mix.install/?`, then you should pass the target > directory to cache compiled dependencies. > > By default it can use `_build` as all current mix projects.
The fake Mix project contains both deps/ and importantly _build folders so recompilations won’t happen once a given set of dependencies given to Mix.install is cached. Recompilations would only happen if the dependencies change as is the case of `:path` dependencies. It’s actually pretty cool that `Mix.install [{:foo, path: “~/src/foo”}]` works out of the box and would recompile on start if that dep changed. > >> On 21 Jan 2021, at 17:48, José Valim <jose.va...@dashbit.co >> <mailto:jose.va...@dashbit.co>> wrote: >> >> > The latter solution could most easily be solved by using /tmp and making a >> > new folder each iex instance that calls mix install (possibly also >> > respecting the cache dir flag options) >> >> Good points. >> >> That's kind of how the current implementation works. The cache is in tmp and >> the cache key is the MD5 of the deps given to install. This means that the >> cache is most likely to be used only by the current script. So it reduces >> the odds of interference between scripts. Otherwise you will have to fetch >> and compile dependencies every time the script runs, which would be too slow. >> >> Issues like Elixir version and Erlang version can be solved in two ways: 1. >> don't do anything because Mix already solves those or 2. add those to the >> cache key - either as part of the directory structure (my vote) or as part >> of the MD5 computation. >> >> We could also support explicit naming for better control over the cache - >> but I would wait for those until people effectively run into cache issues, >> if ever. :) >> >> >> >> On Thu, Jan 21, 2021 at 3:35 PM Jonathan Arnett <jonarnet...@gmail.com >> <mailto:jonarnet...@gmail.com>> wrote: >> I am also a fan of the proposal. One addendum that I would like to suggest >> is adding a flag to IEx such that a library can be "installed" when the >> shell starts. >> >> e.g. >> iex --install :decimal >> >> On 1/21/21 9:01 AM, Anil Kulkarni wrote: >>> I love the general idea. I think it's a great solution for copy/paste/run >>> needs that a scripting language should have. >>> >>> I do have a question about the caching packages across runs. What is the >>> motivation? Is it to increase performance, or are there other reasons? >>> >>> My concern is that inevitably there will be issues with the cache. It >>> reminds me of global pip requirements, global npm installs etc. >>> >>> Some issues I have personally run into with these solutions ( python and >>> js) include: >>> >>> 1) the cache size increasing and needing to manually trim it. Consider >>> popping a shell into a production environment to fix an issue. You >>> wouldn'twant to leave stuff behind. >>> >>> 2) Managing dependencies across language upgrades (e.g. updating node to >>> 15.5, what happens to the dependencies? What happens for sxs (side by side) >>> >>> 3. Inconsistencies due to caching, especially with node. E.g. Needing to >>> blow away the cache and download fresh to fix an issue >>> >>> 4. Fire corruption due to other programs needing to nuke the cache >>> >>> 5. Issues that arise when backing up and then trying to restore to a >>> different home folder (I had a python dependency hard code the path an >>> install) >>> >>> 6. File permission changes, especially when switching between different >>> users on chroot'd terminals >>> >>> Some of these issues are going to be a problem anyways, but I think that >>> caching provides another avenue for things go wrong. >>> >>> My suggestion would be to either add explicit cache management >>> functionality to elixir - including which path it lives, and blowing away >>> the cache or to not use one for now. >>> >>> The former could look like this: >>> ELIXIR_CACHE_DIR=/foo iex >>> (eg set an environment var then call iex) or with parameters passed in iex >>> --cache-dir >>> iex --clear-cache >>> >>> The latter solution could most easily be solved by using /tmp and making a >>> new folder each iex instance that calls mix install (possibly also >>> respecting the cache dir flag options) >>> >>> -Anil >>> >>>> On Jan 21, 2021, at 05:02, Felipe Stival <v0id...@gmail.com> >>>> <mailto:v0id...@gmail.com> wrote: >>>> >>>> >>>> +1 for this proposal. >>>> >>>> On Thu, Jan 21, 2021, 09:54 Jon Rowe <m...@jonrowe.co.uk >>>> <mailto:m...@jonrowe.co.uk>> wrote: >>>> I plus one this proposal, it’s similar (for scripts at least) to what Ruby >>>> has with bundler inline mode, I like this because such techniques allow >>>> you to create single file reproductions of issues, which are great for bug >>>> reports in PRs. >>>> >>>> Cheers >>>> Jon >>>> ---------------- >>>> m...@jonrowe.co.uk <mailto:m...@jonrowe.co.uk> >>>> https://jonrowe.co.uk <https://jonrowe.co.uk/> >>>> >>>> On 21 January 2021 at 12:18, eksperimental wrote: >>>>> `Mix.install(:decimal)` should also work out of the box IMO. >>>>> >>>>> On Thu, 21 Jan 2021 03:18:44 -0800 (PST) >>>>> "woj...@wojtekmach.pl <mailto:woj...@wojtekmach.pl>" >>>>> <woj...@wojtekmach.pl <mailto:woj...@wojtekmach.pl>> wrote: >>>> -- >>>> 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 >>>> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/dejalu-217-a7302266-156c-46d8-86f9-089e2065af2b%40jonrowe.co.uk >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/dejalu-217-a7302266-156c-46d8-86f9-089e2065af2b%40jonrowe.co.uk?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 >>>> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/CAKC64%2ByRtG-XGWkSADPXHzOLZ8AJ4g73DxEjC_8Jp1b3-sHKAg%40mail.gmail.com >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAKC64%2ByRtG-XGWkSADPXHzOLZ8AJ4g73DxEjC_8Jp1b3-sHKAg%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 >>> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/0100017725401617-8cdc5c5f-8434-42d6-a3b5-0272cbf65824-000000%40email.amazonses.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/0100017725401617-8cdc5c5f-8434-42d6-a3b5-0272cbf65824-000000%40email.amazonses.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 >> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/62020d79-4f44-38d5-65e7-a786808da633%40gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/62020d79-4f44-38d5-65e7-a786808da633%40gmail.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 >> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JFHs6stz5sHvFabZXP%2BS3HXMLN8PKd%2BVNJ%3DmwbF8-J_A%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JFHs6stz5sHvFabZXP%2BS3HXMLN8PKd%2BVNJ%3DmwbF8-J_A%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 > <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/1A4436D3-17AC-41BB-94CB-57F45D0ECF37%40achempion.com > > <https://groups.google.com/d/msgid/elixir-lang-core/1A4436D3-17AC-41BB-94CB-57F45D0ECF37%40achempion.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/B3846436-9C8A-4F4D-A136-B2EEB8E3F914%40wojtekmach.pl.