Skip to content

Relax ToString consistency guarantees #13508

Open
@gaearon

Description

@gaearon

We recently chatted about #13367 and related work (e.g. #13394) with @sebmarkbage, and he raised a good point.

It seems like overall treating them consistently is adding significant overhead in the implementation readability. And there’s undoubtedly runtime overhead to it too. There are two separate issues here:

  • warning for invalid values
  • ensuring that the output for invalid values is consistent (e.g. functions are always skipped)

The conclusion we came to is that we should keep warning for bad values, but as long as we warn, consistency is not necessary. It's fine if we sometimes stringify a function, and sometimes skip it, as long as we always warn for those cases

Our guiding principle for invalid inputs should be that we handle them with the least amount of overhead (both at runtime, and in terms of code size), not that they’re always handled the same way.

One exception to this is probably Symbols because they throw when stringified. So it seems like skipping them is actually desirable — unless we're okay with errors.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions