The confusion might arise since ML is also a statically typed programming language, usually seen in the wild in the form of Standard ML and OCaml:
As annoying as it is to see the ML name being hijacked, that has to be one of the funniest inadvertent comments HN has ever produced.
I prefer MG, for Machine Guessing. This not only conveys "The machine has guessed a mapping from x to y", but also captures the research side of "I don't know what the machine is really doing anymore so here are my guesses".
"I'd just like to interject for a moment. What you’re referring to as ML, is in fact, GNU/ML, or as I’ve recently taken to calling it, GNU plus ML..."
It definitely doesnt treat Linux as second or third class
Is the main difference between static typing and Julia (from a user point of view) that type declaration/checking is only optional in Julia?
Or put in another way, what does Julia lose compared to a statically typed language?
Julia relies heavily on type inference, similar to all variables to be marked auto or auto& by default in C++.
Functions are templated on the argument types by default, in C++ terms. So if you call a function f(x) first with an integer and then with a floating point number, Julia will generate separate machine code optimized for each case. Annotating function arguments with types only serves as a filter for whether the function applies to certain types, and can be used for method overloading (function template specialization in C++). The fact that functions are generic by default lends itself well to forward-mode automatic differentiation using method overloading.
Julia is still a dynamic language though. This means that if a variable is bound to an integer in one branch of an if-statement while a string is assigned to it in another branch depending on the value (not type) of a function input, then the variable's type cannot be inferred and needs to be 'boxed', i.e. the runtime type needs to be stored along with the data. In such cases, function dispatch can no longer be done at compile time, and needs to be done dynamically instead. While this is useful for rapid prototyping, it does result in reduced performance, so it should be avoided in code with high performance requirements. The type elision part of this is somewhat similar to boost::any.
Also it's been announced that LSP support for swift will be a priority, so tooling should be improving substantially in the near future.
On top of that, the meta language, Go is also statically typed.
We need help on various things: compilation optimizations, more operators, etc.
Well typed, as in Haskell? I invite you to work on Grenade.
Why? What kind of ML code do you write?
Why? ML programs are typically sufficiently compact to not require a type system.
The second is compactness is true only if you're chaining straightforward library calls. If you're writing your own functions or building non-trivial functionality on top, types will be of aid too.