Skip to content

Tracking Issue for try_trait_v2, A new design for the ? desugaring (RFC#3058) #84277

Open
Listed in
@scottmcm

Description

@scottmcm
Member

This is a tracking issue for the RFC "try_trait_v2: A new design for the ? desugaring" (rust-lang/rfcs#3058).
The feature gate for the issue is #![feature(try_trait_v2)].

This obviates rust-lang/rfcs#1859, tracked in #42327.

About tracking issues

Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.

Steps

  • Implement the RFC
    • Add the new traits and impls
    • Update the desugar in ast lowering
    • Fixup all the tests
    • Add nice error messages in inference
    • Improve perf with enough MIR optimizations
    • Delete the old way after a bootstrap update Remove the TryV2 alias #88223
  • Not strictly needed, but a mir-opt to simplify the matches would really help: LLVM/MIR optimizations to simplify the new RFC3058 ? desugaring #85133
    Add more detailed documentation about how to implement and use the traits
    Decide whether to block return types that are FromResidual but not Try
    Fix rustdoc to show the default type parameter on FromResidual better (Issue rustdoc removes Try from <Self as Try>::Residual in std::ops::FromResidual #85454)
    Before stabilizing, ensure that all uses of Infallible are either fine that way or have been replaced by !
  • Stabilizing this will allow people to implement Iterator::try_fold
    • As part of stabilizing, document implementing try_fold for iterators (perhaps reopen Document implementing try_fold for iterators for internal iteration #62606)
    • Ensure that the default implementations of other things have the desired long-term DAG, since changing them is essentially impossible later. (Specifically, it would be nice to have fold be implemented in terms of try_fold, so that both don't need to be overridden.)
  • Adjust documentation (see instructions on rustc-dev-guide)

Unresolved Questions

From RFC:

  • What vocabulary should Try use in the associated types/traits? Output+residual, continue+break, or something else entirely?
    Is it ok for the two traits to be tied together closely, as outlined here, or should they be split up further to allow types that can be only-created or only-destructured?

From experience in nightly:

Implementation history

Metadata

Metadata

Assignees

No one assigned

    Labels

    B-RFC-approvedBlocker: Approved by a merged RFC but not yet implemented.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCF-try_trait_v2Tracking issue for RFC#3058S-tracking-design-concernsStatus: There are blocking design concerns.T-langRelevant to the language teamT-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @mitsuhiko@cuviper@paulyoung@luksan@joshtriplett

        Issue actions

          Tracking Issue for `try_trait_v2`, A new design for the `?` desugaring (RFC#3058) · Issue #84277 · rust-lang/rust