JuliaCall Update: Automated Julia Installation for R Packages
stochasticlifestyle.com
stochasticlifestyle.com
GNU R and Common Lisp (especially Quicklisp) already made these design mistakes, and let's please not repeat them. The initial of friendliness "do everything interactively right in the REPL" quickly gives way to "arggghhh".
Edit: on second thought, I guess there is a fine line to be drawn here. We are already accustomed to R, Python, Node, Ruby, etc. building C stuff at package installation time. I don't have a great sense of where to draw the line, but somehow I feel the Julia convention crosses it.
This was true in the past, but the Julia ecosystem has rapidly moved away from installing anything via system package managers or messing with the system state in hard to understand ways.
Instead, everything goes into the .julia directory under the control of the Julia package manager, and the dependencies for any given project can be reproduced on another machine or OS by copying the Project and Manifest. The same goes for binary dependencies (eg, the result of compiling C/fortran/rust/go code) for which there's some amazing cross compilation tooling and build infrastructure — see https://binarybuilder.org/
At this point, I think Julia projects enjoy really first class portability and reproducibility.
BinDeps [1] which was the first stab at it was very much akin to what you describe in that it would attempt to build or install binary dependencies which would potentially affect the state of your system beyond Julia itself. While favoured by operating system package managers, it puts an enormous burden on package creators as you need to be aware of the state (also across versions) and inner working of each operating system, their package managers, and which dependencies that they pull in.
[1]: https://github.com/JuliaPackaging/BinDeps.jl
This lead to the current approach, BinaryBuilder [2], where binary dependencies are described, cross-compiled, and then distributed and managed in a read-only “story” by the latest iteration of the Julia package manager. While I admit that this comes with drawbacks such as security updates to dependencies falling upon the Julia package maintainers, it more than makes up for it in terms of usability and reproducibility for the end user.
I'm definitely not accustomed to this, and absolutely hate this behavior. Very frequently installing a dependent package or compiling one via one of these package managers is frequently a good way to build it badly, without respecting compiler flags, ignoring system paths, and so on. It's also hard to customize or force the usage of a shared system library which has been built for the purpose.
Ask the package managers of any linux distro how annoying is to handle unbundling in these scenarios.
pip too.