Re:From Julia to Rust
by eigenspace on Sunday June 06, 2021 @06:20PM
(#27416889)
Here's me copying your second example as closely as possible in julia:
And what does the compiler have to say about it?
and
This is on version 1.6.1 for me, but should work fine on earlier releases. I agree that having MLStyle.jl pattern matching bundled into julia would be great!
[ Parent
| on HN ]
Doesn't the TypeStable struct just hide the unknown type, not remove it? The type of o.o still needs to be looked up at runtime. Furthermore, TypeStable itself has to be on the heap, which I think means this causes two pointer lookups rather than just one.
Re:From Julia to Rust
by eigenspace on Monday June 07, 2021 @01:46PM
(#27425630)
> Doesn't the TypeStable struct just hide the unknown type, not remove it?
No, of you look at the typed IR I posted, it says
259::Union{Nothing, Some{Int64}}
and (259 = Base.getproperty(o, :o))
So it's inferred properly to be a small union which julia handles efficiently at runtime: julia> @btime type_stable()
18.988 ns (1 allocation: 32 bytes)
1
> Furthermore, TypeStable itself has to be on the heap, which I think means this causes two pointer lookups rather than just one.It's on the heap because you wrote
mutable struct
in your example and I was just mimicking you as close as possible. If you don't actually want it to be mutable, then you can just remove the keyword mutable and it'll be even faster and have no heap allocations: julia> @btime type_stable()
18.426 ns (0 allocations: 0 bytes)
1>small union which julia handles efficiently at runtime
Oh! I didn't realize Julia already optimized small unions.
https://julialang.org/blog/2018/08/union-splitting/ https://docs.julialang.org/en/v1/devdocs/isbitsunionarrays/
I wasn't quite sure whether something like this was possible given the semantics of Julia.
Personally, I'd still prefer something more explicit, so it would be more obvious when a union is being handled efficiently. But given that small unions are optimized, I can see why Julia would make the opposite decision.
This makes me feel a lot better about writing Julia code with union types. Thanks
Re:From Julia to Rust
by eigenspace on Tuesday June 08, 2021 @12:50PM
(#27437639)
Yep, small union optimizations are a godsend!