Well I'm out of content so...

A few random notes:

Miscellaneous things I didn't mention

The compiler and the user can both generate methods

Important - You and the compiler generate specializations

foo(a, b) = a * b + 2

Will be fully specialized on input arguments when called. It won't appear in methods though.

Avoiding ambiguities:

-(A::AbstractArray{T}, b::Date) where {T<:Date}

will cause ambiguities with:

-(A::MyArrayType{T}, b::T) where {T}

High crimes and misdemeanors:

Type piracy shall not be abided (well maybe a little sometimes)

module A
import Base.*
*(x::Symbol, y::Symbol) = Symbol(x,y)
end

Type assertions

Hopefully you've got some high level semantics of the language down.

I want to emphasize something I sort of alluded to, but maybe didn't say super explicitly:

Important - Separating Functions and Data implies multiple dispatch

Some notebooks we'll peruse together:

Performant Serial CodeGoing Fast NowhereGotta Dispatch em all

Compilation

Compilation Pipeline
Compilation Pipeline
CC BY-SA 4.0 Raye Skye Kimmerer. Last modified: July 14, 2025.
Website built with Franklin.jl and the Julia programming language.