From a quick glance at the current source, it looks like these math dependencies are mostly separate from the core language, and are more or less extra libraries implemented in Julia accompanying the standard library. Am I correct in reckoning that it would be possible to split the advanced math functionality using these dependencies into standalone Julia packages? Is that something already being worked on? Has anyone managed to trim them out?
Basically, what I'm going for is a minimal Julia: just enough for basic functionality, while allowing for the extra math functionality when wanted/needed. Is that doable?
sure it's possible. in theory, the only dependencies you need are llvm, libuv, and utf8proc. it's just unclear what benefit would result. it would make it harder for the end user to use the libraries (since they would not have them by default). the distribution files is only marginally larger, and we don't count harddrive space in megabytes anymore. in short, nobody has shown a truly compelling reason to put effort into creating and maintaining such an option.
It might be worth nothing that make is parellizable over all of the dependencies you’re mentioning. On a machine with 32 cores, compiling Julia from scratch takes less than 5 minutes.— John
sure it's possible. in theory, the only dependencies you need are llvm, libuv, and utf8proc. it's just unclear what benefit would result. it would make it harder for the end user to use the libraries (since they would not have them by default). the distribution files is only marginally larger, and we don't count harddrive space in megabytes anymore. in short, nobody has shown a truly compelling reason to put effort into creating and maintaining such an option.
Right, also note that the size breakdown from that, IIRC, is about:12MB julia sysimg and dylib25MB openblas (drops to 10MB without dynamic arch)12MB llvmThe rest is just noise
Providing different versions is not a good idea but fortunately, that wouldn't be required: people needing a trimed-down, non-linalg-oriented version of Julia for instance could just download the sources and change a few switches. But by default, everything is included.
In addition to making Julia more portable and to clean up the namespace a little bit, this would allow easier module swapping (as Tobi wrote) which in turn could help to avoid the dead batteries problem:
http://radar.oreilly.com/2013/10/dead-batteries-included.html
which I find important in the long term. That also means that if one wants to improve one of the newly created LinAlg/Optimize/... module, one can clone it and work on that and switch between implementations using imports/usings (instead of having two different versions of Julia itself).
As I've read elsewhere, this is also a way to have people consider Julia more as a general-purpose programming language (with first class numerical processing constructs and abilities!): no more math stuffs in the namespace (even if those are just **one** 'using' away ;).
Seeing Julia as a general-purpose language may not seem very interesting at first sight (and some people here may not like the idea) but this could (yes could, not should) trigger many new contributions in fields far from science and engineering.
Having people in their respective fields working on (possibly native) crypto, ORMs, network IO/web frameworks, GUIs, etc. implementations would be fantastic.
You've built far more than a DSL, now accept the consequences. :)
But those were really just a few examples of the !(number crunching) set. The whole point is that if Julia can be *seen* as a general purpose language instead of a matlab replacement, people will naturally come and write things like database handlers or whatever for the others. If, as a user, I think Julia is a good fit for a web server backend, that means that YOU wouldn't have to write a DB handler if you don't need it because I would do it. That also means that then YOU can spend more time on things you actually enjoy/need/want.
Back to the thread that also means that BLAS for instance has to go away should the developer request it at compile time. Same things for any non-required lib.
But as I understand it, that would currently require to keep a different version of Base for each combination of missing libs (or use conditional branches everywhere). Whereas if everything related to BLAS/libX is in its own Julia module it's much easier: if you don't need the features provided by a lib, you don't need the corresponding Julia module (for BLAS, it could be named LinAlg.jl). Should you need a few pieces not directly depending on the given lib, you could just reimplement a minimal LinAlg.jl module. Should you find a better implementation of libX with a different API, you could write and release a brand new module as a replacement for the classical one instead of trying to have your pervasive changes to Base.jl included in the next major release in X months from now.