{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/40624391","id":40624391,"diff_hunk":"@@ -0,0 +1,621 @@\n+- Feature Name: incremental-compilation\n+- Start Date: 2015-08-04\n+- RFC PR: (leave this empty)\n+- Rust Issue: (leave this empty)\n+\n+# Summary\n+\n+Enable the compiler to cache incremental workproducts.\n+\n+# Motivation\n+\n+The goal of incremental compilation is, naturally, to improve build\n+times when making small edits. Any reader who has never felt the need\n+for such a feature is strongly encouraged to attempt hacking on the\n+compiler or servo sometime (naturally, all readers are so encouraged,\n+regardless of their opinion on the need for incremental compilation).\n+\n+## Basic usage\n+\n+The basic usage will be that one enables incremental compilation using\n+a compiler flag like `-C incremental-compilation=TMPDIR`. The `TMPDIR`\n+directory is intended to be an empty directory that the compiler can\n+use to store intermediate by-products; the compiler will automatically\n+\"GC\" this directory, deleting older files that are no longer relevant\n+and creating new ones.\n+\n+## High-level design\n+\n+The high-level idea is that we will track the following intermediate\n+workproducts for every function (and, indeed, for other kinds of items\n+as well, but functions are easiest to describe):\n+\n+- External signature\n+  - For a function, this would include the types of its arguments,\n+    where-clauses declared on the function, and so forth.\n+- MIR\n+  - The MIR represents the type-checked statements in the body, in\n+    simplified forms. It is described by [RFC #1211][1211]. As the MIR\n+    is not fully implemented, this is a non-trivial dependency. We\n+    could instead use the existing annotated HIR, however that would\n+    require a larger effort in terms of porting and adapting data\n+    structures to an incremental setting.  Using the MIR simplifies\n+    things in this respect.\n+- Object files\n+  - This represents the final result of running LLVM. It may be that\n+    the best strategy is to \"cache\" compiled code in the form of an\n+    rlib that is progessively patched, or it may be easier to store","path":"text/0000-incremental-compilation.md","position":47,"original_position":47,"commit_id":"fa9ce6d68f7c3fe5e7251439f9f9866f8e50eff3","original_commit_id":"fa9ce6d68f7c3fe5e7251439f9f9866f8e50eff3","user":{"login":"frewsxcv","id":416575,"avatar_url":"https://avatars.githubusercontent.com/u/416575?v=3","gravatar_id":"","url":"https://api.github.com/users/frewsxcv","html_url":"https://github.com/frewsxcv","followers_url":"https://api.github.com/users/frewsxcv/followers","following_url":"https://api.github.com/users/frewsxcv/following{/other_user}","gists_url":"https://api.github.com/users/frewsxcv/gists{/gist_id}","starred_url":"https://api.github.com/users/frewsxcv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/frewsxcv/subscriptions","organizations_url":"https://api.github.com/users/frewsxcv/orgs","repos_url":"https://api.github.com/users/frewsxcv/repos","events_url":"https://api.github.com/users/frewsxcv/events{/privacy}","received_events_url":"https://api.github.com/users/frewsxcv/received_events","type":"User","site_admin":false},"body":"\"progessively\" → \"progressively\"","created_at":"2015-09-29T00:58:25Z","updated_at":"2015-09-29T00:58:25Z","html_url":"https://github.com/rust-lang/rfcs/pull/1298#discussion_r40624391","pull_request_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/comments/40624391"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/1298#discussion_r40624391"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298","id":46185603,"html_url":"https://github.com/rust-lang/rfcs/pull/1298","diff_url":"https://github.com/rust-lang/rfcs/pull/1298.diff","patch_url":"https://github.com/rust-lang/rfcs/pull/1298.patch","issue_url":"https://api.github.com/repos/rust-lang/rfcs/issues/1298","number":1298,"state":"open","locked":false,"title":"Incremental compilation RFC","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},"body":"High-level strategy for incremental compilation.\r\n\r\ncc @rust-lang/compiler \r\n\r\n[Rendered](https://github.com/nikomatsakis/rfcs/blob/incremental-compilation/text/0000-incremental-compilation.md)","created_at":"2015-09-28T17:39:49Z","updated_at":"2015-09-29T00:58:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f7c12aa376d33279e20ace6f542b4af6b92fbdaa","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298/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/1298/comments","statuses_url":"https://api.github.com/repos/rust-lang/rfcs/statuses/fa9ce6d68f7c3fe5e7251439f9f9866f8e50eff3","head":{"label":"nikomatsakis:incremental-compilation","ref":"incremental-compilation","sha":"fa9ce6d68f7c3fe5e7251439f9f9866f8e50eff3","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},"repo":{"id":17838433,"name":"rfcs","full_name":"nikomatsakis/rfcs","owner":{"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},"private":false,"html_url":"https://github.com/nikomatsakis/rfcs","description":"RFCs for changes to Rust","fork":true,"url":"https://api.github.com/repos/nikomatsakis/rfcs","forks_url":"https://api.github.com/repos/nikomatsakis/rfcs/forks","keys_url":"https://api.github.com/repos/nikomatsakis/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nikomatsakis/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nikomatsakis/rfcs/teams","hooks_url":"https://api.github.com/repos/nikomatsakis/rfcs/hooks","issue_events_url":"https://api.github.com/repos/nikomatsakis/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/nikomatsakis/rfcs/events","assignees_url":"https://api.github.com/repos/nikomatsakis/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/nikomatsakis/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/nikomatsakis/rfcs/tags","blobs_url":"https://api.github.com/repos/nikomatsakis/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nikomatsakis/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nikomatsakis/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/nikomatsakis/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nikomatsakis/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/nikomatsakis/rfcs/languages","stargazers_url":"https://api.github.com/repos/nikomatsakis/rfcs/stargazers","contributors_url":"https://api.github.com/repos/nikomatsakis/rfcs/contributors","subscribers_url":"https://api.github.com/repos/nikomatsakis/rfcs/subscribers","subscription_url":"https://api.github.com/repos/nikomatsakis/rfcs/subscription","commits_url":"https://api.github.com/repos/nikomatsakis/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/nikomatsakis/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/nikomatsakis/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/nikomatsakis/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/nikomatsakis/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/nikomatsakis/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nikomatsakis/rfcs/merges","archive_url":"https://api.github.com/repos/nikomatsakis/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nikomatsakis/rfcs/downloads","issues_url":"https://api.github.com/repos/nikomatsakis/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/nikomatsakis/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/nikomatsakis/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/nikomatsakis/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nikomatsakis/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/nikomatsakis/rfcs/releases{/id}","created_at":"2014-03-17T18:18:40Z","updated_at":"2014-10-06T17:51:08Z","pushed_at":"2015-09-28T17:57:05Z","git_url":"git://github.com/nikomatsakis/rfcs.git","ssh_url":"git@github.com:nikomatsakis/rfcs.git","clone_url":"https://github.com/nikomatsakis/rfcs.git","svn_url":"https://github.com/nikomatsakis/rfcs","homepage":"","size":2910,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"8e2d3a3341da533f846f61f10335b72c9a9f4740","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}","created_at":"2014-03-07T21:29:00Z","updated_at":"2015-09-28T22:47:11Z","pushed_at":"2015-09-28T18:42:27Z","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":11215,"stargazers_count":464,"watchers_count":464,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":234,"mirror_url":null,"open_issues_count":558,"forks":234,"open_issues":558,"watchers":464,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298"},"html":{"href":"https://github.com/rust-lang/rfcs/pull/1298"},"issue":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/1298"},"comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/issues/1298/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rfcs/pulls/1298/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/1298/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rfcs/statuses/fa9ce6d68f7c3fe5e7251439f9f9866f8e50eff3"}}}}