{"id":267560,"date":"2015-11-05T16:49:03","date_gmt":"2015-11-05T13:49:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=267560"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=267560","title":{"rendered":"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 V8 \u043e\u0442 Google"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/55b\/c99\/c47\/55bc99c47029458e80fe886fdec184e4.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.<\/p>\n<p>  \u041c\u0438\u0440 JS \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u044f\u0437\u044b\u043a\u0430, \u043d\u043e\u0432\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438, \u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435\u2026 \u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440-\u0444\u0438\u0447\u0438 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0435\u043c\u0443. \u0418 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e, \u0434\u043e \u0441\u0430\u043c\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<br \/>  \u0418 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u043c\u043e\u0438\u043c \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u00abnative code\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e JS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Chrome \u0438\u043b\u0438 Node.js:  <\/p>\n<pre><code class=\"javascript\">[].sort.toString(); &quot;function sort() { [native code] }&quot; <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 V8 \u0437\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e [native code] \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<a name=\"habracut\"><\/a><br \/>  \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\">v8-git-mirror<\/a> \u043d\u0430 github. \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u0434 \u0438\u0437 \u0432\u0435\u0440\u0441\u0438\u0438 4.6.9, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 V8 \u0432\u0435\u043b\u0438\u043a, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u043b \u043f\u043e\u0438\u0441\u043a\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b find:  <\/p>\n<pre><code class=\"bash\">find .\/src -iname &quot;*array*&quot; .\/src\/array-iterator.js .\/src\/array.js .\/src\/arraybuffer.js .\/src\/harmony-array-includes.js .\/src\/harmony-array.js ... <\/code><\/pre>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0443\u0434\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js\">array.js<\/a>. \u0427\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435?<br \/>  \u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e \u044d\u0442\u043e \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 js, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438 define-\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 UPPERCASE \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/macros.py\">macros.py<\/a>, \u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 \u043a\u043e\u0434\u0430 \u043d\u0430 C++, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 % \u0438\u043b\u0438 $. \u041d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0433\u0430\u0442\u044c\u0441\u044f, \u0432\u0441\u0435 \u043d\u0435 js-\u043d\u043e\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, %_CallFunction \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0442.\u0434. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u0434\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043a\u043e\u043d\u0446\u0430, \u0441 \u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L1625-L1651\">\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f<\/a> \u0432 Array.prototype:  <\/p>\n<pre><code class=\"javascript\">\/\/ Set up non-enumerable functions of the Array.prototype object and \/\/ set their names. \/\/ ... utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [   \/\/ ...   &quot;sort&quot;, getFunction(&quot;sort&quot;, ArraySort),   &quot;filter&quot;, getFunction(&quot;filter&quot;, ArrayFilter, 1),   &quot;forEach&quot;, getFunction(&quot;forEach&quot;, ArrayForEach, 1),   \/\/ ... ]); <\/code><\/pre>\n<p>  \u0410\u0433\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f ArraySort. \u041e\u043d\u0430 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L1176-L1182\">\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430<\/a> \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435:  <\/p>\n<pre><code class=\"javascript\">function ArraySort(comparefn) {   CHECK_OBJECT_COERCIBLE(this, &quot;Array.prototype.sort&quot;);    var array = $toObject(this);   var length = TO_UINT32(array.length);   return %_CallFunction(array, length, comparefn, InnerArraySort); } <\/code><\/pre>\n<p>\u0412 \u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0431\u044b\u0442\u044c this \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 (\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e <a href=\"http:\/\/www.ecma-international.org\/ecma-262\/5.1\/#sec-9.10\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439<\/a>), \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 TypeError. \u0417\u0430\u0442\u0435\u043c this \u0442\u0430\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442, \u0434\u043b\u0438\u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 uint32 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L893-L1173\">InnerArraySort<\/a>. \u0412 \u044d\u0442\u0438\u0445 281 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 V8.<\/p>\n<p>  \u041a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0\">quicksort<\/a>) \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e O(nlog n). \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 V8 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443, \u0430 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/commit\/69156911be239c20899837603c9d2b54c37e9639\">25 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f 2008 \u0433\u043e\u0434\u0430<\/a>, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0441\u043e\u0431\u043e\u0439 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0\">heapsort<\/a>), \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<br \/>  \u041d\u0435 \u0432\u0435\u0437\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 quicksort; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 SpiderMonkey (js \u0434\u0432\u0438\u0436\u043e\u043a Firefox) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043b\u0438\u044f\u043d\u0438\u0435\u043c (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC\">merge sort<\/a>) \u2014 <a href=\"http:\/\/hg.mozilla.org\/mozilla-central\/file\/d590b9601ba8\/js\/src\/jsarray.cpp#l1783\">\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438<\/a>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0448\u0430\u0433 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 (\u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e):<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7d7\/1bd\/1b7\/7d71bd1b74e1458c9c4c23c718f2e80f.png\"\/>  <\/p>\n<ol>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (pivot) \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430;<\/li>\n<li>\u0420\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a \u0432\u0438\u0434\u0443: \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u043d\u044c\u0448\u0438\u0435 pivot, pivot, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0435 pivot;<\/li>\n<li>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0435\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/li>\n<\/ol>\n<p>  \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 V8 \u043e\u0431\u0437\u0430\u0432\u0435\u043b\u0430\u0441\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0435\u0439 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u043c\u0430\u043b\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/github.com\/v8\/v8\/commit\/b4a40eb22f07ef1707d56a9dfa49c024127a5add\">\u041f\u0435\u0440\u0432\u043e\u0439 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439<\/a> \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%D0%BC%D0%B8\">Insertion sort<\/a>) \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043c\u0430\u043b\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0412\u043e\u0442 \u0435\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L909-L923\">\u043a\u043e\u0434<\/a>:  <\/p>\n<pre><code class=\"javascript\">var InsertionSort = function InsertionSort(a, from, to) {   for (var i = from + 1; i &lt; to; i++) {     var element = a[i];     for (var j = i - 1; j &gt;= from; j--) {       var tmp = a[j];       var order = %_CallFunction(UNDEFINED, tmp, element, comparefn);       if (order &gt; 0) {         a[j + 1] = tmp;       } else {         break;       }     }     a[j + 1] = element;   } }; <\/code><\/pre>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0439\u0442\u0438 \u043a \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044e, \u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u00ab\u043c\u0430\u043b\u044b\u043c\u00bb. \u041c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 7 \u043b\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u043b\u0438 \u0431\u0430\u0440\u044c\u0435\u0440 (\u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/commit\/b4a40eb22f07ef1707d56a9dfa49c024127a5add#diff-dfa1d8cd44cb64e7aff89d961845327dR705\">22 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/a>), \u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0448\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u043b\u0438\u043d\u0435 \u0432 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L943\">10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/a>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e \u043c\u0435\u0442\u043e\u0434\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0441\u044f \u0440\u044f\u0434\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<br \/>  \u041f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0441\u043b\u0443\u0447\u0430\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043b\u044f \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (<a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/69156911be239c20899837603c9d2b54c37e9639\/src\/array.js#L673\">\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a<\/a>):  <\/p>\n<pre><code class=\"javascript\">var pivot_index = $floor($random() * (to - from)) + from; <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c, \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 <a href=\"https:\/\/github.com\/v8\/v8\/commit\/9f1bcdf8ac4f6a37b5fab555550e44944623360e\">\u043c\u0435\u0434\u0438\u0430\u043d\u044b \u0438\u0437 \u0442\u0440\u0435\u0445<\/a> (\u043f\u0435\u0440\u0432\u044b\u0439, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442).<br \/>  \u041d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u0438\u0437 \u0442\u0440\u0435\u0445 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/commit\/f4f9e2c1e0795f1c829e3951bbb09dc6854a37ce\">\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f<\/a> \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 (<a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L947-L951\">\u0441\u0432\u044b\u0448\u0435 1000 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/a>). \u0418\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b (\u0441 \u0448\u0430\u0433\u043e\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0435 200) \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u0417\u0430\u0442\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438 \u0435\u0433\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u0435\u0434\u0438\u0430\u043d\u044b. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L925-L937\">GetThirdIndex<\/a>:  <\/p>\n<pre><code class=\"javascript\">var GetThirdIndex = function(a, from, to) {   var t_array = [];   \/\/ Use both 'from' and 'to' to determine the pivot candidates.   var increment = 200 + ((to - from) & 15);   for (var i = from + 1, j = 0; i &lt; to - 1; i += increment, j++) {     t_array[j] = [i, a[i]];   }   %_CallFunction(t_array, function(a, b) {     return %_CallFunction(UNDEFINED, a[1], b[1], comparefn);   }, ArraySort);   var third_index = t_array[t_array.length &gt;&gt; 1][0];   return third_index; } <\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 (\u043d\u0430 \u043b\u0435\u0432\u0443\u044e \u0438 \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430) \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0438\u0437\u043c\u0435\u0440\u0438\u043c\u0430 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0432\u044b\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0446\u0435\u043d\u043a\u0443 O(n) \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f V8 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0430\u043a \u0436\u0435 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/commit\/45c4cd26beb0b6ed627608ab0b9479836a15f5ab\">\u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0438<\/a>: \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435. \u0414\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 O(log n). \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A5%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F\">\u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438<\/a> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 JS \u0435\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 V8. \u041d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u0432 js \u0434\u0432\u0438\u0436\u043a\u0435 \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c \u0431\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0449\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043e\u0431\u0449\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440:  <\/p>\n<pre><code class=\"javascript\">var arr = [1, 2, 11]; arr.sort(); [1, 11, 2] <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L898-L907\">\u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432 \u043b\u0435\u043a\u0441\u0438\u043a\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:  <\/p>\n<pre><code class=\"javascript\">comparefn = function (x, y) {   if (x === y) return 0;   if (%_IsSmi(x) && %_IsSmi(y)) {     return %SmiLexicographicCompare(x, y);   }   x = $toString(x);   y = $toString(y);   if (x == y) return 0;   else return x &lt; y ? -1 : 1; }; <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440-\u0437\u0430\u0433\u0430\u0434\u043a\u0430:  <\/p>\n<pre><code class=\"javascript\">var arr = [2, undefined, 1]; arr.sort(function () {   return 0; }); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">[2, 1, undefined] <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8f4\/67d\/1df\/8f467d1dfe824a7093fb4f944254518d.jpg\"\/><\/div>\n<\/div>\n<p>  Wat? \u041d\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0435\u0441\u0442\u044c. \u0412\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L1081-L1136\">SafeRemoveArrayHoles<\/a>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 undefined-\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u0441\u0435 undefined \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>  \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0430\u043c\u043e\u0435 \u0432\u0435\u0441\u0435\u043b\u043e\u0435. Array.prototype.sort \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u043e\u0431\u044c\u0435\u043a\u0442\u044b, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c. \u0412 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0434\u0430\u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430. \u0412\u0441\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 length) \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b (\u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/github.com\/v8\/v8-git-mirror\/blob\/950d2051a5ff065a5bc1d31f0e5d1bba850d0b3c\/src\/array.js#L1028-L1053\">CopyFromPrototype<\/a>) \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u0432 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b:  <\/p>\n<pre><code class=\"javascript\">function Arr() {   this[1] = 1; } Arr.prototype[0] = 2; Arr.prototype.length = 2  var arr = new Arr(); Array.prototype.sort.call(arr, function (a, b) {   return a - b; }); Arr {0: 1, 1: 2} <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e [native code], \u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u044f\u0434 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432:  <\/p>\n<ul>\n<li>V8 \u043f\u0438\u0448\u0443\u0442 \u0438 \u0443\u043b\u0443\u0447\u0448\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043b\u044e\u0434\u0438, \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043a\u0430\u043a \u043c\u044b \u0441 \u0432\u0430\u043c\u0438. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 7 \u043b\u0435\u0442: \u043d\u0435 \u0432\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u0441\u0440\u0430\u0437\u0443, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u043a\u0430\u043a-\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u043f\u044f\u0442\u044c \ud83d\ude42<\/li>\n<li>\u041a\u0430\u043a \u0431\u044b \u043d\u0435 \u0443\u043b\u0443\u0447\u0448\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u044d\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043b\u0443\u0447\u0430\u0439 \u00ab\u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e\u00bb \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b. \u0412\u043e\u043e\u0431\u0449\u0435, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u0432\u0430\u0448\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c, \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82%D0%BE%D0%BC\">\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u043c<\/a>;<\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u2014 \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f. \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0445 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u044d\u0442\u043e. \u041b\u0438\u0431\u043e \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 js \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Timsort\">Timsort<\/a>. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u0443\u0436\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0442\u0430\u043a \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043c\u043d\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c. \u0423\u0434\u0430\u0447\u0438 \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432!               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/265079\/\"> http:\/\/habrahabr.ru\/post\/265079\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/55b\/c99\/c47\/55bc99c47029458e80fe886fdec184e4.png\" alt=\"image\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.<\/p>\n<p>  \u041c\u0438\u0440 JS \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u044f\u0437\u044b\u043a\u0430, \u043d\u043e\u0432\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438, \u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435\u2026 \u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440-\u0444\u0438\u0447\u0438 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0435\u043c\u0443. \u0418 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e, \u0434\u043e \u0441\u0430\u043c\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<br \/>  \u0418 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u043c\u043e\u0438\u043c \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u00abnative code\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e JS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Chrome \u0438\u043b\u0438 Node.js:  <\/p>\n<pre><code class=\"javascript\">[].sort.toString(); &quot;function sort() { [native code] }&quot; <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 V8 \u0437\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e [native code] \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-267560","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/267560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=267560"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/267560\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=267560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=267560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=267560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}