183 karma · joined January 15, 2015
It’s still dynamic in nature. But you can tune how much staticity you want. The spectrum goes from Python to C in terms of staticity. And with tools like JETLS.jl maturing you get a lot of the benefits static analysis.
The data pipeline ecosystem is starting to rival that of R and Python. The fact that you can just use Julia functions while keeping the performance allows you to avoid those weird vectorization gymnastics. The ML ecosystem is also in a great state. JUMP.jl, Touring.jl, the whole SciML ecosystem, autodiffing and gpu computing are all close to best in class in terms of quality. The NN side of ML is a a bit weaker, but just for lack of developer time investment into that side of the ecosystem.
If you then want to access fully trimmed small executables then you have to start writing Julia similarly to how you write rust.
To me the fact that this is even possible blows my mind and I have tons of fun coding in it. Except when precompiling things. That is something that really needs to be addressed.
Waving around an outdated blogpost as if it would automatically invalidate everything is just silly at this point.
These are very difficult topics to properly talk about and correctly express all the nuance in the feeling that you try to convey, and many authors are quoted because they nailed a particular description, evocative of the feeling an author is trying to express and that he feels he can’t do a better job at explaining.
Similarly to how you can narrate a story through a sequence of pictures you can narrate an idea through a sequence of raw concepts, encapsulated in quotes.
Missing this types of checks is also source of errors in dynamic languages, adding `1+None` as well as `1+nothing` will return an error if not handled properly. If you are absolutely sure your element will be in the array you have to encode it, for example
x = something(findindex([1,2,3], val)) # return value is Int now, or an error.
or even
x === nothing && error("oh no")
are enough for the compiler to correctly infer that x will just be an Int, and remove the Union.
Also, the claim that the only way to check for unfavourable Union types is to visually scan each function is just plainly false. There are many tools to do this sort of checks, just to name a few: @code_warntype, Cthulhu, DispatchDoctor
I do agree though that Julia has mainly users from academia, and therefore is less polished on the more pure software engineering aspects and tooling. But the disclaimer at the end feels just like the author is dismissing the whole language on false premises due to frustration with lack of support/ecosystem for his specific use case.
I will be forever grateful for the time I spent practicing martial arts when I was younger. I was lucky enough to find a master that did not teach the practice as a means to reach agonistic goals but instead as practicing mindfulness and self observation. It was never explicitly told or explained in detail how to do it, it was simply practiced over and over again, indirectly, by checking the positions of your body, legs and arms, are they in the correct position? Am I engaging the correct set of muscles? Does the position feel powerful? Is my attention (ki) flowing in the correct direction, in the right spot? Am I aware of my surroundings and perceptive of my practice partner? We were slowly taught to pay attention, by means of watching ourselves trying to perfect something. Later in life I realized how much of an impact this had on my ability to concentrate, be present, not only in the physical sphere but also in the mental and spiritual or emotional sphere. I slowly began to realize that the real practice of the martial art and striving for the perfect form were always a mean to the real goal of instead practicing mindfulness and perseverence.
To me that is the “art” in martial arts. I am not trying to put them on a pedestal, I believe that this “art” is proper of any activity a human can do, that can become art when it is a means to practice this kind of mindfulness.