# Julia packages that have no equivalents in other languages?

**URL:** <https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646>\
**Category:** Teaching & Outreach\
**Created:** [July 14, 2021, 4:59pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646 "2021-07-14T16:59:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Erasmo98](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/erasmo98/32/26098_2.png) [@Erasmo98](https://discourse.julialang.org/u/Erasmo98)\
**Post date:** [July 14, 2021, 4:59pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/1 "2021-07-14T16:59:02Z")

</div>

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. (:

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 14, 2021, 5:04pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/2 "2021-07-14T17:04:56Z")

</div>

> [@Erasmo98](#):
>
> For example, Jupyter notebooks can be used in both Python and R

Julia also has Jupyter (it’s the “Ju” in Jupyter).

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [July 14, 2021, 5:18pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/3 "2021-07-14T17:18:09Z")

</div>

Relative to Python:

- Pluto
- Julia’s threading model
- ThreadsX, which makes it pretty trivial to point dozens of cores at a single data-parallel problem without needing tons of RAM
- TimerOutputs and BenchmarkTools have no real equivalents in Python

---

<div class="post-metadata">

**Author:** ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)\
**Post date:** [July 14, 2021, 5:21pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/4 "2021-07-14T17:21:00Z")

</div>

`@code_native` , `@turbo`, `tullio.jl`

---

<div class="post-metadata">

**Author:** ![Datseris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/datseris/32/13406_2.png) [@Datseris](https://discourse.julialang.org/u/Datseris)\
**Post date:** [July 14, 2021, 5:26pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/5 "2021-07-14T17:26:30Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [July 14, 2021, 5:45pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/6 "2021-07-14T17:45:17Z")

</div>

The obvious one: `DifferentialEquations.jl`

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [July 14, 2021, 6:09pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/7 "2021-07-14T18:09:03Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Datseris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/datseris/32/13406_2.png) [@Datseris](https://discourse.julialang.org/u/Datseris)\
**Post date:** [July 14, 2021, 7:03pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/8 "2021-07-14T19:03:49Z")

</div>

> [@jzr](#):
>
> Python has has several scientific template/workflow libraries, I’m not sure which is closest to DrWatson

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](https://joss.theoj.org/papers/10.21105/joss.02673) (section “Comparison with other software”)

---

<div class="post-metadata">

**Author:** ![ToucheSir](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/touchesir/32/14411_2.png) [@ToucheSir](https://discourse.julialang.org/u/ToucheSir)\
**Post date:** [July 14, 2021, 7:14pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/9 "2021-07-14T19:14:40Z")

</div>

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/](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.

---

<div class="post-metadata">

**Author:** ![greatpet](https://avatars.discourse-cdn.com/v4/letter/g/e495f1/32.png) [@greatpet](https://discourse.julialang.org/u/greatpet)\
**Post date:** [July 14, 2021, 7:59pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/10 "2021-07-14T19:59:04Z")

</div>

I find [ProfileView.jl](https://github.com/timholy/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?

---

<div class="post-metadata">

**Author:** ![Juan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juan/32/7657_2.png) [@Juan](https://discourse.julialang.org/u/Juan)\
**Post date:** [July 14, 2021, 8:07pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/11 "2021-07-14T20:07:26Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)\
**Post date:** [July 14, 2021, 8:15pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/12 "2021-07-14T20:15:06Z")

</div>

> [@greatpet](#):
>
> I find [ProfileView.jl](https://github.com/timholy/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?

I still think that the profile visualization provided by kcachegrind is better than flamegraphs:

 ![kcachegrind](https://global.discourse-cdn.com/julialang/original/3X/7/7/77902cce7ffb4fe93c502a00ad75c9451c9acc29.png)  
Although it should be possible to adapt the Julia profiling output to the callgrind format ([KCachegrind](http://kcachegrind.sourceforge.net/html/CallgrindFormat.html))…

On the Python side, I found the speedscope flamegraph visualization very convenient:

 ![speedscope_left](https://global.discourse-cdn.com/julialang/original/3X/4/c/4c18ab1b8c252887fefc4b7811c24cedafc28f88.png)

Finally, I found the RStudio profiling information integration (little bars next to source code lines) better than what is available in Julia-Vscode:

 ![Rstudio](https://global.discourse-cdn.com/julialang/original/3X/b/5/b567a08d2df14eba4a2c7729da33b023aff5d4d4.png)

(screen copy from [https://support.rstudio.com/hc/en-us/articles/218221837-Profiling-R-code-with-the-RStudio-IDE](https://support.rstudio.com/hc/en-us/articles/218221837-Profiling-R-code-with-the-RStudio-IDE))

IMHO Julia’s profiling tools are good but still can improve borrowing neat ideas from outside 😉

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [July 14, 2021, 8:19pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/13 "2021-07-14T20:19:07Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [July 14, 2021, 8:33pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/14 "2021-07-14T20:33:52Z")

</div>

I believe [GitHub - GunnarFarneback/LongestPaths.jl: Julia package for finding the longest simple path in a graph.](https://github.com/GunnarFarneback/LongestPaths.jl) has no equivalent (and if there is something that can compete I’d very much love to know) but a) it’s extremely niche and b) it wouldn’t be that hard to replicate it in various other languages.

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [July 14, 2021, 8:34pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/15 "2021-07-14T20:34:37Z")

</div>

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`.

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [July 14, 2021, 8:39pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/16 "2021-07-14T20:39:07Z")

</div>

Maybe Networkx’s dag\_longest\_path?

[https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.dag.dag\_longest\_path.html](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.dag.dag_longest_path.html)

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [July 14, 2021, 8:41pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/17 "2021-07-14T20:41:23Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [July 14, 2021, 8:42pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/18 "2021-07-14T20:42:55Z")

</div>

> [@jzr](#):
>
> Maybe Networkx’s dag\_longest\_path?
> 
> [dag\_longest\_path — NetworkX 3.2.1 documentation](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.dag.dag_longest_path.html)

No, longest path in a directed acyclic graph has a way smaller complexity than when you allow cycles and is not a challenging problem at all.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [July 14, 2021, 9:07pm UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/19 "2021-07-14T21:07:24Z")

</div>

@GunnarFarneback, sorry for the basic question, but what are the applications of LongestPath.jl?

---

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [July 15, 2021, 2:12am UTC](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646/20 "2021-07-15T02:12:39Z")

</div>

> [@Satvik](#):
>
> you can pass code as a string.

Seems to be an issue with Python not having metaprogramming. In R and Julia it’s kinda easy to pass code in.

Python decorators doesn’t do it.

That’s why Jupyter (or is it ipython) have this %timeit thing which is basically Julia’s macros, but less powerful and customizable.

[Next page](https://discourse.julialang.org/t/julia-packages-that-have-no-equivalents-in-other-languages/64646.md?page=2)
