{"action":"created","issue":{"url":"https://api.github.com/repos/apple/swift/issues/5291","repository_url":"https://api.github.com/repos/apple/swift","labels_url":"https://api.github.com/repos/apple/swift/issues/5291/labels{/name}","comments_url":"https://api.github.com/repos/apple/swift/issues/5291/comments","events_url":"https://api.github.com/repos/apple/swift/issues/5291/events","html_url":"https://github.com/apple/swift/pull/5291","id":183061128,"number":5291,"title":"[stdlib] Rewriting native hashed collection indices (rebased)","user":{"login":"Gankro","id":1136864,"avatar_url":"https://avatars.githubusercontent.com/u/1136864?v=3","gravatar_id":"","url":"https://api.github.com/users/Gankro","html_url":"https://github.com/Gankro","followers_url":"https://api.github.com/users/Gankro/followers","following_url":"https://api.github.com/users/Gankro/following{/other_user}","gists_url":"https://api.github.com/users/Gankro/gists{/gist_id}","starred_url":"https://api.github.com/users/Gankro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Gankro/subscriptions","organizations_url":"https://api.github.com/users/Gankro/orgs","repos_url":"https://api.github.com/users/Gankro/repos","events_url":"https://api.github.com/users/Gankro/events{/privacy}","received_events_url":"https://api.github.com/users/Gankro/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":46,"created_at":"2016-10-14T14:14:39Z","updated_at":"2016-10-20T01:21:48Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/apple/swift/pulls/5291","html_url":"https://github.com/apple/swift/pull/5291","diff_url":"https://github.com/apple/swift/pull/5291.diff","patch_url":"https://github.com/apple/swift/pull/5291.patch"},"body":"<!-- What's in this pull request? -->\r\n\r\nThis is a rebase of #3046. The majority of the work here is @austinzheng's, and can be found in the first commit. However the codebase had changed enough that the patch had to be significantly modified. I'm mostly relying on the test suite to verify that there weren't errors in resolving all the conflicts.\r\n\r\n    Changes:\r\n    - Native dictionary and set indices no longer hold references to storage\r\n    - Cocoa-based dictionary and set indices no longer hold references to storage\r\n    - Removed double indirection trick from hashed collections\r\n    - Rewrote storage types to reflect simpler model\r\n    - Updated unit tests\r\n\r\nAs a consequence of removing the double indirection, Dictionary -> NSDictionary now always requires an allocation for a wrapper class. This means that if you bridge a Dictionary multiple times, the resultant NSDictionaries will not be referentially identical. I briefly investigated trying to restore the previous behaviour; or at least perform the optimizations that Array does to make the verbatim-bridgeable case free. \r\n\r\nDiscussion with @dabrahams lead to the conclusion that restoring the previous behaviour isn't necessary or even strictly desirable. In particular, the old behaviour could lead to the bridged buffer being kept alive much longer than necessary. This design ensures those are cleaned up as soon as possible. \r\n\r\nMy own research into adopting Array's optimization appears to be infeasible, as _NativeDictionaryStorage already inherits from ManagedBuffer, and so can't inherit from _NSDictionaryCore as well (right?).\r\n\r\nStill, it should be noted that this will almost certainly lead to regressions in bridging performance. At least in micro-benchmarks. \r\n\r\nIt should also be noted that this redesign is necessary for soundness, as the double-indirection design is unsound for multi-threading (as discussed in SE-0065: https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md). \r\n\r\n<!-- If this pull request resolves any bugs in the Swift bug tracker, provide a link: \r\nResolves [SR-NNNN](https://bugs.swift.org/browse/SR-NNNN). -->\r\n\r\n<!--\r\nBefore merging this pull request, you must run the Swift continuous integration tests.\r\nFor information about triggering CI builds via @swift-ci, see:\r\nhttps://github.com/apple/swift/blob/master/docs/ContinuousIntegration.md#swift-ci\r\n\r\nThank you for your contribution to Swift!\r\n-->\r\n\r\nTODO before merge:\r\n\r\n* [x] re-instate empty-collection-singleton\r\n* [x] fix comparison change\r\n* [ ] evaluate benches\r\n* [ ] fix documentation"},"comment":{"url":"https://api.github.com/repos/apple/swift/issues/comments/254985238","html_url":"https://github.com/apple/swift/pull/5291#issuecomment-254985238","issue_url":"https://api.github.com/repos/apple/swift/issues/5291","id":254985238,"user":{"login":"swift-ci","id":15467072,"avatar_url":"https://avatars.githubusercontent.com/u/15467072?v=3","gravatar_id":"","url":"https://api.github.com/users/swift-ci","html_url":"https://github.com/swift-ci","followers_url":"https://api.github.com/users/swift-ci/followers","following_url":"https://api.github.com/users/swift-ci/following{/other_user}","gists_url":"https://api.github.com/users/swift-ci/gists{/gist_id}","starred_url":"https://api.github.com/users/swift-ci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swift-ci/subscriptions","organizations_url":"https://api.github.com/users/swift-ci/orgs","repos_url":"https://api.github.com/users/swift-ci/repos","events_url":"https://api.github.com/users/swift-ci/events{/privacy}","received_events_url":"https://api.github.com/users/swift-ci/received_events","type":"User","site_admin":false},"created_at":"2016-10-20T01:21:46Z","updated_at":"2016-10-20T01:21:46Z","body":"Build comment file: \n--------------\n**Optimized (O)**\n\n<details open>\n  <summary>Regression (11)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nObjectiveCBridgeToNSDictionary                          | 16132   | 71424   | +342.8%   | **0.23x** \nObjectiveCBridgeToNSSet                                 | 15609   | 44248   | +183.5%   | **0.35x** \nObjectiveCBridgeFromNSDictionaryAnyObjectForced         | 5273    | 6634    | +25.8%    | **0.79x** \nObjectiveCBridgeFromNSSetAnyObjectForced                | 4559    | 5700    | +25.0%    | **0.80x** \nStringHasPrefix                                         | 608     | 740     | +21.7%    | **0.82x** \nSetExclusiveOr                                          | 2634    | 3044    | +15.6%    | **0.87x** \nCaptureProp                                             | 4049    | 4563    | +12.7%    | **0.89x** \nStringHasSuffix                                         | 710     | 800     | +12.7%    | **0.89x** \nObjectiveCBridgeStubNSDateRefAccess                     | 308     | 338     | +9.7%     | **0.91x** \nObjectiveCBridgeFromNSDictionaryAnyObject               | 202353  | 214177  | +5.8%     | **0.94x** \nObjectiveCBridgeStubFromNSString                        | 747     | 794     | +6.3%     | **0.94x** \n\n</details>\n\n<details >\n  <summary>Improvement (13)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nTwoSum                                                  | 1566    | 1415    | -9.6%     | **1.11x** \nRGBHistogram                                            | 2820    | 2436    | -13.6%    | **1.16x** \nSetUnion                                                | 2985    | 2519    | -15.6%    | **1.18x** \nStringWithCString                                       | 198927  | 156179  | -21.5%    | **1.27x(?)** \nDictionarySwap                                          | 628     | 477     | -24.0%    | **1.32x** \nNSDictionaryCastToSwift                                 | 7021    | 5011    | -28.6%    | **1.40x** \nSetIntersect_OfObjects                                  | 2286    | 1516    | -33.7%    | **1.51x** \nDictionaryRemove                                        | 4634    | 2953    | -36.3%    | **1.57x** \nSetIsSubsetOf_OfObjects                                 | 524     | 316     | -39.7%    | **1.66x** \nHistogram                                               | 656     | 334     | -49.1%    | **1.96x** \nDictionaryLiteral                                       | 2768    | 1383    | -50.0%    | **2.00x** \nSetIsSubsetOf                                           | 510     | 252     | -50.6%    | **2.02x** \nSetIntersect                                            | 1072    | 425     | -60.4%    | **2.52x** \n\n</details>\n\n<details >\n  <summary>No Changes (112)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nDictionarySwapOfObjects                                 | 6752    | 6407    | -5.1%     | 1.05x \nStrToInt                                                | 5221    | 5040    | -3.5%     | 1.04x \nSortStringsUnicode                                      | 8067    | 7864    | -2.5%     | 1.03x \nObjectiveCBridgeStubFromNSDateRef                       | 3737    | 3652    | -2.3%     | 1.02x \nErrorHandling                                           | 2962    | 2903    | -2.0%     | 1.02x(?) \nObjectiveCBridgeStubURLAppendPathRef                    | 236682  | 231036  | -2.4%     | 1.02x(?) \nObjectiveCBridgeStubToArrayOfNSString                   | 29608   | 28968   | -2.2%     | 1.02x(?) \nSetExclusiveOr_OfObjects                                | 7918    | 7798    | -1.5%     | 1.02x(?) \nSortStrings                                             | 1755    | 1730    | -1.4%     | 1.01x(?) \nSortLettersInPlace                                      | 976     | 968     | -0.8%     | 1.01x(?) \nSuperChars                                              | 213858  | 210945  | -1.4%     | 1.01x(?) \nObjectiveCBridgeStubToNSDate                            | 13283   | 13208   | -0.6%     | 1.01x(?) \nProtocolDispatch2                                       | 159     | 157     | -1.3%     | 1.01x \nHashTest                                                | 1755    | 1732    | -1.3%     | 1.01x(?) \nObjectiveCBridgeToNSArray                               | 30136   | 29930   | -0.7%     | 1.01x(?) \nAngryPhonebook                                          | 2821    | 2799    | -0.8%     | 1.01x(?) \nObjectiveCBridgeStubURLAppendPath                       | 234032  | 232449  | -0.7%     | 1.01x(?) \nObjectiveCBridgeStubDataAppend                          | 2977    | 2957    | -0.7%     | 1.01x(?) \nArrayOfGenericRef                                       | 3601    | 3579    | -0.6%     | 1.01x(?) \nRGBHistogramOfObjects                                   | 21937   | 21743   | -0.9%     | 1.01x(?) \nChars                                                   | 630     | 623     | -1.1%     | 1.01x(?) \nObjectiveCBridgeFromNSArrayAnyObjectToStringForced      | 91660   | 90383   | -1.4%     | 1.01x(?) \nArraySubscript                                          | 1419    | 1417    | -0.1%     | 1.00x(?) \nObjectiveCBridgeToNSString                              | 1072    | 1068    | -0.4%     | 1.00x(?) \nMonteCarloPi                                            | 44932   | 44975   | +0.1%     | 1.00x(?) \nPopFrontArray                                           | 1111    | 1116    | +0.5%     | 1.00x(?) \nRecursiveOwnedParameter                                 | 1935    | 1934    | -0.1%     | 1.00x(?) \nIntegrate                                               | 238     | 238     | +0.0%     | 1.00x \nClassArrayGetter                                        | 12      | 12      | +0.0%     | 1.00x \nArray2D                                                 | 2030    | 2026    | -0.2%     | 1.00x(?) \nArrayOfGenericPOD                                       | 220     | 220     | +0.0%     | 1.00x \nObjectiveCBridgeFromNSArrayAnyObjectForced              | 6073    | 6086    | +0.2%     | 1.00x(?) \nObjectiveCBridgeFromNSStringForced                      | 2646    | 2647    | +0.0%     | 1.00x(?) \nByteSwap                                                | 0       | 0       | +0.0%     | 1.00x \nXorLoop                                                 | 380     | 380     | +0.0%     | 1.00x \nObjectiveCBridgeStubToNSString                          | 1283    | 1283    | +0.0%     | 1.00x \nObjectiveCBridgeStubFromNSStringRef                     | 128     | 128     | +0.0%     | 1.00x \nStaticArray                                             | 2748    | 2740    | -0.3%     | 1.00x(?) \nProtocolDispatch                                        | 3039    | 3038    | -0.0%     | 1.00x(?) \nObjectAllocation                                        | 153     | 153     | +0.0%     | 1.00x \nTypeFlood                                               | 0       | 0       | +0.0%     | 1.00x \nAnyHashableWithAClass                                   | 63829   | 63728   | -0.2%     | 1.00x(?) \nArrayOfRef                                              | 3528    | 3530    | +0.1%     | 1.00x(?) \nObjectiveCBridgeStubDateMutation                        | 273     | 273     | +0.0%     | 1.00x \nNSError                                                 | 325     | 326     | +0.3%     | 1.00x(?) \nObjectiveCBridgeStubToNSDateRef                         | 3238    | 3225    | -0.4%     | 1.00x(?) \nPopFrontArrayGeneric                                    | 1116    | 1116    | +0.0%     | 1.00x \nStringEqualPointerComparison                            | 7298    | 7299    | +0.0%     | 1.00x(?) \nPolymorphicCalls                                        | 22      | 22      | +0.0%     | 1.00x \nRC4                                                     | 165     | 165     | +0.0%     | 1.00x \nCalculator                                              | 33      | 33      | +0.0%     | 1.00x \nMapReduce                                               | 342     | 342     | +0.0%     | 1.00x \nOpenClose                                               | 54      | 54      | +0.0%     | 1.00x \nUTF8Decode                                              | 288     | 288     | +0.0%     | 1.00x \nNopDeinit                                               | 36654   | 36635   | -0.1%     | 1.00x(?) \nObjectiveCBridgeFromNSArrayAnyObject                    | 76106   | 76145   | +0.1%     | 1.00x(?) \nStringBuilder                                           | 1320    | 1318    | -0.1%     | 1.00x(?) \nObjectiveCBridgeStubDateAccess                          | 182     | 182     | +0.0%     | 1.00x \nSim2DArray                                              | 277     | 277     | +0.0%     | 1.00x \nArrayAppend                                             | 773     | 772     | -0.1%     | 1.00x(?) \nLinkedList                                              | 7250    | 7258    | +0.1%     | 1.00x(?) \nArrayValueProp4                                         | 6       | 6       | +0.0%     | 1.00x \nArrayOfPOD                                              | 182     | 182     | +0.0%     | 1.00x \nDeadArray                                               | 185     | 185     | +0.0%     | 1.00x \nArrayValueProp2                                         | 6       | 6       | +0.0%     | 1.00x \nBitCount                                                | 1       | 1       | +0.0%     | 1.00x \nArrayLiteral                                            | 1177    | 1182    | +0.4%     | 1.00x(?) \nArrayValueProp                                          | 6       | 6       | +0.0%     | 1.00x \nGlobalClass                                             | 0       | 0       | +0.0%     | 1.00x \nMemset                                                  | 235     | 235     | +0.0%     | 1.00x \nArrayAppendReserved                                     | 536     | 535     | -0.2%     | 1.00x(?) \nArrayValueProp3                                         | 6       | 6       | +0.0%     | 1.00x \nStackPromo                                              | 21443   | 21586   | +0.7%     | 0.99x(?) \nObjectiveCBridgeFromNSDictionaryAnyObjectToString       | 212637  | 214921  | +1.1%     | 0.99x(?) \nStringInterpolation                                     | 10749   | 10815   | +0.6%     | 0.99x(?) \nStrComplexWalk                                          | 2882    | 2914    | +1.1%     | 0.99x(?) \nDictionaryOfObjects                                     | 2284    | 2314    | +1.3%     | 0.99x(?) \nObjectiveCBridgeStubToNSStringRef                       | 116     | 117     | +0.9%     | 0.99x(?) \nObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced | 136557  | 137948  | +1.0%     | 0.99x(?) \nObjectiveCBridgeFromNSString                            | 1767    | 1786    | +1.1%     | 0.99x(?) \nPhonebook                                               | 7053    | 7093    | +0.6%     | 0.99x(?) \nMonteCarloE                                             | 10473   | 10564   | +0.9%     | 0.99x(?) \nSetUnion_OfObjects                                      | 6613    | 6655    | +0.6%     | 0.99x(?) \nStringHasSuffixUnicode                                  | 63326   | 63794   | +0.7%     | 0.99x \nWalsh                                                   | 309     | 312     | +1.0%     | 0.99x \nObjectiveCBridgeFromNSSetAnyObjectToStringForced        | 107032  | 108256  | +1.1%     | 0.99x(?) \nSevenBoom                                               | 1345    | 1361    | +1.2%     | 0.99x(?) \nStringWalk                                              | 5880    | 5912    | +0.5%     | 0.99x \nObjectiveCBridgeFromNSArrayAnyObjectToString            | 119526  | 122126  | +2.2%     | 0.98x(?) \nDictionaryBridge                                        | 3787    | 3863    | +2.0%     | 0.98x(?) \nDictionary2                                             | 2027    | 2075    | +2.4%     | 0.98x \nJoin                                                    | 458     | 466     | +1.8%     | 0.98x \nPopFrontUnsafePointer                                   | 9176    | 9319    | +1.6%     | 0.98x(?) \nIterateData                                             | 2551    | 2596    | +1.8%     | 0.98x(?) \nObjectiveCBridgeFromNSSetAnyObjectToString              | 146634  | 148940  | +1.6%     | 0.98x(?) \nArrayInClass                                            | 62      | 63      | +1.6%     | 0.98x(?) \nNSStringConversion                                      | 788     | 804     | +2.0%     | 0.98x \nDictionary2OfObjects                                    | 3378    | 3444    | +1.9%     | 0.98x(?) \nObjectiveCBridgeStubNSDataAppend                        | 2433    | 2480    | +1.9%     | 0.98x(?) \n135                                                     | 3061059 | 3162098 | +3.3%     | 0.97x \nPrims                                                   | 718     | 738     | +2.8%     | 0.97x \nDictionary3OfObjects                                    | 860     | 888     | +3.3%     | 0.97x \nRangeAssignment                                         | 275     | 284     | +3.3%     | 0.97x(?) \nHanoi                                                   | 3168    | 3272    | +3.3%     | 0.97x(?) \nDictionaryRemoveOfObjects                               | 19694   | 20355   | +3.4%     | 0.97x \nDictionary                                              | 732     | 755     | +3.1%     | 0.97x \nStringHasPrefixUnicode                                  | 13516   | 13900   | +2.8%     | 0.97x \nObjectiveCBridgeStubFromArrayOfNSString                 | 58160   | 59768   | +2.8%     | 0.97x(?) \nObjectiveCBridgeStubFromNSDate                          | 3588    | 3685    | +2.7%     | 0.97x \nDictionary3                                             | 509     | 531     | +4.3%     | 0.96x \nObjectiveCBridgeStubNSDateMutationRef                   | 11519   | 12005   | +4.2%     | 0.96x(?) \nObjectiveCBridgeFromNSSetAnyObject                      | 95684   | 100416  | +5.0%     | 0.95x(?) \n\n</details>\n**Unoptimized (Onone)**\n\n<details open>\n  <summary>Regression (13)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nObjectiveCBridgeToNSDictionary                          | 16869   | 71427   | +323.4%   | **0.24x** \nObjectiveCBridgeToNSSet                                 | 15828   | 44346   | +180.2%   | **0.36x** \nDictionaryRemove                                        | 17636   | 24218   | +37.3%    | **0.73x** \nDictionaryRemoveOfObjects                               | 46913   | 58152   | +24.0%    | **0.81x** \nObjectiveCBridgeFromNSDictionaryAnyObjectForced         | 7614    | 9164    | +20.4%    | **0.83x** \nObjectiveCBridgeFromNSSetAnyObjectForced                | 7382    | 8632    | +16.9%    | **0.86x** \nProtocolDispatch                                        | 5777    | 6648    | +15.1%    | **0.87x** \nObjectiveCBridgeStubDateMutation                        | 486     | 547     | +12.6%    | **0.89x** \nObjectiveCBridgeFromNSArrayAnyObjectToString            | 119233  | 127577  | +7.0%     | **0.93x** \nArrayOfGenericPOD                                       | 3428    | 3692    | +7.7%     | **0.93x** \nObjectiveCBridgeFromNSSetAnyObject                      | 101443  | 108544  | +7.0%     | **0.93x** \nArrayOfPOD                                              | 2327    | 2513    | +8.0%     | **0.93x** \nObjectiveCBridgeFromNSArrayAnyObjectToStringForced      | 92043   | 97662   | +6.1%     | **0.94x(?)** \n\n</details>\n\n<details >\n  <summary>Improvement (15)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nObjectiveCBridgeStubToNSDate                            | 13990   | 13234   | -5.4%     | **1.06x(?)** \nRGBHistogramOfObjects                                   | 93619   | 88048   | -6.0%     | **1.06x** \nDictionarySwapOfObjects                                 | 21136   | 19793   | -6.3%     | **1.07x** \nSetIsSubsetOf                                           | 2446    | 2288    | -6.5%     | **1.07x** \nDictionary                                              | 2147    | 1993    | -7.2%     | **1.08x(?)** \nDictionary3                                             | 1604    | 1478    | -7.9%     | **1.09x** \nMonteCarloE                                             | 119267  | 109292  | -8.4%     | **1.09x** \nSetIsSubsetOf_OfObjects                                 | 2238    | 2056    | -8.1%     | **1.09x** \nSetExclusiveOr                                          | 30488   | 26741   | -12.3%    | **1.14x** \nRGBHistogram                                            | 44176   | 37998   | -14.0%    | **1.16x** \nHistogram                                               | 11788   | 10088   | -14.4%    | **1.17x** \nTwoSum                                                  | 6544    | 5548    | -15.2%    | **1.18x** \nDictionarySwap                                          | 7569    | 6208    | -18.0%    | **1.22x** \nSetUnion                                                | 18497   | 15056   | -18.6%    | **1.23x** \nNSDictionaryCastToSwift                                 | 8350    | 6231    | -25.4%    | **1.34x** \n\n</details>\n\n<details >\n  <summary>No Changes (108)</summary>\n  \nTEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP \n---                                                     | ---     | ---     | ---       | --- \nObjectiveCBridgeFromNSArrayAnyObjectForced              | 10653   | 10184   | -4.4%     | 1.05x(?) \nDictionary3OfObjects                                    | 2256    | 2151    | -4.7%     | 1.05x \nSetIntersect_OfObjects                                  | 13945   | 13286   | -4.7%     | 1.05x \nSetIntersect                                            | 15166   | 14396   | -5.1%     | 1.05x \nStringHasPrefix                                         | 1619    | 1553    | -4.1%     | 1.04x \nDictionaryLiteral                                       | 17010   | 16395   | -3.6%     | 1.04x \nObjectiveCBridgeStubToNSDateRef                         | 3399    | 3311    | -2.6%     | 1.03x \nOpenClose                                               | 446     | 433     | -2.9%     | 1.03x(?) \nDictionary2                                             | 4460    | 4352    | -2.4%     | 1.02x(?) \nStringEqualPointerComparison                            | 9950    | 9750    | -2.0%     | 1.02x \nAngryPhonebook                                          | 3031    | 2976    | -1.8%     | 1.02x \nObjectiveCBridgeStubNSDateMutationRef                   | 14349   | 14108   | -1.7%     | 1.02x(?) \nChars                                                   | 5148    | 5042    | -2.1%     | 1.02x \nObjectiveCBridgeStubNSDataAppend                        | 2784    | 2740    | -1.6%     | 1.02x(?) \nObjectiveCBridgeToNSString                              | 1107    | 1099    | -0.7%     | 1.01x(?) \nPrims                                                   | 13568   | 13498   | -0.5%     | 1.01x(?) \nStringHasSuffixUnicode                                  | 65173   | 64212   | -1.5%     | 1.01x \nNSError                                                 | 687     | 683     | -0.6%     | 1.01x(?) \nDictionaryOfObjects                                     | 4886    | 4816    | -1.4%     | 1.01x \nPopFrontArrayGeneric                                    | 9784    | 9729    | -0.6%     | 1.01x \nCalculator                                              | 1023    | 1013    | -1.0%     | 1.01x \nObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced | 148355  | 147219  | -0.8%     | 1.01x(?) \nObjectiveCBridgeStubToArrayOfNSString                   | 29848   | 29487   | -1.2%     | 1.01x(?) \nObjectiveCBridgeStubDataAppend                          | 3330    | 3284    | -1.4%     | 1.01x(?) \nArrayOfGenericRef                                       | 10072   | 9996    | -0.8%     | 1.01x(?) \nStrToInt                                                | 5820    | 5751    | -1.2%     | 1.01x \nArraySubscript                                          | 5602    | 5593    | -0.2%     | 1.00x(?) \nMonteCarloPi                                            | 53676   | 53728   | +0.1%     | 1.00x(?) \nStackPromo                                              | 128376  | 128383  | +0.0%     | 1.00x(?) \nRecursiveOwnedParameter                                 | 10929   | 10882   | -0.4%     | 1.00x(?) \nIntegrate                                               | 365     | 365     | +0.0%     | 1.00x \nClassArrayGetter                                        | 1266    | 1267    | +0.1%     | 1.00x(?) \nArray2D                                                 | 812061  | 812892  | +0.1%     | 1.00x(?) \nObjectiveCBridgeStubFromNSDateRef                       | 4087    | 4107    | +0.5%     | 1.00x \nStringWithCString                                       | 154983  | 155015  | +0.0%     | 1.00x(?) \nObjectiveCBridgeFromNSStringForced                      | 3083    | 3081    | -0.1%     | 1.00x(?) \nSortLettersInPlace                                      | 2585    | 2573    | -0.5%     | 1.00x(?) \nPopFrontArray                                           | 23942   | 24009   | +0.3%     | 1.00x(?) \nByteSwap                                                | 9       | 9       | +0.0%     | 1.00x \nSuperChars                                              | 262926  | 262577  | -0.1%     | 1.00x(?) \nXorLoop                                                 | 19985   | 19978   | -0.0%     | 1.00x(?) \nStringInterpolation                                     | 15691   | 15679   | -0.1%     | 1.00x(?) \nObjectiveCBridgeStubToNSString                          | 1368    | 1368    | +0.0%     | 1.00x \nJoin                                                    | 1458    | 1464    | +0.4%     | 1.00x(?) \nProtocolDispatch2                                       | 443     | 441     | -0.5%     | 1.00x \nHashTest                                                | 5403    | 5422    | +0.3%     | 1.00x \nStrComplexWalk                                          | 7179    | 7186    | +0.1%     | 1.00x(?) \nErrorHandling                                           | 3824    | 3813    | -0.3%     | 1.00x(?) \nArrayOfRef                                              | 9371    | 9383    | +0.1%     | 1.00x(?) \nObjectiveCBridgeStubURLAppendPathRef                    | 239098  | 237962  | -0.5%     | 1.00x(?) \nPopFrontUnsafePointer                                   | 258693  | 258759  | +0.0%     | 1.00x(?) \nCaptureProp                                             | 115855  | 115720  | -0.1%     | 1.00x \nMapReduce                                               | 45212   | 45116   | -0.2%     | 1.00x \nIterateData                                             | 10587   | 10592   | +0.1%     | 1.00x(?) \nUTF8Decode                                              | 43484   | 43513   | +0.1%     | 1.00x(?) \nObjectiveCBridgeStubURLAppendPath                       | 236641  | 236020  | -0.3%     | 1.00x(?) \nSortStringsUnicode                                      | 9331    | 9304    | -0.3%     | 1.00x \nStringBuilder                                           | 2739    | 2743    | +0.1%     | 1.00x(?) \nArrayInClass                                            | 3953    | 3956    | +0.1%     | 1.00x(?) \nSim2DArray                                              | 14584   | 14571   | -0.1%     | 1.00x(?) \nGlobalClass                                             | 0       | 0       | +0.0%     | 1.00x \nWalsh                                                   | 13101   | 13094   | -0.1%     | 1.00x(?) \nArrayAppend                                             | 3359    | 3359    | +0.0%     | 1.00x \nDeadArray                                               | 121326  | 120767  | -0.5%     | 1.00x(?) \nArrayLiteral                                            | 1245    | 1246    | +0.1%     | 1.00x(?) \nStringWalk                                              | 21335   | 21393   | +0.3%     | 1.00x(?) \nArrayValueProp                                          | 2614    | 2627    | +0.5%     | 1.00x(?) \nRC4                                                     | 9371    | 9370    | -0.0%     | 1.00x(?) \nMemset                                                  | 20644   | 20667   | +0.1%     | 1.00x(?) \nArrayValueProp4                                         | 3008    | 3016    | +0.3%     | 1.00x(?) \nArrayValueProp2                                         | 3132    | 3135    | +0.1%     | 1.00x \nArrayValueProp3                                         | 3088    | 3076    | -0.4%     | 1.00x \nRangeAssignment                                         | 27531   | 27927   | +1.4%     | 0.99x(?) \nStaticArray                                             | 34941   | 35184   | +0.7%     | 0.99x(?) \nObjectAllocation                                        | 560     | 563     | +0.5%     | 0.99x(?) \nTypeFlood                                               | 192     | 193     | +0.5%     | 0.99x(?) \nAnyHashableWithAClass                                   | 77424   | 77869   | +0.6%     | 0.99x \nObjectiveCBridgeToNSArray                               | 30157   | 30369   | +0.7%     | 0.99x(?) \nPolymorphicCalls                                        | 1129    | 1140    | +1.0%     | 0.99x \nObjectiveCBridgeStubToNSStringRef                       | 155     | 157     | +1.3%     | 0.99x \nObjectiveCBridgeFromNSArrayAnyObject                    | 78701   | 79220   | +0.7%     | 0.99x(?) \nPhonebook                                               | 62983   | 63462   | +0.8%     | 0.99x(?) \nSetExclusiveOr_OfObjects                                | 46713   | 47346   | +1.4%     | 0.99x \nStringHasPrefixUnicode                                  | 15202   | 15420   | +1.4%     | 0.99x \nLinkedList                                              | 27705   | 28018   | +1.1%     | 0.99x \nObjectiveCBridgeFromNSSetAnyObjectToStringForced        | 120052  | 121114  | +0.9%     | 0.99x(?) \nArrayAppendReserved                                     | 3100    | 3116    | +0.5%     | 0.99x \nBitCount                                                | 102     | 103     | +1.0%     | 0.99x \nSevenBoom                                               | 1495    | 1508    | +0.9%     | 0.99x \nObjectiveCBridgeStubFromArrayOfNSString                 | 59250   | 59790   | +0.9%     | 0.99x(?) \nDictionary2OfObjects                                    | 6307    | 6341    | +0.5%     | 0.99x(?) \nObjectiveCBridgeStubFromNSStringRef                     | 159     | 162     | +1.9%     | 0.98x \nHanoi                                                   | 20360   | 20678   | +1.6%     | 0.98x \nObjectiveCBridgeFromNSSetAnyObjectToString              | 164340  | 167465  | +1.9%     | 0.98x(?) \nObjectiveCBridgeStubDateAccess                          | 1095    | 1122    | +2.5%     | 0.98x \nSetUnion_OfObjects                                      | 34431   | 35179   | +2.2%     | 0.98x \nObjectiveCBridgeFromNSString                            | 5057    | 5149    | +1.8%     | 0.98x(?) \n135                                                     | 5414508 | 5597892 | +3.4%     | 0.97x \nObjectiveCBridgeFromNSDictionaryAnyObjectToString       | 217154  | 224981  | +3.6%     | 0.97x(?) \nSortStrings                                             | 2701    | 2780    | +2.9%     | 0.97x \nDictionaryBridge                                        | 3908    | 4047    | +3.6%     | 0.97x(?) \nObjectiveCBridgeStubFromNSString                        | 810     | 836     | +3.2%     | 0.97x \nObjectiveCBridgeStubNSDateRefAccess                     | 1199    | 1231    | +2.7%     | 0.97x \nNSStringConversion                                      | 2946    | 3024    | +2.6%     | 0.97x(?) \nStringHasSuffix                                         | 1571    | 1641    | +4.5%     | 0.96x \nObjectiveCBridgeStubFromNSDate                          | 3752    | 3928    | +4.7%     | 0.96x \nObjectiveCBridgeFromNSDictionaryAnyObject               | 209223  | 220652  | +5.5%     | 0.95x(?) \nNopDeinit                                               | 59602   | 62618   | +5.1%     | 0.95x \n\n</details>\n**Hardware Overview**\n      Model Name: Mac mini\n      Model Identifier: Macmini7,1\n      Processor Name: Intel Core i5\n      Processor Speed: 2.8 GHz\n      Number of Processors: 1\n      Total Number of Cores: 2\n      L2 Cache (per Core): 256 KB\n      L3 Cache: 3 MB\n      Memory: 16 GB\n\n--------------\n"}}
{"actor":{"display_login":"swift-ci"}}