GLVisualize.jl has 2D and 3D plotting directly on the GPU, so is lightening fast (or at least as fast as copying data to the GPU).
I believe future versions will interact with GPUArrays.jl
GLVisualize.jl has 2D and 3D plotting directly on the GPU, so is lightening fast (or at least as fast as copying data to the GPU).
I believe future versions will interact with GPUArrays.jl
I’m in favor of compiling Julia v1.0 code to executables. Executables and web-servers are useful for sharing methods with scientists who do not have programming skills.
a few random points:
Indeed I fully agree that for reproducible research to have the source code is the most important thing. I’ve never said otherwise. As mentioned before by @oxinabox there is always a need for source code and I second that.
Please let me explain what I meant under relevancy though.
My workflow is very simple and straight forward:
raw experimental data processing -> data to work with
Once all work is done on code I’m able to apply same “black box” (version controlled) on any data from my experiment.
That “black box” contains all possible outside packages dependencies at the time the source code was properly tested and finalized. This will assure that if there is some breaking update on any package it will not break the workflow.
Executable is a snapshot of the code that can be indeed further deployed and distributed to other colleagues that are not as skilled in compiling the code.
Definitely not a blocking 1.0 feature.
String concatenation with +
.
Thought of one more: easier to reload (or possibly auto-reload) code when I modify it. I’m struggling quite a bit with this. ClobberingReload
or the Junolab workflow are supposed to solve this, but I find them difficult to use or error-prone.
So I pretty much end up restarting Julia all the time.
Doing this comprehensively in julia can be reduced to the halting problem.
And is thus impossible.
It can also be trivially shown that the type of a variably is not nesc deterministicly known at compile time.
Eg x=ones(now > 2018 ? Int32, Float64)
Doing this partially, where it is possible is either, an optimisation, or part of linting.
Since it can’t be done with certainty you can’t base behavior or errors off of it.
(Julia, unlike static languages, does not require all types to be inferable)
But when the types are given by the programmer (for example in all function arguments) then I’d like to know about violations against the given types at compile time rather than runtime (if possible. Maybe it’s not possible due to multiple dispatch…).
Also languages like Scala (& I think Haskell) let the compiler issue an error when it cannot resolve the type via inference. This error basically says that the user should add a type annotation. That system works in practice.
@Steven_Sagaert: see this issue:
I wondered now for some time: Why didn’t Julia have return type definition from the beginning? What is the benefit of type-unstable code?
Please show me a use-case for this.
Lots of good points, +1 from me on most of what’s listed here.
One thing I would really like to see moved into Base
is MacroTools.jl. It seems important to make everyone aware of it and to guarantee its maintenance, and it would be nice if most of the macro code sitting around in the ecosystem used it, because frankly macro code that doesn’t use it can sometimes be absolutely horrendous (and oddly “non-Julian”).
The only thing I miss about python is the debugging, so having a good debugger is something I very badly want. The debugger seems to have been completely abandoned, is that the case?
I’m not sure I understand why compiled binaries are so important to people.
I emphatically agree with @Tamas_Papp, if one can’t reproduce somebody’s results using their source code and data only one should be suspicious of the result. If in the course of my research a collaborator told me that I had to use a particular compiled binary it would make me very uncomfortable and I would not be willing to conduct research that way. I would even go as far as to say that I would only trust a result if I could make changes to the source code and see that the result depends on those changes in a reasonable way.
The only use I can think of for compiled binaries (other than obfuscation) is for guaranteeing no “run-time compilation”, possibly incorporating more extensive compile-time optimizations. While this seems absolutely necessary for, for example, video games, it some how seems less imperative for scientific and numerical purposes. That said, I think we all agree it’s a feature we’d like to have eventually.
Can you quote a single person who is against it? I can’t. It’s just understandably not high on most people’s priority list, since it doesn’t actually effect language usage and most people aren’t compiling code from dynamic languages. Sure, it will be more useful from Julia than other languages, but the ability to use an interactive language non-interactively just doesn’t affect most people.
Jeff mentioned something about automatically binding functions which would fix this. I am not sure if this would actually be breaking though (?), so it might be fine for a minor release instead of 1.0.
Docker? Not sure why people are suggesting that executables are the answer to this when we have much more modern tools for handling scientific reproduciblility issues than “smash it all into a binary that humans can’t read”. @ExpandingMan sums it up pretty nicely.
Plots.jl doesn’t precompile and it lazy loads backends, so it’s not the same at all. These became big issues with some of the changes due to v0.6. There are fixes in the works, like https://github.com/JuliaPlots/Plots.jl/pull/916.
Differentiation between Base and user code was brought up in conversations at JuliaCon and is an interesting topic. Julia is written in Julia, so it uniquely has this problem. A mode to make the debugger ignore Base would be helpful in many cases.
Yes. BinDeps2 was brought up as a Julia 1.x goal in Stefan’s talk.
Did the 265 fix not do this?
@Keno knows about the debugger issues. I think lately he was pretty busy making Julia enter the list of languages which have achieved petascale (what else has? C, C++, Fortran, and Assembler? @dpsanders made a good point that it’s probably a short list).
Again? Why type instability? - #8 by ChrisRackauckas
Notice that @oxinabox’s example is very close to how factorize
works, except branching off of the matrix type. It’s a feature, though the ability to turn on additional checks would be nice.
Every time anyone brings it up, the response is “it shouldn’t be necessary” or “there’s no use case for it”, despite people in the community asking for it about twice a month. That’s what I mean by “allergic”, which doesn’t necessarily mean “against it”.
After all, I quite enjoy ice cream, but the day after not so much.
Let’s stop the discussion around executables and move on to other more interesting features?
It is a well known fact that:
To all of you that stayed on-topic, a big thanks! Really good list of features, I am bookmarking all of them.
The whole data stack deserves attention. I am delaying my use of DataFrames as much as I can because everything is constantly changing. From JuliaCon 2017, I saw at least 3 presentations on DataFrames, Queries, Databases, etc. We need a comprehensive framework for manipulating/storing/plotting data in Julia.
The debugger isn’t abandoned - it’s maintained by Keno, who has been busy on Celeste.jl recently. It’s going to be updated for 0.6.
I don’t know for certain, but it seems likely that the new financing Julia Computing obtained will partially be used to support the debugger as well.