# Julia Philosophical Direction

**URL:** <https://discourse.julialang.org/t/julia-philosophical-direction/64905>\
**Category:** Offtopic\
**Tags:** performance\
**Created:** [July 19, 2021, 4:51am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905 "2021-07-19T04:51:47Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![blackeneth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/blackeneth/32/10353_2.png) [@blackeneth](https://discourse.julialang.org/u/blackeneth)\
**Post date:** [July 19, 2021, 4:51am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/1 "2021-07-19T04:51:47Z")

</div>

On the [Julia homepage](https://julialang.org/), the goals of Julia are stated as:

- Fast
- Composable (multiple dispatch)
- Dynamic
- General
- Reproducible
- Open Source

Other informal goals would be “batteries included” (base has much of what you need), eliminating the two language problem, cross-platform, and support for parallel computation (either on 1 machine or a network; Julia having been designed in the era of parallelism).

**Let me pose a question on the goal of “Fast”:**

- What direction are the developers and major contributors setting for “fast” in Julia – is the direction to incorporate more SIMD, more multiprocessing, in base and libraries?
- Is there a goal to be “best in class” fast?

Base is mostly single-threaded, which is understandable, as just getting dozens of statements and thousands of functions created and working is a major undertaking. “Fast” comes from JIT compilation and multiple dispatch. Success!

Today, however, we have several [JuliaSIMD](https://github.com/JuliaSIMD) packages, which vectorize and thread many functions (or your own). There is [Floops](https://juliafolds.github.io/FLoops.jl/dev/) for parallel execution. Package [NumericExtensions.jl](https://github.com/lindahua/NumericExtensions.jl) provides high performance computational support, with some implementations having been incorporated into base (sum, maximum, minimum). [IntelVectorMath.jl](https://github.com/JuliaMath/IntelVectorMath.jl) ties into the Intel Vector Math Library for many base mathematical functions, achieving [significant speedups](https://raw.githubusercontent.com/aminya/AcuteBenchmark-Results/master/IntelVectorMath/Real/bar/bench-dims-set6-relative.png).

**The Development Process**

Usually what I observe in code development for library functions is roughly the following:

1. get it working (single threaded)
2. get it working better (code flow, algorithm improvements; single threaded)
3. get it working faster (use SIMD/AVX if possible)
4. get it working faster (use multiprocessing, if possible)

Related to my two questions above, it could be restated – would the “philosophy” or “goal” be to get Julia base and libraries to steps 3 & 4?

I posted this in offtopic to encourage bloviating from anyone with an interest in the topic.

---

<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:** [July 19, 2021, 6:20am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/2 "2021-07-19T06:20:28Z")

</div>

3 and 4 are somewhat within scope of Base. That said, there will likely continue to be lots of work on these in packages since packages are a much better place for experimental APIs.

---

<div class="post-metadata">

**Author:** ![Skoffer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skoffer/32/378_2.png) [@Skoffer](https://discourse.julialang.org/u/Skoffer)\
**Post date:** [July 19, 2021, 7:36am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/3 "2021-07-19T07:36:20Z")

</div>

> [@blackeneth](#):
>
> Other informal goals would be “batteries included” (base has much of what you need)

I doubt that it is a goal, informal or not. Quite the contrary, general philosophy is that most interesting things should live in external packages, as far as I know.

---

<div class="post-metadata">

**Author:** ![blackeneth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/blackeneth/32/10353_2.png) [@blackeneth](https://discourse.julialang.org/u/blackeneth)\
**Post date:** [July 19, 2021, 7:59am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/4 "2021-07-19T07:59:43Z")

</div>

Early on, “batteries included” was a theme. At some point, a lot was moved out of base into packages – as it was realized that having it in base fossilized it and made them hard to change.

Fossilization, though, is a process that takes place over time. It’s possible that as external packages fossilize, they could be brought into base.

There is also an interface aspect to this. For example, sin(x) is a well defined function with well know return values. The implementation of sin(x) could change long as the return values didn’t change. As microprocessors support more parallelism, sin(x) could keep up with that, as long as the return values don’t change. Right now we have AVX512. What’s next, AVX1024? Who knows?

---

<div class="post-metadata">

**Author:** ![ImreSamu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/imresamu/32/20677_2.png) [@ImreSamu](https://discourse.julialang.org/u/ImreSamu)\
**Post date:** [July 19, 2021, 9:03am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/5 "2021-07-19T09:03:55Z")

</div>

> [@blackeneth](#):
>
> Usually what I observe in code development for library functions is roughly the following:
> 
> 1. get it working (single threaded)
> 2. get it working better (code flow, algorithm improvements; single threaded)
> 3. get it working faster (use SIMD/AVX if possible)
> 4. get it working faster (use multiprocessing, if possible)

1. get it working based on a recursively self-improving set of algorithms.
2. ~ self-improvement without human control
3. …

The main topic of JuliaCon2030:  
**Can a “machine with JuliaAI code” have a mind, consciousness, and mental states?**

---

<div class="post-metadata">

**Author:** ![blackeneth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/blackeneth/32/10353_2.png) [@blackeneth](https://discourse.julialang.org/u/blackeneth)\
**Post date:** [July 19, 2021, 11:07am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/6 "2021-07-19T11:07:04Z")

</div>

This is why we all require brain implants – to keep up with the robots we are otherwise creating.

---

<div class="post-metadata">

**Author:** ![StatisticalMouse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statisticalmouse/32/43370_2.png) [@StatisticalMouse](https://discourse.julialang.org/u/StatisticalMouse)\
**Post date:** [July 19, 2021, 11:27am UTC](https://discourse.julialang.org/t/julia-philosophical-direction/64905/7 "2021-07-19T11:27:43Z")

</div>

One could say those are goals. I would call them values.

I think the goals are in the section ’Ecosystem’. The goal of Julia is to enable the ecosystem to thrive.
