{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/73789555","id":73789555,"diff_hunk":"@@ -0,0 +1,236 @@\n+- Feature Name: cargo_stdlib_awareness\n+- Start Date: 2015-05-26\n+- RFC PR: (leave this empty)\n+- Rust Issue: (leave this empty)\n+\n+\n+# Summary\n+\n+Currently, Cargo doesn't know what parts of the standard library packages depend on.\n+By giving it this knowledge, we can make cross compilation and exotic platform development easier, simplify rustbuild, and allow anyone to easily specify bounds on the standard library for their packages.\n+This will allow building parts of the standard library from source, but in order to not disrupt existing workflows, the binaries that come with rustc will still be used by default.\n+\n+\n+# Motivation\n+\n+First, some background.\n+`rustc` can be given crates and their location with `--extern <name>=<path>`.\n+When finding a library, `rustc` first sees if its location has been specified with `--extern`, then looks in any directories specified with `-L`, and finally looks in the \"sysroot\" [specifically `<sysroot>/lib/rustlib/<target>/lib`].\n+Cargo passes in all dependencies it builds with `--extern`.\n+However Cargo does not know about the standard library, so builds of it are taken from the sysroot.\n+\n+For cross-compiling, one can often download standard library binaries with rustup.\n+This is convenient, but one cannot expect pre-built binaries for all platforms.\n+In particular, embedded systems often have detailed configurations to convey as much information as possible about the hardware to the compiler.\n+Furthermore, not all of the stdlib is available on every platform---there is an RFC in the works to pre-build a smaller set of crates for [Cortex-M microcontrollers](https://github.com/rust-lang/rfcs/pull/1645).\n+It would be nice to know if the available subset is adequate before attempting a build.\n+We can only do that if all packages have explicit standard library deps to cross-reference with platform requirements of each standard library crate.\n+\n+Now rustup could be augmented to build stdlib binaries in addition to downloading them, but we have extra configuration options for the standard library such as [panic strategies](https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md) along with plans to add more such as [`core` without floats](https://github.com/rust-lang/rfcs/issues/1364).\n+One could also cobble together a way to to tell rustup such configuration options, but we'd like to make sure that all dependencies agree with the plan before trying to execute it.\n+For panicking, packages can already set a `profile.dev.panic` option to require a specific strategy, and for float support we should add a (default opt-in) feature to core.\n+Then, if packages can explicitly depend on core they can also specify whether the float feature is needed.\n+Cargo would be able to infer both of these options by inspecting all crates in the dependency graph.\n+\n+Rustbuild must currently perform multiple `cargo builds`, the first to build the standard library and the rest to build things which depend on the standard library.\n+If rustc, rustfmt, etc, and their deps (some of which come from crates.io, and thus aren't specially tailored for building rust) declare deps on std, rustbuild wouldn't need multiple lockfiles.\n+Keeping multiple lockfiles in sync is a nuisance, and this gets us one step closer to a single `cargo build` building rustc.\n+\n+The use-cases so far mainly benefit niche corners of the Rust community, but the last should be useful for just about everyone.\n+Now that multiple versions of Rust have been released, it can be useful to specify the minimum version.\n+If and when Rust 2, a version with breaking changes, comes out, this will be all the more important.\n+We don't yet have a plan yet to track the language itself, but by tracking standard library dependencies we make it trivial to specify version requirements like any other package.\n+\n+\n+# Detailed design\n+\n+## Standard library dependencies\n+\n+First and foremost, one will now be able to explicitly depend on standard library crates, e.g. with `std = { version = \"1.10\", stdlib = true }`.\n+From the users's perspective, `stdlib = true` simply indicates that the depended-on crate is from the standard library.\n+The version for stdlib crates comes from the version of Rust their interfaces are defined in.\n+A version requirement must be specified.\n+The full breadth of options available with our existing dependencies, e.g. features and overrides, will be supported.\n+\n+## Implicit dependencies\n+\n+For backwards compatibility, Cargo must inject such standard library dependencies for existing packages.\n+These injected standard library dependencies are called \"implicit dependencies\" because the user does not specify them explicitly.\n+We have an obligation to not break packages depending only on stable interfaces, so the implicit dependencies will include both `std` and `core`:\n+```toml\n+[dependencies]\n+core = { version = \"^1.0\", stdlib = true }\n+std  = { version = \"^1.0\", stdlib = true }\n+\n+[dev-dependencies]\n+core = { version = \"^1.0\", stdlib = true }\n+std  = { version = \"^1.0\", stdlib = true }\n+test = { version = \"^1.0\", stdlib = true }\n+\n+[build-dependencies]\n+core = { version = \"^1.0\", stdlib = true }\n+std  = { version = \"^1.0\", stdlib = true }\n+```\n+The version requirement for `core` of `^1.0` may seem odd because core was not stable at the time, but anything else would either break newer packages using core, or prevent older packages from working on versions of Rust predating core's stabilization.\n+Remember that rustc only complains if an unstable crate is actually imported, so the Cargo dependency on its own is harmless.\n+\n+`test` is a similar scenario.\n+While importing it explicitly remains unstable, it's currently injected and thus needs to be built.\n+Other dependencies of `std` besides core we don't need to worry about, because they are only transitive dependencies through `std`, not direct dependencies.\n+\n+Now, not all crates depend on these crates, so there must be a way to opt out.\n+For this, we introduce a new `implicit-dependencies` key.\n+It is defined by default as:\n+```toml\n+implicit-dependencies = [\"primary\", \"build\", \"dev\"]\n+```\n+This indicates each of `dependencies`, `build-dependencies`, and `dev-dependencies` maps (respectively) is augmented with implicit elements.\n+A manual definition may be that or almost any subset, in which case only the included dependency maps are augmented.\n+\n+Finally, if an (explicit) dependency conflicts with one of the implicit defaults, that category of implicit dependency will be skipped.\n+For example, if a crate explicit depends on `std` as a build-dependency, neither `std` nor any other implicit build dependency will be injected.\n+This final rule means must packages won't need to use the implicit-dependencies key, because either implicit dependencies will be used, or a `core` or `std` explicit dependency will be present.\n+An exception is `core` itself, which must of course not depend on `core` or `std` implicitly or explicitly.\n+\n+## Compiler command-line interface\n+\n+As will be explained, with these changes Cargo will always use `--extern` to pass dependencies, so rustc's sysroot lookup can and should be bypassed.\n+This will prevent users using the sysroot from depending on more crates than their cargo file declares (implicitly or explicitly)..\n+A `--no-resolve-sysroot` flag will be added for this purpose.\n+Compilers that don't have sysroot binaries should accept this flag and ignore it.\n+Once [Rust PR #35021](https://github.com/rust-lang/rust/pull/35021/files) lands in some form, `compiler-rt` will be a Cargoized dependency so rustc won't use the sysroot for linking either.\n+\n+Additionally, compilers besides rustc may have version numbers distinct from the version of Rust they implement.\n+For this purpose, the verbose version output (`$COMPILER -vV` should contain an additional line:\n+```\n+language-version: $version\n+```\n+For now, `$version` should be a version, not a version requirement, and the patch number must be zero as patch numbers don't make sense for interfaces.\n+[This may be relaxed in the future for compilers which implement multiple versions.]\n+\n+## Compiler source packaging\n+\n+While the standard library *interface* is defined with each rustc version, the implementation of many crates, by virtue of using unstable features, is compiler-specific.\n+This makes the standard library unfit for crates.io.\n+(Additionally, the issue of dealing with nightly also makes crates.io hard to use, but that is a less clear-cut obstacle.)\n+\n+Cargo will soon gain the ability to create custom registries, as described in\n+https://github.com/rust-lang/cargo/pull/2857 .\n+Compilers should package the source of their implementation of the standard library as a registry, which can be distributed with the compiler.\n+In practice, rustc will optionally contain the source in its sysroot.\n+Rustup may be able to put it there if the default download does not contain it already.\n+This registry will be called the \"compiler source registry\".\n+\n+## Cargo implementation\n+\n+Whenever Cargo encounters a `Cargo.toml`, the first thing it always does is inject any applicable implicit deps.\n+The idea is that by doing this so early on, most of Cargo can stay the same in only knowing or caring about explicit deps, simplifying both this RFC and its implementation.\n+This process is completely defined by the rules described in the first subsection, so there is really nothing to elaborate upon here.\n+\n+Cargo has a \"source\" abstraction for providers of packages.\n+Examples of this are file-system paths, git repositories, and the upcoming registries.\n+For the time being, `stdlib = true` will act like another source, instructing the compiler to look at the compiler source registry, and if that is missing, then the sysroot binaries.\n+The remainder of this section will clarify this.\n+\n+The compiler source registry is expected to be located in `${$CARGO_RUSTC --print sysroot}/src`.\n+The exact format this takes will be determined when custom registries are implemented.\n+Based on that, it may be necessary to transform the rust repo before dumping it there.\n+\n+The \"sysroot binary mock registry\" is generated by examining the contents of the sysroot.\n+Any binary in there will be added to the mock registry, with a version\n+taken either from the `language-version` described above, or the compiler version if that key is not present (as it would be with existing rustc releases).\n+\n+If the compiler source registry exists, that is used, and the sysroot binary mock registry need not even be built.\n+If the source registry is absent, then the binary registry is used.\n+\n+When the build plan just involves the compiler source registry and/or existing types of sources, it can be executed just like today.\n+The awkward scenario is when packages from the sysroot binary mock registry need to be used in the build plan.\n+Because Cargo doesn't know much about the sysroot binaries, it must be very conservative when deciding whether or not they can be used.\n+For example, Cargo may assume they are built with only default features enabled but it can't know what those are.\n+If features are explicitly requested, or the default features are disabled (by all dependent packages) then the binaries are ineligible for the build plan being resolved.\n+Cargo likewise will have to be conservative with other metadata.\n+Packages in the mock binaries registry are not built by Cargo, since they are prebuilt, and when they serve as (transitive) dependencies, Cargo passes them in with `--extern` and their sysroot location.\n+This is different from other deps, whose binaries are placed in Cargo's output directory, and sysroot deps today, where `--extern` isn't used as all.\n+Since `--extern` is used even in the sysroot binary case, cargo can and will pass `--no-resolve-sysroot` to rustc in all cases.\n+\n+## Rustbuild improvements\n+\n+As advertised in the motivation section, with this RFC, rustbuild can use a single workspace to build the standard library and all executables.\n+\n+One complication with the RFC is that that no sysroot binaries or source associated with the bootstrap compiler (or previous stage) are ever used; one needs to bypass the compiler source registry and sysroot binary mock registry.\n+To accomplish this, rustbuild's workspace will need to use `[replace]` to redirect all stdlib deps to use the workspace's packages.\n+\n+All binaries for a specific phase can be built with a single `cargo build` (barring special requirements for individual libraries).\n+Rather than have a multitude of build artifact directories per stage, only one is needed.\n+After the last compiler is build, an additional mini-stage of building just the standard library could be performed, but distributions wishing to build all deps from source in a standardized fashion (e.g. probably NixOS) would forgo this.\n+\n+## Forward Compatibility\n+\n+The custom registries PR https://github.com/rust-lang/cargo/pull/2857 starts with just mirroring existing registries.\n+As followup work, it expected that packages (probably just the workspace root, definitely not non-packages like cargo config) will be able to specify the \"default\" source, i.e. the one used when none is specified (today this is always crates.io).\n+Similarly, one could specify a \"stdlib\" source, to be used for `stdlib = true` deps instead of the compiler source binary registry or sysroot binary mock registry.\n+This would simplify rustbuild as it could use that once instead of `[replace]` for each package.\n+This doesn't require any planning from this RFC.\n+\n+More importantly, it would be nice to move stdlib crates that don't use unstable features to crates.io.\n+`collections` and `test` almost don't use any unstable and are thus good candidates for this.\n+With something like what is described in the first paragraph, it could be possible for individual packages to instruct Cargo to first check crates.io, and then the compiler source registry, for stdlib crates.\n+But this shifts the burden to individual packages, and means we'd still need to vendor source of any crate moved to crates.io in the compiler source registry for packages that didn't make the switch.\n+\n+More interesting would be to change Cargo's *default* behavior to check both the compiler-specific sources (compiler source registry and sysroot binary mock registry) and crates.io.\n+This would allow standard crates to seamlessly migrate to crates.io without extra work per package.\n+This could be either be done where crates.io overrides the compiler-specific sources, or the compiler specific sources override crates.io.\n+We don't want to commit to either variant in this RFC, however, so we instead want to keep all 3 options open (no fallback, crates.io over compiler-specific, compiler-specific over crates.io).\n+To achieve this, we want to keep the sysroot/compiler source registry and crates.io disjoint: no package should be contained in both sources.\n+That way unioning them together with either priority (the fallback scheme effectively crates a union source) has the same effect.\n+\n+The easiest way to achieve this is to make sure that standard library crates use names reserved on crates.io.\n+We don't want to bake crates.io policy into Cargo however, so instead of absolutely prohibiting stdlib deps with non-reserved names, crates.io will just lint packages being uploaded.\n+Also, care will be taken so that any stdlib crate that is stabalized must use a reserved name or already be published on crates.io.\n+That still doesn't protect unpublished packages using unstable stdlib crates without reserved names from breakage, but due to their use of unstable interfaces we have no obligation to keep them working.\n+Also, once we have an option to explicitly provide the source for stdlib deps, they can force the behavior they want.\n+This seems good enough.\n+\n+\n+# Drawbacks\n+\n+ - The mock registry for sysroot binaries is a disgusting hack.\n+\n+ - Only some crates in the rust repo (at least `core`, `alloc` and `collections`) can properly be built just based upon their `Cargo.toml`.\n+   However it's precisely only these \"foundational\" crates that will be of interest to freestanding developers.\n+   Hosted developers can likely get pre-built binaries for the platform they need with `rustup`, just as they do today.\n+\n+ - Compilers could provide crates in their sysroot that don't match the Rust specification, and Cargo would be none the wiser.\n+   (Technically, this problem already exists with falling back on the sysroot binaries, but users will probably expect better when they can specify standard library dependencies explicitly.)\n+   Since the *interface* of the stdlib is specified, it would be neat if we could put a big crate type/interface on crates.io, which compiler implementations would need to match.\n+\n+\n+# Alternatives\n+\n+ - Instead of copying binaries from the sysroot, we could just leave it to rustc to find them.","path":"text/0000-cargo-libstd-awareness.md","position":210,"original_position":210,"commit_id":"81a923ad94f0fcaf12348a5c35513ae97ef0f21f","original_commit_id":"fac0c9bf5d72adbd959f47a5a96e45ffafc7eb9c","user":{"login":"Ericson2314","id":1055245,"avatar_url":"https://avatars.githubusercontent.com/u/1055245?v=3","gravatar_id":"","url":"https://api.github.com/users/Ericson2314","html_url":"https://github.com/Ericson2314","followers_url":"https://api.github.com/users/Ericson2314/followers","following_url":"https://api.github.com/users/Ericson2314/following{/other_user}","gists_url":"https://api.github.com/users/Ericson2314/gists{/gist_id}","starred_url":"https://api.github.com/users/Ericson2314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ericson2314/subscriptions","organizations_url":"https://api.github.com/users/Ericson2314/orgs","repos_url":"https://api.github.com/users/Ericson2314/repos","events_url":"https://api.github.com/users/Ericson2314/events{/privacy}","received_events_url":"https://api.github.com/users/Ericson2314/received_events","type":"User","site_admin":false},"body":"I'll just remove this alternative until we finally nail down what we are doing.","created_at":"2016-08-06T17:58:58Z","updated_at":"2016-08-06T17:58:58Z","html_url":"https://github.com/rust-lang/rfcs/pull/1133#discussion_r73789555","pull_request_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/73789555"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/1133#discussion_r73789555"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133","id":36171747,"html_url":"https://github.com/rust-lang/rfcs/pull/1133","diff_url":"https://github.com/rust-lang/rfcs/pull/1133.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/1133.patch","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1133","number":1133,"state":"open","locked":false,"title":"Make Cargo aware of standard library dependencies","user":{"login":"Ericson2314","id":1055245,"avatar_url":"https://avatars.githubusercontent.com/u/1055245?v=3","gravatar_id":"","url":"https://api.github.com/users/Ericson2314","html_url":"https://github.com/Ericson2314","followers_url":"https://api.github.com/users/Ericson2314/followers","following_url":"https://api.github.com/users/Ericson2314/following{/other_user}","gists_url":"https://api.github.com/users/Ericson2314/gists{/gist_id}","starred_url":"https://api.github.com/users/Ericson2314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ericson2314/subscriptions","organizations_url":"https://api.github.com/users/Ericson2314/orgs","repos_url":"https://api.github.com/users/Ericson2314/repos","events_url":"https://api.github.com/users/Ericson2314/events{/privacy}","received_events_url":"https://api.github.com/users/Ericson2314/received_events","type":"User","site_admin":false},"body":"Currently, all packages implicitly depend on libstd. This makes Cargo unsuitable for packages that\r\nneed a custom-built libstd, or otherwise depend on crates with the same names as libstd and the\r\ncrates behind the facade. The proposed fixes also open the door to a future where libstd can be\r\nCargoized.\r\n\r\nI've been busy with school until very recently, so apologies in advance if it turns out I am not taking into account some recent change.\r\n\r\n[Rendered](https://github.com/Ericson2314/rfcs/blob/cargo-libstd/text/0000-cargo-libstd-awareness.md)","created_at":"2015-05-26T06:02:28Z","updated_at":"2016-08-06T17:58:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cf5109c64c0bfaf756cd4eb8ae8a69ea23eab659","assignee":{"login":"alexcrichton","id":64996,"avatar_url":"https://avatars.githubusercontent.com/u/64996?v=3","gravatar_id":"","url":"https://api.github.com/users/alexcrichton","html_url":"https://github.com/alexcrichton","followers_url":"https://api.github.com/users/alexcrichton/followers","following_url":"https://api.github.com/users/alexcrichton/following{/other_user}","gists_url":"https://api.github.com/users/alexcrichton/gists{/gist_id}","starred_url":"https://api.github.com/users/alexcrichton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexcrichton/subscriptions","organizations_url":"https://api.github.com/users/alexcrichton/orgs","repos_url":"https://api.github.com/users/alexcrichton/repos","events_url":"https://api.github.com/users/alexcrichton/events{/privacy}","received_events_url":"https://api.github.com/users/alexcrichton/received_events","type":"User","site_admin":false},"assignees":[{"login":"alexcrichton","id":64996,"avatar_url":"https://avatars.githubusercontent.com/u/64996?v=3","gravatar_id":"","url":"https://api.github.com/users/alexcrichton","html_url":"https://github.com/alexcrichton","followers_url":"https://api.github.com/users/alexcrichton/followers","following_url":"https://api.github.com/users/alexcrichton/following{/other_user}","gists_url":"https://api.github.com/users/alexcrichton/gists{/gist_id}","starred_url":"https://api.github.com/users/alexcrichton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexcrichton/subscriptions","organizations_url":"https://api.github.com/users/alexcrichton/orgs","repos_url":"https://api.github.com/users/alexcrichton/repos","events_url":"https://api.github.com/users/alexcrichton/events{/privacy}","received_events_url":"https://api.github.com/users/alexcrichton/received_events","type":"User","site_admin":false},{"login":"brson","id":147214,"avatar_url":"https://avatars.githubusercontent.com/u/147214?v=3","gravatar_id":"","url":"https://api.github.com/users/brson","html_url":"https://github.com/brson","followers_url":"https://api.github.com/users/brson/followers","following_url":"https://api.github.com/users/brson/following{/other_user}","gists_url":"https://api.github.com/users/brson/gists{/gist_id}","starred_url":"https://api.github.com/users/brson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brson/subscriptions","organizations_url":"https://api.github.com/users/brson/orgs","repos_url":"https://api.github.com/users/brson/repos","events_url":"https://api.github.com/users/brson/events{/privacy}","received_events_url":"https://api.github.com/users/brson/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1133/comments","statuses_url":"https://api.github.com/repos/rust-lang/rfcs/statuses/81a923ad94f0fcaf12348a5c35513ae97ef0f21f","head":{"label":"Ericson2314:cargo-libstd","ref":"cargo-libstd","sha":"81a923ad94f0fcaf12348a5c35513ae97ef0f21f","user":{"login":"Ericson2314","id":1055245,"avatar_url":"https://avatars.githubusercontent.com/u/1055245?v=3","gravatar_id":"","url":"https://api.github.com/users/Ericson2314","html_url":"https://github.com/Ericson2314","followers_url":"https://api.github.com/users/Ericson2314/followers","following_url":"https://api.github.com/users/Ericson2314/following{/other_user}","gists_url":"https://api.github.com/users/Ericson2314/gists{/gist_id}","starred_url":"https://api.github.com/users/Ericson2314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ericson2314/subscriptions","organizations_url":"https://api.github.com/users/Ericson2314/orgs","repos_url":"https://api.github.com/users/Ericson2314/repos","events_url":"https://api.github.com/users/Ericson2314/events{/privacy}","received_events_url":"https://api.github.com/users/Ericson2314/received_events","type":"User","site_admin":false},"repo":{"id":22736283,"name":"rfcs","full_name":"Ericson2314/rfcs","owner":{"login":"Ericson2314","id":1055245,"avatar_url":"https://avatars.githubusercontent.com/u/1055245?v=3","gravatar_id":"","url":"https://api.github.com/users/Ericson2314","html_url":"https://github.com/Ericson2314","followers_url":"https://api.github.com/users/Ericson2314/followers","following_url":"https://api.github.com/users/Ericson2314/following{/other_user}","gists_url":"https://api.github.com/users/Ericson2314/gists{/gist_id}","starred_url":"https://api.github.com/users/Ericson2314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ericson2314/subscriptions","organizations_url":"https://api.github.com/users/Ericson2314/orgs","repos_url":"https://api.github.com/users/Ericson2314/repos","events_url":"https://api.github.com/users/Ericson2314/events{/privacy}","received_events_url":"https://api.github.com/users/Ericson2314/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Ericson2314/rfcs","description":"RFCs for changes to Rust","fork":true,"url":"https://api.github.com/repos/Ericson2314/rfcs","forks_url":"https://api.github.com/repos/Ericson2314/rfcs/forks","keys_url":"https://api.github.com/repos/Ericson2314/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ericson2314/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ericson2314/rfcs/teams","hooks_url":"https://api.github.com/repos/Ericson2314/rfcs/hooks","issue_events_url":"https://api.github.com/repos/Ericson2314/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/Ericson2314/rfcs/events","assignees_url":"https://api.github.com/repos/Ericson2314/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/Ericson2314/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/Ericson2314/rfcs/tags","blobs_url":"https://api.github.com/repos/Ericson2314/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ericson2314/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ericson2314/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ericson2314/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ericson2314/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/Ericson2314/rfcs/languages","stargazers_url":"https://api.github.com/repos/Ericson2314/rfcs/stargazers","contributors_url":"https://api.github.com/repos/Ericson2314/rfcs/contributors","subscribers_url":"https://api.github.com/repos/Ericson2314/rfcs/subscribers","subscription_url":"https://api.github.com/repos/Ericson2314/rfcs/subscription","commits_url":"https://api.github.com/repos/Ericson2314/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ericson2314/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ericson2314/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ericson2314/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ericson2314/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/Ericson2314/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ericson2314/rfcs/merges","archive_url":"https://api.github.com/repos/Ericson2314/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ericson2314/rfcs/downloads","issues_url":"https://api.github.com/repos/Ericson2314/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/Ericson2314/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/Ericson2314/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/Ericson2314/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ericson2314/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/Ericson2314/rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/Ericson2314/rfcs/deployments","created_at":"2014-08-07T20:56:33Z","updated_at":"2016-04-25T05:15:36Z","pushed_at":"2016-08-06T00:38:23Z","git_url":"git://github.com/Ericson2314/rfcs.git","ssh_url":"git@github.com:Ericson2314/rfcs.git","clone_url":"https://github.com/Ericson2314/rfcs.git","svn_url":"https://github.com/Ericson2314/rfcs","homepage":"","size":2922,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"736f59fb9ee854219a203fe6aab0e5c7835621e0","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":17527989,"name":"rfcs","full_name":"rust-lang/rfcs","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rfcs","description":"RFCs for changes to Rust","fork":false,"url":"https://api.github.com/repos/rust-lang/rfcs","forks_url":"https://api.github.com/repos/rust-lang/rfcs/forks","keys_url":"https://api.github.com/repos/rust-lang/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rfcs/teams","hooks_url":"https://api.github.com/repos/rust-lang/rfcs/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rfcs/events","assignees_url":"https://api.github.com/repos/rust-lang/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rfcs/tags","blobs_url":"https://api.github.com/repos/rust-lang/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rfcs/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rfcs/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rfcs/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rfcs/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rfcs/subscription","commits_url":"https://api.github.com/repos/rust-lang/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rfcs/merges","archive_url":"https://api.github.com/repos/rust-lang/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rfcs/downloads","issues_url":"https://api.github.com/repos/rust-lang/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rfcs/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang/rfcs/deployments","created_at":"2014-03-07T21:29:00Z","updated_at":"2016-08-06T08:20:10Z","pushed_at":"2016-08-06T00:38:24Z","git_url":"git://github.com/rust-lang/rfcs.git","ssh_url":"git@github.com:rust-lang/rfcs.git","clone_url":"https://github.com/rust-lang/rfcs.git","svn_url":"https://github.com/rust-lang/rfcs","homepage":"","size":6092,"stargazers_count":700,"watchers_count":700,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":340,"mirror_url":null,"open_issues_count":682,"forks":340,"open_issues":682,"watchers":700,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/1133"},"issue":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/1133"},"comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/1133/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1133/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rfcs/statuses/81a923ad94f0fcaf12348a5c35513ae97ef0f21f"}}}}
{"actor":{"display_login":"Ericson2314"}}