On Mon, Dec 4, 2017 at 7:22 PM, Robert O'Callahan <rob...@ocallahan.org> wrote:
> On Tue, Dec 5, 2017 at 2:00 PM, Gregory Szorc <g...@mozilla.com> wrote: > >> Many programming languages paper over these subtle differences leading to >> badness. For example, the preferred path APIs for Python and Rust assume >> paths are Unicode (they have their own logic to perform encoding/decoding >> behind the scenes and depending on settings, run-time failures or data >> loss >> can occur). > > > I don't think that's true for Rust. Rust's `Path` and `PathBuf` are the > preferred data types and wrap an underlying `OsStr`/`OsString`, which > claims to be able to represent any path for the target platform. On Linux > an `OsString` is just an array of bytes with no specified encoding, and on > Windows it appears to be an array of WTF-8 bytes, so that claim seems valid. > Yes. I was confusing Rust's handling of paths with environment variables and command line arguments. std::env::vars() and std::env::args() panic if an element isn't "Unicode." (The docs for those types don't say how Rust chooses which encoding it treats the underlying bytes as and now I'm legitimately curious.) That's why there are vars_os() and args_os() to get the raw data. I got mixed up and thought there was a Path and OsPath distinction as well. > > Of course PathBuf isn't exactly what you want for an application like > Mercurial, since there I guess you want a type that represents any path > from any platform, including platforms other than the target platform... > Indeed. Mercurial treats all paths as bytes (for better or worse). There are known problems with path handling on Windows. For the curious, read https://www.mercurial-scm.org/wiki/WindowsUTF8Plan and https://www.mercurial-scm.org/wiki/EncodingStrategy. And, uh, I should have linked to EncodingStrategy before because that contains a lot of useful info. Although it is a bit light on links to back up the research. That page was mostly authored by mpm, so I generally trust the accuracy of the content. > -- > lbir ye,ea yer.tnietoehr rdn rdsme,anea lurpr edna e hnysnenh hhe uresyf > toD > selthor stor edna siewaoeodm or v sstvr esBa kbvted,t > rdsme,aoreseoouoto > o l euetiuruewFa kbn e hnystoivateweh uresyf tulsa rehr rdm or rnea > lurpr > .a war hsrer holsa rodvted,t nenh hneireseoouot.tniesiewaoeivatewt > sstvr esn > _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform