TL;DR tips for Julia users coming from Matlab

This is amazing! I’m going to present to my lab in a couple weeks and this will be a great resource for everyone else.

1 Like

Interesting, the reason for this is and you can show it more succinctly with:

 function not_type_stable(a)
    a = a # toggle comment on this line
    return (x->x+a)(1)

So while I guess it is true that in some cases, assignments to a variable can cause performance problems, the reason isn’t really that a has one type and then you assign it to another type.


This is one of those habits that many appear to be blind towards. New users are so often initializing arrays as

zeros(n, 1)
rand(n, 1)
# etc.

when they almost always should use

# etc.

They’re not even going to think about it unless it’s pointed out directly. It’s a semi-subconscious assumption about how vectors work.

Similarly, use rand() instead of rand(1) or rand(1)[1].


I hate to be pedantic*, but

julia> struct Foo

julia> Base.length(f::Foo) = length(f.x)

julia> Base.push!(f::Foo, a) = push!(f.x, a)

julia> foo=Foo([])

julia> length(foo)

julia> push!(foo,1)
1-element Array{Any,1}:

julia> length(foo)

*That’s not true. I really enjoy bring pedantic :crazy_face:. You’re off course correct.

1 Like

Totally correct! Here’s another example of the same:

julia> struct Bar end

julia> Base.length(::Bar) = rand(0:1000)

julia> b = Bar()

julia> length(b)

julia> length(b)


linspace(a,b,n) = range(a; stop=b, length=n)   
logspace(a,b,n) = 10 .^ range(a; stop=b, length=n)

When I first transitioned from matlab to Julia, I set up atom snippets for some common functionality like this.
That way I could type the old matlab stuff but get the new Julia stuff without any additional function definitions. Here are some


I love to be pedantic :wink: I am wondering if we should keep using the term “immutable” for these kinds of constructs in discussions. An "(immutable) struct" is a clearly defined concept in Julia, but Foo above may not mesh well with what various people understand as “immutable”.

Mutability (or lack thereof) in Julia is a very narrowly defined technical term that is meaningful mostly for composite types.

1 Like

Same here. An otherwise pleasant Julia experience can be brought to a longer halt if help is not accessible.

Also had this tldr-pages or this navi idea (in previous posts I called for one-liners or snippets).

We often ask posters to provide a minimum working example.
I wondered if we could expect the same from someone answering a question, or contributes to Julia?
Sounds ungrateful? Since it’s all free and based on voluntary work.
You are all doing a great job - thanks!
My only argument is that a help that is not understood is a lost effort.

Maybe you developers and helpers can go a bit further, think of the not-so-progressed, and add some TL;DR examples.