# SVector and Type Stabilty

**URL:** <https://discourse.julialang.org/t/svector-and-type-stabilty/113391>\
**Category:** Modelling & Simulations\
**Tags:** question\
**Created:** [April 23, 2024, 12:41pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391 "2024-04-23T12:41:31Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Domenico\_Lahaye](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/domenico_lahaye/32/203728_2.png) [@Domenico\_Lahaye](https://discourse.julialang.org/u/Domenico_Lahaye)\
**Post date:** [April 23, 2024, 12:41pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391/1 "2024-04-23T12:41:31Z")

</div>

I am struggling to understand the type instability of

```julia
function foo(x,y,z,r)
    r_prime = Point3D(x,y,z)
    result = r - rprime 
end 

```

given as input

```julia
x = 0.; y = 0.; z = 0.;
r = Point3D(1.,1.,1.)
@code_warntype foo(x,y,z,r)

```

The output I obtain is

> MethodInstance for foo(::Float64, ::Float64, ::Float64, ::SVector{3, Float64})  
> from foo(x, y, z, r::SVector{3, Float64}) in Main at In[78]:1  
> Arguments  
> #self#::Core.Const(foo)  
> x::Float64  
> y::Float64  
> z::Float64  
> r::SVector{3, Float64}  
> Locals  
> result::Any  
> r\_prime::SVector{3, Float64}  
> Body::Any  
> 1 ─ (r\_prime = Main.Point3D(x, y, z))  
> │ %2 = (r - Main.rprime)::Any  
> │ (result = %2)  
> └── return %2

Help is much appreciated.

---

<div class="post-metadata">

**Author:** ![jakobnissen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobnissen/32/13477_2.png) [@jakobnissen](https://discourse.julialang.org/u/jakobnissen)\
**Post date:** [April 23, 2024, 12:44pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391/2 "2024-04-23T12:44:10Z")

</div>

Where is Point3D defined?

---

<div class="post-metadata">

**Author:** ![Domenico\_Lahaye](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/domenico_lahaye/32/203728_2.png) [@Domenico\_Lahaye](https://discourse.julialang.org/u/Domenico_Lahaye)\
**Post date:** [April 23, 2024, 12:56pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391/3 "2024-04-23T12:56:52Z")

</div>

const Point3D = SVector{3,Float64}

---

<div class="post-metadata">

**Author:** ![barucden](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barucden/32/26154_2.png) [@barucden](https://discourse.julialang.org/u/barucden)\
**Post date:** [April 23, 2024, 12:56pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391/4 "2024-04-23T12:56:54Z")

</div>

It is very likely that Point3D is somehow an alias for SVector, and the source of type instability is `rprime` (in `result = r - rprime`), which is some leftover from the running session (of type `Any`) and should be `r_prime` instead.

---

<div class="post-metadata">

**Author:** ![Domenico\_Lahaye](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/domenico_lahaye/32/203728_2.png) [@Domenico\_Lahaye](https://discourse.julialang.org/u/Domenico_Lahaye)\
**Post date:** [April 23, 2024, 1:05pm UTC](https://discourse.julialang.org/t/svector-and-type-stabilty/113391/5 "2024-04-23T13:05:17Z")

</div>

Apologies for the noice.
