On Wed, 11 May 2016 at 13:45 Serhiy Storchaka <storch...@gmail.com> wrote:
> On 11.05.16 19:43, Brett Cannon wrote: > > os.path > > ''''''' > > > > The various path-manipulation functions of ``os.path`` [#os-path]_ > > will be updated to accept path objects. For polymorphic functions that > > accept both bytes and strings, they will be updated to simply use > > code very much similar to > > ``path.__fspath__() if hasattr(path, '__fspath__') else path``. This > > will allow for their pre-existing type-checking code to continue to > > function. > > I afraid that this will hit a performance. Some os.path functions are > used in tight loops, they are hard optimized, and adding support of path > protocol can have visible negative effect. > As others have asked, what specific examples do you have that os.path is used in a tight loop w/o any I/O that would overwhelm the performance? > > I suggest first implement other changes and then look whether it is > worth to add support of path protocol in os.path functions. > I see this whole discussion breaking down into a few groups which changes what gets done upfront and what might be done farther down the line: 1. Maximum acceptance: do whatever we can to make all representation of paths just work, which means making all places working with a path in the stdlib accept path objects, str, and bytes. 2. Safely use path objects: __fspath__() is there to signal an object is a file system path and to get back a lower-level representation so people stop calling str() on everything, providing some interface signaling that someone doesn't misuse an object as a path and only changing path consumptions APIs -- e.g. open() -- and not path manipulation APIs -- e.g. os.path -- in the stdlib. 3. It ain't worth it: those that would rather just skip all of this and drop pathlib from the stdlib. Ethan and Koos are in group #1 and I'm personally in group #2 but I tried to compromise somewhat and find a middle ground in the PEP with the level of changes in the stdlib but being more restrictive with os.fspath(). If I were doing a pure group #2 PEP I would drop os.path changes and make os.fspath() do what Ethan and Koos have suggested and simply pass through without checks whatever path.__fspath__() returned if the argument wasn't str or bytes.
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com