My bad, I didn't express myself properly. The Julia language requires structs to be annotated and only those, you are right. Then if you want to reach a primitive level of type safety, function input types have to be annotated.
julia> struct Foo
a
end
julia> Foo(17)
Foo(17)
julia> Foo("bar")
Foo("bar")
People should absolutely criticise Julia for its faults, but I would expect them to at least learn and understand the very basics of the language before doing so.Structs and functions do not need to have type annotations. They are completely optional and learning when to annotate is one of the first learning challenges for newcomers to the language.
There are code generation advantages to type annotations for structs, but they are not required. As for functions, this will only ever be the case if type inference fails, which should be so rare that you hardly even need to consider it.
Regardless, that's orthogonal to being type safe.