{"action":"created","issue":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/1238","labels_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1238/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1238/comments","events_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1238/events","html_url":"https://github.com/rust-lang/rfcs/pull/1238","id":99268372,"number":1238,"title":"Nonparametric dropck","user":{"login":"pnkfelix","id":173127,"avatar_url":"https://avatars.githubusercontent.com/u/173127?v=3","gravatar_id":"","url":"https://api.github.com/users/pnkfelix","html_url":"https://github.com/pnkfelix","followers_url":"https://api.github.com/users/pnkfelix/followers","following_url":"https://api.github.com/users/pnkfelix/following{/other_user}","gists_url":"https://api.github.com/users/pnkfelix/gists{/gist_id}","starred_url":"https://api.github.com/users/pnkfelix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pnkfelix/subscriptions","organizations_url":"https://api.github.com/users/pnkfelix/orgs","repos_url":"https://api.github.com/users/pnkfelix/repos","events_url":"https://api.github.com/users/pnkfelix/events{/privacy}","received_events_url":"https://api.github.com/users/pnkfelix/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"},{"url":"https://api.github.com/repos/rust-lang/rfcs/labels/T-libs","name":"T-libs","color":"bfd4f2"}],"state":"open","locked":false,"assignee":{"login":"pnkfelix","id":173127,"avatar_url":"https://avatars.githubusercontent.com/u/173127?v=3","gravatar_id":"","url":"https://api.github.com/users/pnkfelix","html_url":"https://github.com/pnkfelix","followers_url":"https://api.github.com/users/pnkfelix/followers","following_url":"https://api.github.com/users/pnkfelix/following{/other_user}","gists_url":"https://api.github.com/users/pnkfelix/gists{/gist_id}","starred_url":"https://api.github.com/users/pnkfelix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pnkfelix/subscriptions","organizations_url":"https://api.github.com/users/pnkfelix/orgs","repos_url":"https://api.github.com/users/pnkfelix/repos","events_url":"https://api.github.com/users/pnkfelix/events{/privacy}","received_events_url":"https://api.github.com/users/pnkfelix/received_events","type":"User","site_admin":false},"milestone":null,"comments":18,"created_at":"2015-08-05T18:30:09Z","updated_at":"2015-08-11T15:15:45Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1238","html_url":"https://github.com/rust-lang/rfcs/pull/1238","diff_url":"https://github.com/rust-lang/rfcs/pull/1238.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/1238.patch"},"body":"### Summary\r\n\r\nRevise the Drop Check (`dropck`) part of Rust's static analyses in two ways.  In the context of this RFC, these revisions are respectively named `cannot-assume-parametricity` and `unguarded-escape-hatch`.\r\n\r\n  1. `cannot-assume-parametricity` (CAP): Make `dropck` analysis stop relying on parametricity of type-parameters.\r\n\r\n  2. `unguarded-escape-hatch` (UGEH): Add an attribute (with some name starting with \"unsafe\") that a library designer can attach to a `drop` implementation that will allow a destructor to side-step the `dropck`'s constraints (unsafely).\r\n\r\n[rendered draft](https://github.com/pnkfelix/rfcs/blob/nonparametric-dropck/text/0000-nonparametric-dropck.md)"},"comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/issues/comments/129925638","html_url":"https://github.com/rust-lang/rfcs/pull/1238#issuecomment-129925638","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1238","id":129925638,"user":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"created_at":"2015-08-11T15:15:45Z","updated_at":"2015-08-11T15:15:45Z","body":"I remain pretty convinced we should take this step quickly, but I'd like to collect examples where annotations are required so we can analyze their usage patterns. For example, when it comes to stabilizing, I can imagine that we might institute (and stabilize) a sound but overly conservative analysis, and retain an (unstable, for now) unsafe attribute to go beyond. Looking at code that requires changes would give us some idea how useful this is, of course.\r\n\r\n@cristicbz can you point us at any of the code you believe would be affected? (is it open source / publicly accessible?)"}}