-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Binary dependency from SpecialFunctions #37
Comments
What is the error you're seeing? There is no reason why this shouldn't work.
It's actually because libquadmath is bundled with Julia, as it is part of the gfortran runtime. |
Can post exact error message when back at work. But the problem is that within our corporate environment, packages are installed on a central server, and clients load code from this central server. This works fine for Julia-only code, but for binaries it can be a problem. (This is true for homogeneous networks, but especially if different architectures are involved). Of course, in the "normal" case where packages are installed on each individual machine, things work fine, but binary dependencies do limit deployment options, especially for clusters in corporate environments where users might not have full control. I guess I can work around this by maintaining our own copy of In the issue linked above (sunoru/RandomNumbers.jl#53), @ChrisRackauckas explains a similar issue with
Ah thanks, that explains why this is not an issue. |
Not anything more specific. If you have a binary, you can't copy-paste that package folder to a computer behind a firewall if it has a different operating system. Just those normal edge cases where it's nice to be pure Julia. Not a huge deal, but something I would at least like to fix for DiffEq. |
Quadmath does not really depend on SpecialFunctions, but supplements it with appropriate methods. This was previously handled as conditional by means of runtime imports using Requires.jl (a design chosen to avoid issues like this, then hypothetical). Unfortunately the package manager does not fully understand Requires, so the prior implementation led to misleading warning messages. The author of DoubleFloats was sufficiently distressed by such warnings to write #35. |
Yes, which is why I suggested above that
RandomNumbers appears to conditionally import a module using the new package manager. |
I think your suggestion is a good one; it would also facilitate development of a seamless pure-Julia implementation for common types. Thanks for pointing to RandomNumbers; it uses a more current approach to Requires which avoids the warnings. I will try to correct the usage here soon if someone else doesn't do it first. |
Thanks for the PR @RalphAS cc @simonbyrne, @JeffreySarnoff Not really sure where to post this, but I have been thinking a bit more about this, especially now that Some random thoughts: There has been much discussion about what goes in Base vs stdlib vs packages, and I don't really want to rehash all the different aspects here, except to note that a binary dependency in Base or stdlib ships with the Julia installation. So could this issue be resolved by bringing Maybe Is |
For |
Yes, I understand that, which is why I suggested above that The current situation is that Distributing |
I agree with your "longer-term" plan; and agree more vociferously if it be done sooner rather than "longer". |
Yes sooner is better. Interestingly, implementing the “longer-term” plan alone would result in the unusual situation where the SpecialFunctions implementation for Float128 is bundled with Julia, while the implementation for Float64 is in an external package. So this issue would be solved for DoubleFloats & Float128, but would still exist for Float64. I still think there’s a case for SpecialFunctions to be distributed with Julia, perhaps as a stdlib. |
As Special Functions is an umbrella term, and there are domain-specific field favorites, it would be very nice to provide the communtiy with multi-practical availability and appicability. One recent approach to the organizational part of is fungrim. I think there another layer to the cake, there ought exist a picker-upper and auto-provisioner for every little thing. |
My understanding of |
I have tagged a new release with #38 included, so that should help address your immediate problems. The medium term plan is to make binary dependencies available via the package resolver (JuliaLang/Pkg.jl#841).
That's not going to happen: since stdlibs need to be backward compatible, it is exceptionally hard to change or improve them (e.g. the LibGit2 and SparseArrays package are a frequent source of complaints in this regard). This will hopefully change once we have stdlib versioning, but then they would be "just" packages.
There is no appetite for bundling code with Julia that isn't required to run Julia itself: since it would be untested, it is a recipe for unintentional breakage. Also, why should libopenspecfun be special in this regard?
This is simply an accident of having libquadmath unintentionally bundled. There is no guarantee it will stay that way, and it may well go away in future releases, in which case this package will have to get its own binary dependency. Note that only a handful of special functions are provided by libquadmath. For your specific circumstances, you may want to look into JuliaTeam (disclaimer: this is a product from my former employer, in which I have a very minor equity stake). |
OK fair enough.
Yes, thank you. Unfortunately, the latest version of |
Sure -- no problem. What? I can follow directions.I removed SpecialFunctions from the [deps] section, it was in the [extras] section already. I created a file that begins
then There may be touch-ups needed before these changes make happen what you expect to happen. |
OK this is terrific. Thanks! |
I note that the latest release of
Quadmath
has a hard dependency onSpecialFunctions
which has a binary dependency.Similar to https://github.com/sunoru/RandomNumbers.jl/issues/53, this makes it harder to deploy in some environments.
In my case, I'm using
DoubleFloats
which depends onQuadmath
which breaks because ofSpecialFunctions
when running parallel simulations across a cluster.Is there some way to conditionally load
SpecialFunctions
?Or some other way to avoid this binary dependency.
I guess splitting
SpecialFunctions
intoSpecialFunctionsBase
(function headers) andSpecialFunctions
(implementation) could also work?(As an aside, I presume
libquadmath
doesn't present the same problem because it is a system, rather than package dependency? Is this correct?)The text was updated successfully, but these errors were encountered: