@jakobnissen and others have also mentioned the lack of composibility because it’s not adopted ecosystem-wide.
EDIT: There is a good discussion in this Discourse post: Better handling of pathnames
One comment asked why methods are not included for functions taking filenames in Base
. I started from scratch following the example of Rust’s std::path
with a type Path
and PathBuf
. It was relatively little work to add wrapper methods for many functions in Base
(that for some reason are not wrapped in FileSystemBase
). PathBuf
is used for constructing paths and wraps IOBuffer
. Rust’s std::path
is more focused on efficiency and minimizing allocation. It may also be simpler in a way than FilePathsBase
. There is no equivalent of a type hierarchy (which would be implemented with traits). It’s just two types each of which wraps a string. (Rust’s approach to mutability means it doesn’t need an IOBuffer
for PathBuf
.) A large amount of std::path
wouldn’t make sense in Julia because of different language semantics. Still, I think it’s worth exploring. But I can’t invest much time at the moment.