I suspect that do a lot of wasteful allocations in the name resolver which should be avoided.
Mainly, I am looking at crate::ast::Path and crate::ast::Path::tail where we store a vector of path segments and clone every time we call tail when we could just use a slice-like mechanism: Some unsized PathView type.
Also I wonder how bad the lowering of complex use-path trees is (not strictly related to the name resolver) and whether it is advisable to not expand them in the lowerer (very likely!). See #93.
I suspect that do a lot of wasteful allocations in the name resolver which should be avoided. Mainly, I am looking at
crate::ast::Path
andcrate::ast::Path::tail
where we store a vector of path segments and clone every time we calltail
when we could just use a slice-like mechanism: Some unsizedPathView
type.Also I wonder how bad the lowering of complex use-path trees is (not strictly related to the name resolver) and whether it is advisable to not expand them in the lowerer (very likely!). See #93.