# Which paper(s) to read on Julia design?

**URL:** <https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864>\
**Category:** Internals & Design\
**Created:** [February 8, 2021, 7:49pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864 "2021-02-08T19:49:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![paulmelis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paulmelis/32/35063_2.png) [@paulmelis](https://discourse.julialang.org/u/paulmelis)\
**Post date:** [February 8, 2021, 7:49pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/1 "2021-02-08T19:49:20Z")

</div>

I want to get a bit more insight into the design of Julia, including details on the language itself, compiler, code generation, etc. I’m not looking for all the gory details, but just enough to understand better what goes on under the hood and some of the design considerations. I started reading “Julia: A Fast Dynamic Language for Technical Computing” from 2012 and it contain lots of very interesting stuff, but I also see quite a few more recent papers. Is starting at the 2012 one a good option, or is there a lot in there that has been changed or superseded? And any recommendations from the newer ones which highlight important changes since then?

Edit: after the 2012 paper quickly read Julia: A Fresh Approach to Numerical Computing (2015) as it was a bit numerically heave. So far I only scanned Julia: dynamism and performance reconciled by design (2018) and Fast Flexible Function Dispatch in Julia (2018) but those looks pretty interesting as well, will read them tomorrow.

---

<div class="post-metadata">

**Author:** ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)\
**Post date:** [February 8, 2021, 8:03pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/2 "2021-02-08T20:03:22Z")

</div>

One source you should definitely check out is the blog at [The Julia Language Blog](https://julialang.org/blog/). This has a mix of things, but some of them are pretty in depth explanation of internals.  
[Extensible broadcast fusion](https://julialang.org/blog/2018/05/extensible-broadcast-fusion/)  
and [More Dots: Syntactic Loop Fusion in Julia](https://julialang.org/blog/2017/01/moredots/) are two good examples.

---

<div class="post-metadata">

**Author:** ![paulmelis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paulmelis/32/35063_2.png) [@paulmelis](https://discourse.julialang.org/u/paulmelis)\
**Post date:** [February 8, 2021, 8:41pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/3 "2021-02-08T20:41:37Z")

</div>

> [@Oscar\_Smith](#):
>
> One source you should definitely check out is the blog at [The Julia Language Blog](https://julialang.org/blog/). This has a mix of things, but some of them are pretty in depth explanation of internals.  
> [Extensible broadcast fusion](https://julialang.org/blog/2018/05/extensible-broadcast-fusion/)  
> and [More Dots: Syntactic Loop Fusion in Julia](https://julialang.org/blog/2017/01/moredots/) are two good examples.

Right, I know about the blog and the articles there appear to be quite deeply focused on a single topic and so the opposite of what I’m looking for. But the ones you link can help me get up to speed on broadcasting, of which I know nothing so far.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [February 8, 2021, 8:56pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/4 "2021-02-08T20:56:40Z")

</div>

I had a good time reading Jeff Bezanson’s phd thesis:

> **[GitHub - JeffBezanson/phdthesis: phd thesis document source](https://github.com/JeffBezanson/phdthesis)**
>
> phd thesis document source. Contribute to JeffBezanson/phdthesis development by creating an account on GitHub.

My I suggest some posts? (the threads are very interesting in general)

> [@Is Julia's way of OOP superior to C++/Python? Why Julia doesn't use class-based OOP?](https://discourse.julialang.org/t/is-julias-way-of-oop-superior-to-c-python-why-julia-doesnt-use-class-based-oop/52058/24):
>
> Despite the fancy name, the expression problem is definitely a stumbling block you’ve encountered many, many times in object-oriented programming, wether you knew what it was or not. From the OOP side (as opposed to the functional language perspective, where it is also a problem but looks quite different), it is simply the problem of trying to add a new operation to existing types. For what it’s worth, I go through this in depth in the video I linked above, but some people prefer written explana…

> [@Julia motivation: why weren't Numpy, Scipy, Numba, good enough?](https://discourse.julialang.org/t/julia-motivation-why-werent-numpy-scipy-numba-good-enough/2236/10):
>
> I guess I can give some historical motivation here. When we started working on Julia in 2009, the Python ecosystem was nowhere near where it is today: PyPy was pretty new: 1.0 was released in 2007 – it was the first version to be able to run any substantial Python apps and there were no plans at the time for supporting any of NumPy; Cython was even newer: initial release was 2007; Numba didn’t exist: initial release was in 2012. Even NumPy itself was a bit rough back then. It’s entirely possi…

---

<div class="post-metadata">

**Author:** ![lungben](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lungben/32/12314_2.png) [@lungben](https://discourse.julialang.org/u/lungben)\
**Post date:** [February 8, 2021, 9:00pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/5 "2021-02-08T21:00:45Z")

</div>

I recommend this one:  
[http://janvitek.org/pubs/oopsla18b.pdf](http://janvitek.org/pubs/oopsla18b.pdf)

---

<div class="post-metadata">

**Author:** ![lhnguyen-vn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lhnguyen-vn/32/15449_2.png) [@lhnguyen-vn](https://discourse.julialang.org/u/lhnguyen-vn)\
**Post date:** [February 8, 2021, 11:21pm UTC](https://discourse.julialang.org/t/which-paper-s-to-read-on-julia-design/54864/6 "2021-02-08T23:21:02Z")

</div>

My favorites are [Julia Subtyping](https://dl.acm.org/doi/pdf/10.1145/3276483) and [World Age Optimization](https://arxiv.org/pdf/2010.07516.pdf). Granted they address only very specific parts of the design, but the in-depth analysis really showcases the considerations and intricacies that go into the language.
