Julia v1.8 Release Notes
github.com
github.com
Not to mention the new effect system, which allows for quite aggressive constant propagation and constant evaluation.
Then there are a few small things: The new `eachsplit` function, for example, or the ability to read a file line by line, backwards, the introduction of "lazy strings" that makes writing informative errors more performant and the ability to match regular expressions to error messages in tests.
The real big one is the latency reduction, though, and the promise that it brings in the future for caching native code - perhaps in v 1.10 or even 1.9
What purpose do you see for typed global variables? I'm sure they'll be useful for interfacing with external ABIs, OS interfaces, or hardware; but I'm not sure the added complexity will be worth it in the end, as these use cases seem rare. For one, it'll now be more difficult for newbies to understand they shouldn't use global variables in packages unless absolutely necessary.
const x = Ref{Int}(1)
and then mutating it as `x[] += 1`. With the type annotated globals, we'll be able to simply write x::Int = 1
and rebind it as `x += 1`. Besides the syntactic advantage, this way is threadsafe by default whereas mutating a constant global `Ref` is not threadsafe.No? Concurrent updates of integers can be accomplished with atomics: https://docs.julialang.org/en/v1/manual/multi-threading/#Ato...
> Mutable struct fields may now be annotated as const to prevent changing them after construction, providing for greater clarity and optimization ability of these objects
So will these be exactly like non-mutable structs?