{"action":"created","issue":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/1210","labels_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1210/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1210/comments","events_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1210/events","html_url":"https://github.com/rust-lang/rfcs/pull/1210","id":94822300,"number":1210,"title":"RFC: impl specialization","user":{"login":"aturon","id":709807,"avatar_url":"https://avatars.githubusercontent.com/u/709807?v=3","gravatar_id":"","url":"https://api.github.com/users/aturon","html_url":"https://github.com/aturon","followers_url":"https://api.github.com/users/aturon/followers","following_url":"https://api.github.com/users/aturon/following{/other_user}","gists_url":"https://api.github.com/users/aturon/gists{/gist_id}","starred_url":"https://api.github.com/users/aturon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aturon/subscriptions","organizations_url":"https://api.github.com/users/aturon/orgs","repos_url":"https://api.github.com/users/aturon/repos","events_url":"https://api.github.com/users/aturon/events{/privacy}","received_events_url":"https://api.github.com/users/aturon/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/rust-lang/rfcs/labels/T-lang","name":"T-lang","color":"bfd4f2"}],"state":"open","locked":false,"assignee":{"login":"aturon","id":709807,"avatar_url":"https://avatars.githubusercontent.com/u/709807?v=3","gravatar_id":"","url":"https://api.github.com/users/aturon","html_url":"https://github.com/aturon","followers_url":"https://api.github.com/users/aturon/followers","following_url":"https://api.github.com/users/aturon/following{/other_user}","gists_url":"https://api.github.com/users/aturon/gists{/gist_id}","starred_url":"https://api.github.com/users/aturon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aturon/subscriptions","organizations_url":"https://api.github.com/users/aturon/orgs","repos_url":"https://api.github.com/users/aturon/repos","events_url":"https://api.github.com/users/aturon/events{/privacy}","received_events_url":"https://api.github.com/users/aturon/received_events","type":"User","site_admin":false},"milestone":null,"comments":59,"created_at":"2015-07-13T22:00:51Z","updated_at":"2015-08-01T00:31:15Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1210","html_url":"https://github.com/rust-lang/rfcs/pull/1210","diff_url":"https://github.com/rust-lang/rfcs/pull/1210.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/1210.patch"},"body":"This RFC proposes a design for *specialization*, which permits multiple `impl`\r\nblocks to apply to the same type/trait, so long as one of the blocks is clearly\r\n\"more specific\" than the other. The more specific `impl` block is used in a case\r\nof overlap. The design proposed here also supports refining default trait\r\nimplementations based on specifics about the types involved.\r\n\r\nAltogether, this relatively small extension to the trait system yields benefits\r\nfor performance and code reuse, and it lays the groundwork for an \"efficient\r\ninheritance\" scheme that is largely based on the trait system (described in a\r\nforthcoming companion RFC).\r\n\r\n[Rendered](https://github.com/aturon/rfcs/blob/impl-specialization/text/0000-impl-specialization.md)"},"comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/comments/126840320","html_url":"https://github.com/rust-lang/rfcs/pull/1210#issuecomment-126840320","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1210","id":126840320,"user":{"login":"bstrie","id":865233,"avatar_url":"https://avatars.githubusercontent.com/u/865233?v=3","gravatar_id":"","url":"https://api.github.com/users/bstrie","html_url":"https://github.com/bstrie","followers_url":"https://api.github.com/users/bstrie/followers","following_url":"https://api.github.com/users/bstrie/following{/other_user}","gists_url":"https://api.github.com/users/bstrie/gists{/gist_id}","starred_url":"https://api.github.com/users/bstrie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bstrie/subscriptions","organizations_url":"https://api.github.com/users/bstrie/orgs","repos_url":"https://api.github.com/users/bstrie/repos","events_url":"https://api.github.com/users/bstrie/events{/privacy}","received_events_url":"https://api.github.com/users/bstrie/received_events","type":"User","site_admin":false},"created_at":"2015-08-01T00:31:15Z","updated_at":"2015-08-01T00:31:15Z","body":"@llogiq I'm having a hard time following your proposed changes, are you proposing a C#-style system where both the default methods and the overriding methods require keyword annotations? If so, note that requiring `override` might be considered a breaking change, because we already allow people to override default trait methods without such a keyword, which would make the proposed desugaring of default trait methods to `partial impl` blocks weird."}}