{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/comments/74803805","id":74803805,"diff_hunk":"@@ -0,0 +1,191 @@\n+/// BenchmarkDotNet Notes:\n+/// Docs/Github: https://github.com/PerfDotNet/BenchmarkDotNet#getting-started\n+///\n+/// This benchmarking suite will perform JIT warmups, collect system environment data\n+/// run multiple trials, and produce convenient reports.  \n+/// You will find csv, markdown, and and html versions of the reports in .\\BenchmarkDotNet.Artifacts\\results\n+/// after running the tests.\n+///\n+/// Be sure to run tests in Release mode, optimizations on, etc.\n+\n+\n+module Program\n+\n+open System\n+open System.Threading.Tasks\n+\n+/// BenchmarkDotNet on Nuget at:\n+/// https://www.nuget.org/packages/BenchmarkDotNet/\n+/// https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/\n+open BenchmarkDotNet.Attributes\n+open BenchmarkDotNet.Running\n+open BenchmarkDotNet.Configs\n+open BenchmarkDotNet.Jobs\n+\n+#if MONO\n+#else\n+open BenchmarkDotNet.Diagnostics.Windows\n+#endif\n+                \n+/// When pulling functions out of the complete fsharp solution to test\n+/// Some things are not easily available, such as Array.zeroCreateUnchecked\n+/// We mock these here using their checked variations\n+module Array =\n+    let inline zeroCreateUnchecked (count:int) = \n+        Array.zeroCreate count\n+\n+    let inline subUnchecked startIndex count (array : 'T[]) =\n+        Array.sub array startIndex count\n+\n+// Almost every array function calls this, so mock it with \n+// the exact same code\n+let inline checkNonNull argName arg = \n+            match box arg with \n+            | null -> nullArg argName \n+            | _ -> ()\n+\n+\n+/// Here you can add the functions you want to test against.\n+/// Below I use Parrallel.Partition as an example\n+\n+\n+// Original partition\n+let partition predicate (array : 'T[]) =\n+                checkNonNull \"array\" array\n+                let inputLength = array.Length\n+                let lastInputIndex = inputLength - 1\n+\n+                let isTrue = Array.zeroCreateUnchecked inputLength\n+                Parallel.For(0, inputLength, \n+                    fun i -> isTrue.[i] <- predicate array.[i]\n+                    ) |> ignore\n+                \n+                let mutable trueLength = 0\n+                for i in 0 .. lastInputIndex do\n+                    if isTrue.[i] then trueLength <- trueLength + 1\n+                \n+                let trueResult = Array.zeroCreateUnchecked trueLength\n+                let falseResult = Array.zeroCreateUnchecked (inputLength - trueLength)\n+                let mutable iTrue = 0\n+                let mutable iFalse = 0\n+                for i = 0 to lastInputIndex do\n+                    if isTrue.[i] then\n+                        trueResult.[iTrue] <- array.[i]\n+                        iTrue <- iTrue + 1\n+                    else\n+                        falseResult.[iFalse] <- array.[i]\n+                        iFalse <- iFalse + 1\n+\n+                (trueResult, falseResult)\n+\n+// New variation\n+let partitionNew predicate (array : 'T[]) =\n+                \n+                checkNonNull \"array\" array\n+                let inputLength = array.Length                \n+                let isTrue = Array.zeroCreateUnchecked inputLength                \n+                let mutable trueLength = 0\n+                                                \n+                Parallel.For(0, \n+                             inputLength, \n+                             (fun () -> 0),\n+                             (fun i _ trueCount -> \n+                                if predicate array.[i] then\n+                                    isTrue.[i] <- true\n+                                    trueCount + 1\n+                                else\n+                                    trueCount),                        \n+                             Action<int> (fun x -> System.Threading.Interlocked.Add(&trueLength,x) |> ignore) ) |> ignore\n+                                \n+                let res1 = Array.zeroCreateUnchecked trueLength\n+                let res2 = Array.zeroCreateUnchecked (inputLength - trueLength)\n+                let mutable iTrue = 0\n+                let mutable iFalse = 0\n+                for i = 0 to isTrue.Length-1 do\n+                    if isTrue.[i] then\n+                        res1.[iTrue] <- array.[i]\n+                        iTrue <- iTrue + 1\n+                    else\n+                        res2.[iFalse] <- array.[i]\n+                        iFalse <- iFalse + 1\n+\n+                res1, res2\n+\n+\n+\n+\n+/// Configuration for a given benchmark\n+type ArrayPerfConfig () =\n+    inherit ManualConfig()\n+    do \n+        base.Add Job.RyuJitX64\n+        //base.Add Job.LegacyJitX86 // If you want to also test 32bit. It will run tests on both if both of these are here.\n+        #if MONO\n+        #else\n+        base.Add(new MemoryDiagnoser())  // To get GC and allocation data\n+        #endif\n+\n+[<Config (typeof<ArrayPerfConfig>)>]\n+type ArrayBenchmark () =    \n+    let r = Random()\n+\n+    let mutable array = [||]\n+    let mutable array2 = [||]\n+    let mutable array3 = [||]\n+    \n+\n+\n+    //When the test runs, it will run once per each each param.\n+    //This is used to run the test on arrays of size 10, 100, etc\n+    //You can create a 2nd Params section and the test will run over all permutations\n+    [<Params (10,100,10000,1000000,10000000)>] \n+    member val public Length = 0 with get, set\n+\n+    //This is run before each iteration of a test\n+    [<Setup>]\n+    member self.SetupData () =       \n+             \n+        // Initialize whatever arrays or other data you want to test on here.\n+        // Random is often handy but some algorithms you may want to test on \n+        // Sorted or other structured data. Ints/doubles/objects etc\n+        // Create however many you need.  Setup time is not included in \n+        // runtime statistics, however allocations may be, due to a bug \n+        // as of this comment.\n+\n+        array <- Array.init self.Length (fun i -> int(r.NextDouble()*1000.0))\n+        //array2 <- Array.create self.Length 5\n+        \n+    \n+    \n+    \n+    // If you set a benchmark as baseline, the results output will add a \n+    // column showing runtime of all other benchmarks as a percentage of the baseline\n+    // care must be taken here to be sure your benchmark is not JITTed into nothingness\n+    // because it is identified as dead code.      \n+    [<Benchmark(Baseline=true)>]\n+    member self.Original () =\n+        array |> partition (fun x -> x % 2 = 0) \n+\n+    [<Benchmark>]\n+    member self.New () =\n+        array |> partition (fun x -> x % 2 = 0)","path":"tests/scripts/array-perf/array-perf.fs","position":171,"original_position":171,"commit_id":"629d4e20918f7a746a7e07034d6d26a5c3b26894","original_commit_id":"629d4e20918f7a746a7e07034d6d26a5c3b26894","user":{"login":"jackmott","id":4701158,"avatar_url":"https://avatars.githubusercontent.com/u/4701158?v=3","gravatar_id":"","url":"https://api.github.com/users/jackmott","html_url":"https://github.com/jackmott","followers_url":"https://api.github.com/users/jackmott/followers","following_url":"https://api.github.com/users/jackmott/following{/other_user}","gists_url":"https://api.github.com/users/jackmott/gists{/gist_id}","starred_url":"https://api.github.com/users/jackmott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackmott/subscriptions","organizations_url":"https://api.github.com/users/jackmott/orgs","repos_url":"https://api.github.com/users/jackmott/repos","events_url":"https://api.github.com/users/jackmott/events{/privacy}","received_events_url":"https://api.github.com/users/jackmott/received_events","type":"User","site_admin":false},"body":"yep!\r\n","created_at":"2016-08-15T17:59:04Z","updated_at":"2016-08-15T17:59:05Z","html_url":"https://github.com/Microsoft/visualfsharp/pull/1423#discussion_r74803805","pull_request_url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/comments/74803805"},"html":{"href":"https://github.com/Microsoft/visualfsharp/pull/1423#discussion_r74803805"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423","id":81055820,"html_url":"https://github.com/Microsoft/visualfsharp/pull/1423","diff_url":"https://github.com/Microsoft/visualfsharp/pull/1423.diff","patch_url":"https://github.com/Microsoft/visualfsharp/pull/1423.patch","issue_url":"https://api.github.com/repos/Microsoft/visualfsharp/issues/1423","number":1423,"state":"open","locked":false,"title":"Faster parallel array partition and choose","user":{"login":"jackmott","id":4701158,"avatar_url":"https://avatars.githubusercontent.com/u/4701158?v=3","gravatar_id":"","url":"https://api.github.com/users/jackmott","html_url":"https://github.com/jackmott","followers_url":"https://api.github.com/users/jackmott/followers","following_url":"https://api.github.com/users/jackmott/following{/other_user}","gists_url":"https://api.github.com/users/jackmott/gists{/gist_id}","starred_url":"https://api.github.com/users/jackmott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackmott/subscriptions","organizations_url":"https://api.github.com/users/jackmott/orgs","repos_url":"https://api.github.com/users/jackmott/repos","events_url":"https://api.github.com/users/jackmott/events{/privacy}","received_events_url":"https://api.github.com/users/jackmott/received_events","type":"User","site_admin":false},"body":"Runtime is about 1.3x faster on my machine (4 core i7 mobile), with no memory use penalty.  Would love input on this one, there may be some ways to improve on the approach. I am deep in uncharted Parallel.For territory.\r\n\r\nBenchmarkDotNet results, partitioning a random int array with `(fun x -> x % 2 = 0)`\r\n\r\nNote that the benchmark results are somewhat stochastic, they will bounce around from 35% to 10% better each time I run the suite, there doesn't appear to be a general trend where it gets better or worse moving from 1 million to 10 million.  I've also used more complex predicates and the relative differences are similar.\r\n\r\n```ini\r\n\r\nHost Process Environment Information:\r\nBenchmarkDotNet=v0.9.8.0\r\nOS=Microsoft Windows NT 6.2.9200.0\r\nProcessor=Intel(R) Core(TM) i7-4712HQ CPU 2.30GHz, ProcessorCount=8\r\nFrequency=2240907 ticks, Resolution=446.2479 ns, Timer=TSC\r\nCLR=MS.NET 4.0.30319.42000, Arch=64-bit RELEASE [RyuJIT]\r\nGC=Concurrent Workstation\r\nJitModules=clrjit-v4.6.1590.0\r\n\r\nType=SIMDBenchmark  Mode=Throughput  Platform=X64  \r\nJit=RyuJit  GarbageCollection=Concurrent Workstation  \r\n\r\n```\r\n\r\n### Partition\r\n\r\n   Method |   Length |          Median |        StdDev | Scaled | Gen 0 | Gen 1 | Gen 2 | Bytes Allocated/Op |\r\n--------- |--------- |---------------- |-------------- |------- |------ |------ |------ |------------------- |\r\n **Original** |     **1000** |      **21.8514 us** |     **0.5300 us** |   **1.00** |  **0.16** |     **-** |     **-** |           **3,471.77** |\r\n      New |     1000 |      20.5297 us |     0.8840 us |   0.94 |  0.17 |     - |     - |           3,489.75 |\r\n **Original** |    **10000** |     **160.0466 us** |     **3.1249 us** |   **1.00** |  **1.21** |     **-** |     **-** |          **28,955.03** |\r\n      New |    10000 |     118.1885 us |     2.8572 us |   0.74 |  1.20 |     - |     - |          28,666.02 |\r\n **Original** |   **100000** |   **1,282.9827 us** |     **7.3705 us** |   **1.00** |     **-** |     **-** | **10.17** |         **211,334.08** |\r\n      New |   100000 |     917.0063 us |    17.4501 us |   0.71 |     - |     - |  7.27 |         151,441.53 |\r\n **Original** |  **1000000** |  **12,467.9427 us** |   **728.8799 us** |   **1.00** |     **-** |     **-** | **65.99** |       **2,353,833.73** |\r\n      New |  1000000 |   9,700.7108 us |   990.4339 us |   0.78 |     - |     - | 65.24 |       2,309,151.64 |\r\n   Scalar |  1000000 |  13,680.7468 us |   212.0151 us |   1.10 |  3.25 |     - | 37.57 |       4,361,586.45 |\r\n **Original** | **10000000** | **125,043.1745 us** | **1,753.3497 us** |   **1.00** |     **-** |     **-** | **35.28** |      **29,670,713.02** |\r\n      New | 10000000 |  86,908.7271 us | 1,472.4448 us |   0.70 |     - |     - | 35.53 |      29,909,345.33 |\r\n\r\n\r\n### Choose\r\n\r\n   Method |   Length |          Median |         StdDev | Scaled |    Gen 0 | Gen 1 | Gen 2 | Bytes Allocated/Op |\r\n--------- |--------- |---------------- |--------------- |------- |--------- |------ |------ |------------------- |\r\n **Original** |     **1000** |      **24.1173 us** |      **1.8355 us** |   **1.00** |     **0.52** |     **-** |     **-** |          **13,721.83** |\r\n      New |     1000 |      25.8602 us |      0.3443 us |   1.07 |     0.47 |     - |     - |          12,292.06 |\r\n **Original** |    **10000** |     **235.2287 us** |      **4.9615 us** |   **1.00** |     **4.55** |     **-** |     **-** |         **157,065.29** |\r\n      New |    10000 |     190.6397 us |      5.1752 us |   0.81 |     4.72 |     - |     - |         167,680.01 |\r\n **Original** |   **100000** |   **2,352.3452 us** |     **58.5964 us** |   **1.00** |    **18.99** |     **-** | **10.23** |       **1,206,016.17** |\r\n      New |   100000 |   1,696.8924 us |     38.6374 us |   0.72 |    18.30 |     - |  9.54 |       1,093,127.52 |\r\n **Original** |  **1000000** |  **23,316.6749 us** |    **899.0359 us** |   **1.00** |   **269.10** |  **1.62** | **41.29** |      **14,659,078.49** |\r\n      New |  1000000 |  15,062.9299 us |  1,155.5808 us |   0.65 |   294.00 |  1.39 | 46.05 |      15,348,631.44 |\r\n **Original** | **10000000** | **178,700.9122 us** | **24,916.3155 us** |   **1.00** | **2,524.00** |     **-** | **38.00** |     **142,952,816.14** |\r\n      New | 10000000 | 163,852.8507 us | 17,740.5511 us |   0.92 | 2,634.24 |     - | 35.28 |     141,815,184.40 |\r\n\r\n","created_at":"2016-08-12T01:15:41Z","updated_at":"2016-08-15T17:59:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2e91551c43de18663edf89da8af1396f3187f592","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423/commits","review_comments_url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423/comments","review_comment_url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/visualfsharp/issues/1423/comments","statuses_url":"https://api.github.com/repos/Microsoft/visualfsharp/statuses/629d4e20918f7a746a7e07034d6d26a5c3b26894","head":{"label":"jackmott:faster-parallel-partition","ref":"faster-parallel-partition","sha":"629d4e20918f7a746a7e07034d6d26a5c3b26894","user":{"login":"jackmott","id":4701158,"avatar_url":"https://avatars.githubusercontent.com/u/4701158?v=3","gravatar_id":"","url":"https://api.github.com/users/jackmott","html_url":"https://github.com/jackmott","followers_url":"https://api.github.com/users/jackmott/followers","following_url":"https://api.github.com/users/jackmott/following{/other_user}","gists_url":"https://api.github.com/users/jackmott/gists{/gist_id}","starred_url":"https://api.github.com/users/jackmott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackmott/subscriptions","organizations_url":"https://api.github.com/users/jackmott/orgs","repos_url":"https://api.github.com/users/jackmott/repos","events_url":"https://api.github.com/users/jackmott/events{/privacy}","received_events_url":"https://api.github.com/users/jackmott/received_events","type":"User","site_admin":false},"repo":{"id":65216056,"name":"visualfsharp","full_name":"jackmott/visualfsharp","owner":{"login":"jackmott","id":4701158,"avatar_url":"https://avatars.githubusercontent.com/u/4701158?v=3","gravatar_id":"","url":"https://api.github.com/users/jackmott","html_url":"https://github.com/jackmott","followers_url":"https://api.github.com/users/jackmott/followers","following_url":"https://api.github.com/users/jackmott/following{/other_user}","gists_url":"https://api.github.com/users/jackmott/gists{/gist_id}","starred_url":"https://api.github.com/users/jackmott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackmott/subscriptions","organizations_url":"https://api.github.com/users/jackmott/orgs","repos_url":"https://api.github.com/users/jackmott/repos","events_url":"https://api.github.com/users/jackmott/events{/privacy}","received_events_url":"https://api.github.com/users/jackmott/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jackmott/visualfsharp","description":"The Visual F# compiler and tools","fork":true,"url":"https://api.github.com/repos/jackmott/visualfsharp","forks_url":"https://api.github.com/repos/jackmott/visualfsharp/forks","keys_url":"https://api.github.com/repos/jackmott/visualfsharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jackmott/visualfsharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jackmott/visualfsharp/teams","hooks_url":"https://api.github.com/repos/jackmott/visualfsharp/hooks","issue_events_url":"https://api.github.com/repos/jackmott/visualfsharp/issues/events{/number}","events_url":"https://api.github.com/repos/jackmott/visualfsharp/events","assignees_url":"https://api.github.com/repos/jackmott/visualfsharp/assignees{/user}","branches_url":"https://api.github.com/repos/jackmott/visualfsharp/branches{/branch}","tags_url":"https://api.github.com/repos/jackmott/visualfsharp/tags","blobs_url":"https://api.github.com/repos/jackmott/visualfsharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jackmott/visualfsharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jackmott/visualfsharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/jackmott/visualfsharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jackmott/visualfsharp/statuses/{sha}","languages_url":"https://api.github.com/repos/jackmott/visualfsharp/languages","stargazers_url":"https://api.github.com/repos/jackmott/visualfsharp/stargazers","contributors_url":"https://api.github.com/repos/jackmott/visualfsharp/contributors","subscribers_url":"https://api.github.com/repos/jackmott/visualfsharp/subscribers","subscription_url":"https://api.github.com/repos/jackmott/visualfsharp/subscription","commits_url":"https://api.github.com/repos/jackmott/visualfsharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/jackmott/visualfsharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/jackmott/visualfsharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/jackmott/visualfsharp/issues/comments{/number}","contents_url":"https://api.github.com/repos/jackmott/visualfsharp/contents/{+path}","compare_url":"https://api.github.com/repos/jackmott/visualfsharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jackmott/visualfsharp/merges","archive_url":"https://api.github.com/repos/jackmott/visualfsharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jackmott/visualfsharp/downloads","issues_url":"https://api.github.com/repos/jackmott/visualfsharp/issues{/number}","pulls_url":"https://api.github.com/repos/jackmott/visualfsharp/pulls{/number}","milestones_url":"https://api.github.com/repos/jackmott/visualfsharp/milestones{/number}","notifications_url":"https://api.github.com/repos/jackmott/visualfsharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jackmott/visualfsharp/labels{/name}","releases_url":"https://api.github.com/repos/jackmott/visualfsharp/releases{/id}","deployments_url":"https://api.github.com/repos/jackmott/visualfsharp/deployments","created_at":"2016-08-08T15:30:37Z","updated_at":"2016-08-08T15:30:50Z","pushed_at":"2016-08-15T15:43:35Z","git_url":"git://github.com/jackmott/visualfsharp.git","ssh_url":"git@github.com:jackmott/visualfsharp.git","clone_url":"https://github.com/jackmott/visualfsharp.git","svn_url":"https://github.com/jackmott/visualfsharp","homepage":null,"size":76298,"stargazers_count":0,"watchers_count":0,"language":"F#","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":"Microsoft:master","ref":"master","sha":"682d06ddadce107ce21de75cb9cd53dd5c25984d","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":29048891,"name":"visualfsharp","full_name":"Microsoft/visualfsharp","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/visualfsharp","description":"The Visual F# compiler and tools","fork":false,"url":"https://api.github.com/repos/Microsoft/visualfsharp","forks_url":"https://api.github.com/repos/Microsoft/visualfsharp/forks","keys_url":"https://api.github.com/repos/Microsoft/visualfsharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/visualfsharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/visualfsharp/teams","hooks_url":"https://api.github.com/repos/Microsoft/visualfsharp/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/visualfsharp/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/visualfsharp/events","assignees_url":"https://api.github.com/repos/Microsoft/visualfsharp/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/visualfsharp/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/visualfsharp/tags","blobs_url":"https://api.github.com/repos/Microsoft/visualfsharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/visualfsharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/visualfsharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/visualfsharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/visualfsharp/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/visualfsharp/languages","stargazers_url":"https://api.github.com/repos/Microsoft/visualfsharp/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/visualfsharp/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/visualfsharp/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/visualfsharp/subscription","commits_url":"https://api.github.com/repos/Microsoft/visualfsharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/visualfsharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/visualfsharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/visualfsharp/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/visualfsharp/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/visualfsharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/visualfsharp/merges","archive_url":"https://api.github.com/repos/Microsoft/visualfsharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/visualfsharp/downloads","issues_url":"https://api.github.com/repos/Microsoft/visualfsharp/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/visualfsharp/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/visualfsharp/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/visualfsharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/visualfsharp/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/visualfsharp/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/visualfsharp/deployments","created_at":"2015-01-10T05:58:43Z","updated_at":"2016-08-13T21:19:44Z","pushed_at":"2016-08-15T16:16:58Z","git_url":"git://github.com/Microsoft/visualfsharp.git","ssh_url":"git@github.com:Microsoft/visualfsharp.git","clone_url":"https://github.com/Microsoft/visualfsharp.git","svn_url":"https://github.com/Microsoft/visualfsharp","homepage":null,"size":235225,"stargazers_count":809,"watchers_count":809,"language":"F#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":203,"mirror_url":null,"open_issues_count":274,"forks":203,"open_issues":274,"watchers":809,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423"},"html":{"href":"https://github.com/Microsoft/visualfsharp/pull/1423"},"issue":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/issues/1423"},"comments":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/issues/1423/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/pulls/1423/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/visualfsharp/statuses/629d4e20918f7a746a7e07034d6d26a5c3b26894"}}}}
{"actor":{"display_login":"jackmott"}}