I’m going to give a talk to students with experience in Python and R about the advantages of Julia. I already have most of the talk but would like to have an argument related to existing Julia packages.
I know Julia is young and doesn’t have as many packages as Python. However, I think a good argument could be that there are things that are difficult to do in other languages, for instance because there is no suitable package. For example, Jupyter notebooks can be used in both Python and R, but only Julia has Pluto.
Are there more examples of Julia packages with no equivalent in other languages? Other ideas on the advantages of Julia packages are welcome. (:
The largest part of DynamicalSystems.jl functionality, I’d say more than 80%, does not exist in any other language, to the best of my knowledge. DrWatson.jl has no equivalent in other languages. DynamicalBilliards.jl as well.
This question is probably hard to answer because most of us only know a limited number of languages in depth. Python has has several scientific template/workflow libraries, I’m not sure which is closest to DrWatson. Python’s equivalent of BenchmarkTools is pyperf.
I would expect that more than single packages, pairs of packages in Julia work together in ways that are probably not found in other languages, because of multiple dispatch.
That’s true, but none of them is close enough to DrWatson. We outline this in more detail in our paper if you are interested: https://joss.theoj.org/papers/10.21105/joss.02673 (section “Comparison with other software”)
I agree, looking at groups of packages for a specific workflow also makes it easier to draw comparisons because there will be more overlap. For example, https://polynote.org/ predates Pluto, but has far poorer interop with the rest of the ecosystem because of its own internal architecture and how messed up Python packaging is.
I find ProfileView.jl to be awesome, for providing a macro for quickly generating flame graphs, which helps me optimize the code. Is there anything as user-friendly in the C/C++ world?
JuMP, OnlineStats, Turing, Flux, IterativeSolvers, Transducers, Soss, InfiniteArrays, Octavian, LoopVectorization, KissABC, Yao, Yota, DifferentialEquations,… may have some equivalents in other languages but the Julia version is considered very good.
PD: But unfortunatelly we also miss many other important packages: Multiple Imputation, Metaanalysis, Advanced survival models…
I wouldn’t say pyperf is equivalent to BenchmarkTools; one of the major points of Julia’s benchmarking is that you can use it with arbitrary expressions, without changing the syntax of your existing program. pyperf doesn’t really come close to that, you can benchmark functions, or you can pass code as a string.
The syntax is a bit different in Python: in Julia we wrap the expression e like @btime e and in Python we wrap like timeit(stmt="e"). Or in IPython it’s %timeit e.
I agree that IPython can do it, but that’s a fairly narrow environment.
I would say that the version where you have to wrap it in a string is much worse (e.g., it doesn’t play nicely with statements that already include strings), and enough overhead that I’ve found myself using @btime constantly in Julia while almost never using an equivalent in Python. That’s a matter of opinion though, I can certainly see how you or others would disagree.