# Why wouldn't use tuples for computation?

**URL:** <https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060>\
**Category:** General Usage\
**Created:** [January 27, 2021, 2:53pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060 "2021-01-27T14:53:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon60034542](https://avatars.discourse-cdn.com/v4/letter/a/90ced4/32.png) [@anon60034542](https://discourse.julialang.org/u/anon60034542)\
**Post date:** [January 27, 2021, 2:53pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/1 "2021-01-27T14:53:23Z")

</div>

I was reading this [Github page](https://github.com/JuliaLang/julia/issues/2754#issuecomment-15910051), and came across a post from [StefanKarpinski](https://github.com/StefanKarpinski), and he says:

> …but you really mostly shouldn’t be doing much computation with tuples in the first place,…

I was wondering if someone could elaborate on why? Is it because tuples are immutable and you may need to construct a new tuple every time a value needs to be updated?

---

<div class="post-metadata">

**Author:** ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)\
**Post date:** [January 27, 2021, 3:02pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/2 "2021-01-27T15:02:51Z")

</div>

I think because they are not meant for it. If you want to do computations you should use StaticArrays.jl, which wraps tuples.

---

<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:** [January 27, 2021, 3:28pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/3 "2021-01-27T15:28:12Z")

</div>

Notice that that comment is almost eight years old. At the time tuples had very different performance characteristics, predating the classic PR [Tuples made me sad (so I fixed them) by Keno · Pull Request #4042 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/pull/4042), and dot broadcasting had not been invented.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 27, 2021, 5:10pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/4 "2021-01-27T17:10:29Z")

</div>

You may be interested in [https://github.com/JuliaArrays/StaticArrays.jl](https://github.com/JuliaArrays/StaticArrays.jl) . `SArray` provides an array-like interface around data stored in a tuple.

[https://github.com/JuliaArrays/StaticArrays.jl/blob/master/src/SArray.jl#L18-L30](https://github.com/JuliaArrays/StaticArrays.jl/blob/master/src/SArray.jl#L18-L30)

The is mainly practical for small arrays.

---

<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:** [January 27, 2021, 5:18pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/5 "2021-01-27T17:18:38Z")

</div>

One would have to implement all mathematically sensible computations for tuples. For example, this is not implemented:

```julia
julia> x = (1,2)
(1, 2)

julia> 2*x
ERROR: MethodError: no method matching *(::Int64, ::Tuple{Int64,Int64})

```

The solution to such implementation exists and is the `StaticArrays` package that everyone is mentioning. `StaticArrays` are the tuples for which the computations can be performed:

```julia
julia> using StaticArrays

julia> x = SVector{2,Float64}(1,2)
2-element SArray{Tuple{2},Float64,1,2} with indices SOneTo(2):
 1.0
 2.0

julia> 2*x
2-element SArray{Tuple{2},Float64,1,2} with indices SOneTo(2):
 2.0
 4.0

```

---

<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:** [January 27, 2021, 5:24pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/6 "2021-01-27T17:24:10Z")

</div>

Dot broadcasting works just fine with plain tuples.

```julia
julia> 2 .* (1, 2)
(2, 4)

```

It’s extremely convenient for e.g. size computations.

---

<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:** [January 27, 2021, 5:29pm UTC](https://discourse.julialang.org/t/why-wouldnt-use-tuples-for-computation/54060/7 "2021-01-27T17:29:07Z")

</div>

> [@GunnarFarneback](#):
>
> Dot broadcasting works just fine with plain tuples.

Sure, but multiplication by a scalar does not, summing tuples does not, multiplication by a matrix does not etc. Probably if it was chosen to put tuples as center type for computations those should have been implemented as well.
