{"id":430209,"date":"2024-08-25T21:00:50","date_gmt":"2024-08-25T21:00:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=430209"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=430209","title":{"rendered":"<span>\u041a\u0430\u043a \u044f \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0442\u0440\u043e\u043a \u0432 serde_json \u043d\u0430 20%<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u0438\u0441\u0430\u043b\u0430 \u043a\u043e\u0434, \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u043f\u043e\u043d\u044f\u043b\u0430, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b \u043f\u0440\u043e \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0447\u0442\u0438\u0432\u043e\u043c. \u0423\u0447\u0438\u0442\u044c \u043a\u0430\u043a <em>\u0434\u0443\u043c\u0430\u0442\u044c<\/em> \u0442\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e, \u043a\u0430\u043a \u0438 \u0443\u0447\u0438\u0442\u044c <em>\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434<\/em>, \u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0442\u0430\u043a \u0440\u0435\u0434\u043a\u043e, \u0438 \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u044f \u0443\u0433\u0440\u043e\u0445\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b.<\/p>\n<p><code>serde<\/code> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Rust. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u043a \u043a\u0440\u0435\u0439\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435. <code>serde_json<\/code> \u2014 \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <code>serde<\/code>-\u043c\u0438\u043a\u0441\u0438\u043d \u0434\u043b\u044f JSON, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c, \u043b\u044e\u0434\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u043d\u0435\u043c\u0443. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 JSON, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/lib.rs\/crates\/simd-json\" rel=\"noopener noreferrer nofollow\">simd-json<\/a>, \u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0443 \u043d\u0438\u0445, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0430\u044f. <code>serde_json<\/code> \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0435\u0435: \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0430\u0436 \u0446\u0435\u043b\u044b\u0445 <a href=\"https:\/\/crates.io\/crates\/serde_json\/reverse_dependencies\" rel=\"noopener noreferrer nofollow\">26916<\/a> \u043a\u0440\u0435\u0439\u0442\u0430, \u0430 \u043e\u0442 <code>simd-json<\/code> \u2014 \u0432\u0441\u0435\u0433\u043e <a href=\"https:\/\/crates.io\/crates\/simd-json\/reverse_dependencies\" rel=\"noopener noreferrer nofollow\">66<\/a>.<\/p>\n<p>\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <code>serde_json<\/code> \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043c\u0438\u0448\u0435\u043d\u044c\u044e <s>(\u043d\u0435 \u043a\u0430\u043a \u0443 Jia Tan)<\/s> \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u0412\u0435\u043b\u0438\u043a \u0448\u0430\u043d\u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 <code>simd-json<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u043d\u043e, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442, \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e, \u0438 \u0442\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0434\u043b\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c&#8230;?<\/h3>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 <a href=\"https:\/\/purplesyringa.moe\/blog\/you-might-want-to-use-panics-for-error-handling\/\" rel=\"noopener noreferrer nofollow\">#[iex]<\/a>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0440\u0438\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 <code>serde<\/code> \u0438 <code>serde_json<\/code>, \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u0438\u0445 \u043a <code>#[iex]<\/code> \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0432\u0430\u0436\u043d\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0434\u0435.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 <code>#[iex]<\/code> \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u0430\u043a \u0447\u0442\u043e error-\u043f\u0443\u0442\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432. \u041a \u043c\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, error-\u043f\u0443\u0442\u044c <code>serde_json<\/code> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 success-\u043f\u0443\u0442\u0438 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td rowspan=\"2\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (MB\/s, \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/p>\n<\/td>\n<th colspan=\"2\">\n<p align=\"left\"><code>canada<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>citm_catalog<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>twitter<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Success path<\/p>\n<\/td>\n<td>\n<p align=\"left\">283<\/p>\n<\/td>\n<td>\n<p align=\"left\">416<\/p>\n<\/td>\n<td>\n<p align=\"left\">429<\/p>\n<\/td>\n<td>\n<p align=\"left\">864<\/p>\n<\/td>\n<td>\n<p align=\"left\">275<\/p>\n<\/td>\n<td>\n<p align=\"left\">541<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Error path<\/p>\n<\/td>\n<td>\n<p align=\"left\">122<\/p>\n<\/td>\n<td>\n<p align=\"left\">168<\/p>\n<\/td>\n<td>\n<p align=\"left\">135<\/p>\n<\/td>\n<td>\n<p align=\"left\">195<\/p>\n<\/td>\n<td>\n<p align=\"left\">142<\/p>\n<\/td>\n<td>\n<p align=\"left\">226<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">-57%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-60%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-69%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-77%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-48%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-58%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0434 <code>perf<\/code> \u0443\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u043e\u0435 \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0432\u0438\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"rust\">fn position_of_index(&amp;self, i: usize) -&gt; Position {     let mut position = Position { line: 1, column: 0 };     for ch in &amp;self.slice[..i] {         match *ch {             b'\\n' =&gt; {                 position.line += 1;                 position.column = 0;             }             _ =&gt; {                 position.column += 1;             }         }     }     position } <\/code><\/pre>\n<p>&#8230;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 <code>position()<\/code>, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u043a:<\/p>\n<pre><code class=\"rust\">\/\/\/ Position of the most recent call to next(). \/\/\/ \/\/\/ ... \/\/\/ \/\/\/ Only called in case of an error, so performance is not important. <\/code><\/pre>\n<p>&#8230;\u041c\u0434\u0430. \u0421\u043e\u0433\u043b\u0430\u0448\u0443\u0441\u044c, \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0431\u044b\u0441\u0442\u0440\u044b\u043c success-\u043f\u0443\u0442\u0451\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c error-\u043f\u0443\u0442\u0451\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0441\u0430\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c? <code>position_of_index()<\/code> \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432 \u043f\u0430\u0440\u0443 &#171;\u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u043b\u043e\u043d\u043a\u0430&#187;. \u0420\u0430\u0437\u043e\u0431\u044c\u0451\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u0434\u0432\u0435 \u043f\u043e\u043f\u0440\u043e\u0449\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e <code>\\n<\/code> \u0432 <code>self.slice[..i]<\/code> \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 0-\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438, \u0438<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 <code>i<\/code> \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e <code>\\n<\/code> \u0432 <code>self.slice[..i]<\/code> \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 1-\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0438\u0441\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u2014 \u0434\u0430\u0432\u043d\u043e \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0412 \u0421\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>strchr<\/code>, \u0430 \u0432 \u0440\u0430\u0441\u0442\u0435 \u2014 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/crates.io\/crates\/memchr\" rel=\"noopener noreferrer nofollow\">memchr<\/a>. \u0412\u043e\u043e\u0431\u0449\u0435, \u0432 \u044d\u0442\u043e\u043c \u043a\u0440\u0435\u0439\u0442\u0435 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 <a href=\"https:\/\/docs.rs\/memchr\/2.7.4\/src\/memchr\/memchr.rs.html#327-333\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a> <em>\u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430<\/em> \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0435.<\/p>\n<p>\u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <code>memchr<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 SIMD, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 \u043e\u0431\u0433\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0438\u043a\u043b\u043e\u043c. \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430<\/p>\n<pre><code class=\"rust\">fn position_of_index(&amp;self, i: usize) -&gt; Position {     let start_of_line = match memchr::memrchr(b'\\n', &amp;self.slice[..i]) {         Some(position) =&gt; position + 1,         None =&gt; 0,     };     Position {         line: 1 + memchr::memchr_iter(b'\\n', &amp;self.slice[..start_of_line]).count(),         column: i - start_of_line,     } } <\/code><\/pre>\n<p>&#8230;\u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td rowspan=\"2\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (MB\/s, \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/p>\n<\/td>\n<th colspan=\"2\">\n<p align=\"left\"><code>canada<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>citm_catalog<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>twitter<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Success path<\/p>\n<\/td>\n<td>\n<p align=\"left\">283<\/p>\n<\/td>\n<td>\n<p align=\"left\">416<\/p>\n<\/td>\n<td>\n<p align=\"left\">429<\/p>\n<\/td>\n<td>\n<p align=\"left\">864<\/p>\n<\/td>\n<td>\n<p align=\"left\">275<\/p>\n<\/td>\n<td>\n<p align=\"left\">541<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Error path (<code>memchr<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">216<\/p>\n<\/td>\n<td>\n<p align=\"left\">376<\/p>\n<\/td>\n<td>\n<p align=\"left\">238<\/p>\n<\/td>\n<td>\n<p align=\"left\">736<\/p>\n<\/td>\n<td>\n<p align=\"left\">210<\/p>\n<\/td>\n<td>\n<p align=\"left\">492<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">-24%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-10%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-45%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-15%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-24%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-9%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Error-\u043f\u0443\u0442\u044c \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c success-\u043f\u0443\u0442\u044c, \u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f.<\/p>\n<p>\u042f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 <a href=\"https:\/\/github.com\/serde-rs\/json\/pull\/1160\" rel=\"noopener noreferrer nofollow\">\u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u044d\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e<\/a> \u0438 \u0433\u0430\u0434\u0430\u043b\u0430, \u0432\u043e\u043b\u044c\u044e\u0442 \u0435\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412 <code>serde_json<\/code> \u0432\u0441\u0451 \u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u0442 \u043d\u0430\u043f\u043b\u0430\u043a\u0430\u043b, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u0440\u0435\u0439\u0442\u0430 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e PR \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442.<\/p>\n<p>\u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435, PR \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u043c\u0435\u0440\u0436\u0438\u043b\u0438. \u041d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h3>\u0410 \u0434\u0430\u043b\u044c\u0448\u0435?<\/h3>\n<p>dtolnay \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043c\u043d\u0435 \u043f\u043e\u0440\u044b\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043c\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. (\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.)<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u043d\u0435 \u0431\u0440\u043e\u0441\u0438\u043b\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u0446\u0438\u043a\u043b \u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"rust\">while self.index &lt; self.slice.len() &amp;&amp; !ESCAPE[self.slice[self.index] as usize] {     self.index += 1; } <\/code><\/pre>\n<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435-\u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b. \u042d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>\\<\/code> (\u043f\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c) \u0438 <code>\"<\/code> (\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438), \u043d\u043e \u0435\u0449\u0451 \u0438 \u0432\u0441\u0435 ASCII-\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441 \u043a\u043e\u0434\u043e\u043c, \u043c\u0435\u043d\u044c\u0448\u0438\u043c <code>0x20<\/code> \u2014 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f JSON <a href=\"https:\/\/www.crockford.com\/mckeeman.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442<\/a> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445: <code>\"line 1\\nline2\"<\/code> \u2014 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 JSON, \u0430 \u0437\u0430\u043c\u0435\u043d\u0430 <code>\\n<\/code> \u043d\u0430 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c.<\/p>\n<p><em>\u0415\u0441\u043b\u0438 \u0431\u044b<\/em> \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u0443\u0442 \u2014 \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/docs.rs\/memchr\/latest\/memchr\/fn.memchr2.html\" rel=\"noopener noreferrer nofollow\">memchr2<\/a> \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>memchr<\/code>, \u0438 \u0434\u0435\u043b\u043e \u0432 \u0448\u043b\u044f\u043f\u0435. \u0410 \u0442\u0443\u0442 \u043c\u0430\u043b\u0438\u043d\u0443 \u043f\u043e\u0440\u0442\u0438\u0442 \u0442\u0440\u0435\u0442\u044c\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u044f\u0436\u0451\u043b\u0443\u044e \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044e. \u041e\u0442\u043a\u0443\u0434\u0430?<\/p>\n<h2>\u0412 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0434\u0435\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b dtolnay, \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u044b\u043c \u0435\u0451 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0445\u043e\u0442\u044c \u043a \u0442\u0435\u043c\u0435 \u043f\u043e\u0441\u0442\u0430 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043f\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>memchr2<\/code> \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 <code>\\<\/code> \u0438 <code>\"<\/code> \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0451 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a: \u043a\u043e\u0434 <em>\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043b\u0441\u044f<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <em>\u0434\u0432\u0430\u0436\u0434\u044b<\/em> \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u0441\u0442\u0440\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e) \u0432\u0441\u0435\u0433\u0434\u0430 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0435 <em>\u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b<\/em>, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0414\u0430, \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 <code>ch &lt; 0x20<\/code> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (<code>ESCAPE[...]<\/code>), \u043d\u043e \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u0437\u0435\u0440\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u0435\u0440\u043a\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u043a \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 RAM.<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f dtolnay \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 <a href=\"https:\/\/nrk.neocities.org\/articles\/cpu-vs-common-sense\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0441\u0442\u0435<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0421\u0438\u0448\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>strlcpy<\/code> \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e. \u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a?<\/p>\n<p><code>strlcpy(char *dst, const char *src, size_t size)<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 <code>src<\/code> \u0432 <code>dst<\/code>, \u0441\u0440\u0435\u0437\u0430\u044f \u0435\u0451 \u043f\u043e <code>size - 1<\/code> \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0443\u043b\u044c-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440; \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u0430\u044f: \u0434\u0435\u043b\u0430\u0435\u043c <code>*dst++ = *src++<\/code> \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 <code>size - 1<\/code> \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 <code>*src<\/code> \u043d\u0435 <code>\\0<\/code>, \u0438<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u0430\u044f: \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c <code>len = strlen(src)<\/code> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>memcpy(dst, src, min(len, size - 1))<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u044b\u043b \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>strlen<\/code> \u0438 <code>memcpy<\/code> \u0431\u044b\u043b\u0438 glibc-\u0448\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u0446\u0438\u044f\u043c\u0438, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 SIMD, \u0430 \u0446\u0438\u043a\u043b \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u043b \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u043c. \u0410\u0432\u0442\u043e\u0440 \u043f\u043e\u043d\u044f\u043b \u044d\u0442\u043e \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <code>strlen<\/code> \u0438 <code>memcpy<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">size_t bespoke_strlcpy(char *dst, const char *src, size_t size) {     size_t len = 0;     for (; src[len] != '\\0'; ++len) {} \/\/ strlen()      if (size &gt; 0) {         size_t to_copy = len &lt; size ? len : size - 1;         for (size_t i = 0; i &lt; to_copy; ++i) \/\/ memcpy()             dst[i] = src[i];         dst[to_copy] = '\\0';     }     return len; } <\/code><\/pre>\n<p>GCC \u043d\u0435 \u0434\u0443\u0440\u0430\u043a \u0438 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0446\u0438\u043a\u043b\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 glibc, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u0440 \u044f\u0432\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b \u0442\u0430\u043a\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u044b \u0447\u0435\u0440\u0435\u0437  <code>-fno-builtin<\/code>. \u0418 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a, \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e &#171;\u043d\u043e&#187;. <code>-fno-builtin<\/code> \u043d\u0435 \u0440\u0435\u0436\u0435\u0442 <em>\u0432\u0441\u0435<\/em> \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 <code>memcpy<\/code> \u2014 \u0446\u0438\u043a\u043b, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 <code>memcpy<\/code>, \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d. \u0422\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b GCC \u0441 <code>bespoke_strlcpy<\/code>, \u0438 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 <code>strlen<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) + \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>memcpy<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 <code>strlcpy<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f).<\/p>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>-fno-tree-vectorize<\/code> \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <em>\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435<\/em> \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f; \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) \u0441 \u043e\u0434\u043d\u0438\u043c (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f), \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u0437-\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u00a0<\/p>\n<p>\u041c\u043e\u0440\u0430\u043b\u044c \u0441\u0435\u0439 \u0431\u0430\u0441\u043d\u0438 \u0442\u0430\u043a\u043e\u0432\u0430: \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u043c\u043e\u0449\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439. \u0418 \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u043e\u0434, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SIMD \u0432 \u043e\u0431\u043e\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445.<\/p>\n<h3>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430<\/h3>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0440\u0451\u043c <code>memchr2<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u0438<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SIMD, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u0435\u0441\u043e \u0438 \u0441\u043b\u0435\u043f\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043d\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e. \u0412 success-\u043f\u0443\u0442\u0438 \u043c\u044b <em>\u0438\u0449\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/em> <code>\\<\/code> \u0438 <code>\"<\/code>, \u043d\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043b\u0438\u0448\u044c <em>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435<\/em>. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u043c \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0446\u0438\u043a\u043b\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0440\u044b\u0436\u043e\u043a, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u044d\u0442\u043e:<\/p>\n<pre><code class=\"python\">for simd_word in to_simd_words(data):     if any(simd_word &lt; 0x20):         ... <\/code><\/pre>\n<p>&#8230;\u043d\u0430 \u044d\u0442\u043e:<\/p>\n<pre><code class=\"python\">mask = False for simd_word in to_simd_words(data):     mask |= simd_word &lt; 0x20 if any(mask):     ... <\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0439. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 (\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435) \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 <code>\\<\/code> \u0438 <code>\"<\/code>, \u0430 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043c\u044b \u0443\u043f\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u0434\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430. \u041f\u043b\u043e\u0445\u043e\u0432\u0430\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0443\u0447\u0448\u0435.<\/p>\n<h3>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u0443\u0434\u044c\u0431\u0443<\/h3>\n<p>\u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430 <em>\u043e\u0434\u0438\u043d<\/em> \u043f\u0440\u043e\u0445\u043e\u0434 \u0438\u0441\u043a\u0430\u0442\u044c <code>\\<\/code>, <code>\"<\/code> <em>\u0438<\/em> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b.<\/p>\n<p>\u042f \u0436\u0435 \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>serde_json<\/code> \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u0431\u044b\u043b \u0434\u043e \u043c\u0435\u043d\u044f. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u0440\u0435\u0433\u0440\u0430\u0434\u0430, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c, \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c SIMD-\u043a\u043e\u0434 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u2014 \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<h3>\u0422\u0440\u044e\u043a \u041c\u0430\u0439\u043a\u0440\u043e\u0444\u0442\u0430<\/h3>\n<p>\u0415\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0432 \u0445\u043e\u0434\u0443 \u0435\u0449\u0451 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u043e\u0434\u0432\u0435\u0437\u043b\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 SIMD. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 128-\u0431\u0438\u0442\u043d\u044b\u0445) \u0441\u043b\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u2014 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 SIMD Within A Register (SWAR, SIMD \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430). \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 <code>x | 0x2020202020202020<\/code>.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 64-\u0431\u0438\u0442\u043d\u043e\u043c \u0441\u043b\u043e\u0432\u0435, \u0441\u0447\u0438\u0442\u0430\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u043e\u0441\u0435\u043c\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442.<\/p>\n<p>\u0422\u0440\u044e\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a: \u0434\u043b\u044f <code>c: i8<\/code> \u0443\u0441\u043b\u043e\u0432\u0438\u0435 &#171;\u044d\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b&#187; \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a <code>c &gt;= 0 &amp;&amp; c &lt; 0x20<\/code>, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a <code>c &gt;= 0 &amp;&amp; c - 0x20 &lt; 0<\/code>. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0443 <code>c<\/code> \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442 \u2014 <code>0<\/code>, \u0430 \u0443 <code>c - 0x20<\/code> \u2014 <code>1<\/code>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a <code>!c &amp; (c - 0x20) &amp; 0x80 != 0<\/code>.<\/p>\n<p>\u0422\u0430\u043a, \u0434\u043b\u044f \u0432\u043e\u0441\u044c\u043c\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c <code>!c &amp; (c - 0x2020202020202020) &amp; 0x8080808080808080<\/code>. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <code>0<\/code>, \u0442\u043e \u043a\u043b\u0430\u0441\u0441\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0435\u0442, \u0438\u043d\u0430\u0447\u0435 \u0438\u0449\u0435\u043c \u0432 \u043c\u0430\u0441\u043a\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. <code>c - 0x20<\/code> \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0432\u044b\u0448\u0435 \u2014 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c, \u0438 \u0435\u0441\u043b\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0437\u0430\u0439\u043c\u044b \u0431\u0438\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0431\u0430\u0439\u0442\u0430\u043c\u0438. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043c\u0435\u043d\u044c\u0448\u0435 <code>0x20<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0449\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442, \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u043c\u0438 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u043d\u0430\u0441 \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u044e\u0442.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 little-endian \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445. \u041d\u0430 big-endian \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u0432 <code>c<\/code>.<\/p>\n<p>\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 <code>\\<\/code> \u0438 <code>\"<\/code>? \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043b\u044f <code>\\<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a <code>c ^ b'\\\\' &gt;= 0 &amp;&amp; c ^ b'\\\\' &lt; 1<\/code> \u2014 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u044b\u0448\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <code>0x20<\/code> \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 <code>0x01<\/code>. <a href=\"https:\/\/github.com\/serde-rs\/json\/pull\/1161#discussion_r1713040513\" rel=\"noopener noreferrer nofollow\">\u0412\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435<\/a>: \u0443 <code>b'\\\\'<\/code> \u043d\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>c ^ b'\\\\' &gt;= 0<\/code> \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0434\u043e <code>c &gt;= 0<\/code>.<\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u044e \u043a\u0443\u0447\u043a\u0443 \u0444\u043e\u0440\u043c\u0443\u043b, \u0442\u044b\u043a\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043b\u0435\u0433\u043a\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0440\u0443\u043a\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e:<\/p>\n<pre><code class=\"rust\">!c &amp; (     (c - 0x2020202020202020)     | ((c ^ (b'\\\\' * 0x0101010101010101)) - 0x0101010101010101)     | ((c ^ (b'\"' * 0x0101010101010101)) - 0x0101010101010101) ) &amp; 0x8080808080808080 <\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0441\u0447\u0438\u0442\u0430\u044f <code>a &amp; !b<\/code> \u0437\u0430 \u043e\u0434\u043d\u0443). \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043d\u0430 x86 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIMD \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430 \u0441\u0435\u043c\u044c \u2014 \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u043e\u043c\u0438\u043c\u043e \u0440\u0430\u0437\u0430 \u0432 \u0434\u0432\u0430-\u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430).<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a throughput \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 latency. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 &#171;\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439&#187; SIMD \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043b SWAR-\u0443 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/serde-rs\/json-benchmark\" rel=\"noopener noreferrer nofollow\">json-benchmark<\/a>. (\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0433\u0434\u0435-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0443.) \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u0441\u043e\u0448\u043b\u0438\u0441\u044c \u043d\u0430 \u043a\u043e\u0434\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SWAR.<\/p>\n<h3>\u041f\u0430\u043b\u043a\u0430 \u043e \u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0446\u0430\u0445<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u0430 \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIMD, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0438\u0433\u0440\u0430 \u0441\u0432\u0435\u0447 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043b\u0438 \u0434\u043b\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 0 \u0434\u043e 16 \u0431\u0435\u0437 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 &#8212; \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>strlen<\/code> \u0446\u0438\u043a\u043b\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0451 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0435\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435.<\/p>\n<p>\u0412\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e \u044f \u0438 \u043d\u0430\u043f\u043e\u0440\u043e\u043b\u0430\u0441\u044c. \u041d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SWAR \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u043a\u043e\u0434. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445, \u0447\u0442\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e\u0432\u0430\u0442\u043e \u2014 \u044d\u0442\u043e \u0446\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f. \u041f\u043e\u0445\u043e\u0436\u0430\u044f \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044f \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0441 \u0438\u0434\u0443\u0449\u0438\u043c\u0438 \u043f\u043e\u0434\u0440\u044f\u0434 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440? <code>\\r\\n<\/code> \u0438\u043b\u0438 <code>\\uD801\\uDC37<\/code>, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u042e\u043d\u0438\u043a\u043e\u0434\u043e\u043c. \u0422\u0430\u043a\u0438\u0435 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u043d\u0435\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b, \u043d\u043e, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c: \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c SWAR-\u0446\u0438\u043a\u043b, \u0435\u0441\u043b\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u2014 \u043f\u0435\u0440\u0432\u044b\u0439.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td rowspan=\"2\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (MB\/s, \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/p>\n<\/td>\n<th colspan=\"2\">\n<p align=\"left\"><code>canada<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>citm_catalog<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>twitter<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">291<\/p>\n<\/td>\n<td>\n<p align=\"left\">442<\/p>\n<\/td>\n<td>\n<p align=\"left\">377<\/p>\n<\/td>\n<td>\n<p align=\"left\">865<\/p>\n<\/td>\n<td>\n<p align=\"left\">305<\/p>\n<\/td>\n<td>\n<p align=\"left\">638<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">292<\/p>\n<\/td>\n<td>\n<p align=\"left\">442<\/p>\n<\/td>\n<td>\n<p align=\"left\">367<\/p>\n<\/td>\n<td>\n<p align=\"left\">905<\/p>\n<\/td>\n<td>\n<p align=\"left\">335<\/p>\n<\/td>\n<td>\n<p align=\"left\">785<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-3%<\/p>\n<\/td>\n<td>\n<p align=\"left\">+5%<\/p>\n<\/td>\n<td>\n<p align=\"left\">+10%<\/p>\n<\/td>\n<td>\n<p align=\"left\">+23%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>citm_catalog DOM<\/code> \u0444\u043b\u0438\u043a\u0435\u0440\u0438\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435. \u041d\u0443, \u043a\u0440\u043e\u043c\u0435 \u043e\u0434\u043d\u043e\u0439: \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u0441\u0435\u0433\u043e 2%.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 \u043b\u0435\u043a\u0441\u0438\u043d\u0433 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c<\/h2>\n<h3>\u042e\u043d\u0438\u043a\u043e\u0434<\/h3>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0430 \u043a\u0430\u043a \u0442\u0430\u043c \u0441 \u044e\u043d\u0438\u043a\u043e\u0434\u043e\u043c? <code>serde_json<\/code> \u0443\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u0432 \u043d\u0435\u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c, \u0442\u0430\u043a \u0438 \u0432 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>\"?\"<\/code> \u0438 <code>\"\\ud83e\\udd7a\"<\/code>. \u041d\u0435\u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u044e\u043d\u0438\u043a\u043e\u0434 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e, \u0430 \u0432\u043e\u0442 <code>\\u<\/code>-\u044d\u043a\u0440\u0430\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u043e\u043b\u0438 \u0438 \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442.<\/p>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b? \u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0447\u0438\u0441\u0435\u043b \u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u043c\u0438 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u0432 \u0447\u0438\u0441\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b <code>'0'..='9'<\/code>, <code>'A'..='F'<\/code>, <code>'a'..='f'<\/code> \u0432 <code>0..16<\/code>. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"rust\">match c {     b'0'..=b'9' =&gt; c - b'0',     b'A'..=b'F' =&gt; c - b'A' + 10,     b'a'..=b'f' =&gt; c - b'a' + 10,     _ =&gt; return Err(..), } <\/code><\/pre>\n<p>&#8230;\u0438\u043b\u0438 \u0431\u0435\u0437 \u043d\u0438\u0445, \u043a\u0430\u043a \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Rust.<\/p>\n<p>\u041d\u043e \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043e\u0431\u043e\u0439\u0434\u0451\u0442 LUT.<\/p>\n<pre><code class=\"rust\">static HEX: [u8; 256] = {     const __: u8 = 255; \/\/ not a hex digit     [         \/\/   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 0         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 1         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 2         00, 01, 02, 03, 04, 05, 06, 07, 08, 09, __, __, __, __, __, __, \/\/ 3         __, 10, 11, 12, 13, 14, 15, __, __, __, __, __, __, __, __, __, \/\/ 4         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 5         __, 10, 11, 12, 13, 14, 15, __, __, __, __, __, __, __, __, __, \/\/ 6         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 7         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 8         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ 9         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ A         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ B         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ C         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ D         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ E         __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, \/\/ F     ] };  fn decode_hex_val(val: u8) -&gt; Option&lt;u16&gt; {     let n = HEX[val as usize] as u16;     if n == 255 {         None     } else {         Some(n)     } } <\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 <code>serde_json<\/code> \u0440\u0430\u043d\u044c\u0448\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e (\u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c <code>std<\/code>: \u043a\u043e\u0434 \u0432 <code>std<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0430 <code>serde_json<\/code> \u043d\u0435\u0442). \u042d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">let mut n = 0; for _ in 0..4 {     n = (n &lt;&lt; 4) + decode_hex_val(self.slice[self.index])?;     self.index += 1; } <\/code><\/pre>\n<p>\u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 3 <code>shl<\/code>, 3 <code>add<\/code>, \u0449\u0435\u043f\u043e\u0442\u043a\u0430 <code>mov<\/code> \u0438 <code>cmp<\/code> \u0441 255 \u0438 \u0437\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u044b\u0436\u043a\u0430\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0443\u0431\u0438\u0440\u0430\u043d\u0438\u044f <code>?<\/code> \u0438\u0437 \u0446\u0438\u043a\u043b\u0430. \u042d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c <code>HEX<\/code> \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 <code>[u8; 256]<\/code>, \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a <code>[u32; 256]<\/code>, \u0437\u0430\u043c\u0435\u043d\u044f\u044f <code>__<\/code> \u043d\u0430 <code>u32::MAX<\/code>. \u041d\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0435 \u043d\u0435\u0442\u0443 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442\u043e\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 <em>\u043f\u043e\u0441\u043b\u0435<\/em> \u0446\u0438\u043a\u043b\u0430:<\/p>\n<pre><code class=\"rust\">let mut n = 0; for _ in 0..4 {     n = (n &lt;&lt; 4) + HEX[self.slice[self.index] as usize];     self.index += 1; } ensure!(n &gt;= 65536, \"Invalid Unicode escape\"); let n = n as u16; <\/code><\/pre>\n<h3>\u0412\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043a\u0443\u043c<\/h3>\n<p>\u0421\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043a\u0435\u0448\u0435 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 <code>u32<\/code> \u043d\u0430 <code>u16<\/code> \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a <code>u16::MAX = 0xFFFF<\/code> \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0446\u0438\u0444\u0440\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 <code>0xFxxx<\/code>, \u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0432\u0441\u0451 \u0436\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e. <a href=\"https:\/\/github.com\/yuki0iq\" rel=\"noopener noreferrer nofollow\">\u042e\u043b\u044f<\/a> (\u043c\u043e\u044f \u0434\u0435\u0432\u0443\u0448\u043a\u0430, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u0446\u0430) \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0430 \u0444\u043e\u043a\u0443\u0441. \u0417\u0430\u043c\u0435\u043d\u0438\u043c <code>__<\/code> \u043d\u0430 <code>u16::MAX<\/code>, <code>n &lt;&lt; 4<\/code> \u043d\u0430 <code>n.rotate_left(4)<\/code>, \u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418\u041b\u0418:<\/p>\n<pre><code class=\"rust\">let mut n = 0; for _ in 0..4 {     n = n.rotate_left(4) | HEX[self.slice[self.index] as usize];     self.index += 1; } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0446\u0438\u0444\u0440\u044b \u0431\u044b\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0438 <code>n<\/code> \u2014 \u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434\u043f\u043e\u0438\u043d\u0442. <code>rol<\/code> \u043d\u0430 x86 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u043a\u0430\u043a \u0438 <code>shl<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043b\u043e\u0445\u0438\u043c, \u043e\u043d &#171;\u043e\u0442\u0440\u0430\u0432\u0438\u0442&#187; <code>n<\/code> \u0438 <em>\u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <\/em><code><em>0xFFFF<\/em><\/code>. <code>U+FFFF<\/code> \u2014 \u043a\u043e\u0434\u043f\u043e\u0438\u043d\u0442, \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u043d\u0438 \u0437\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0434\u043e\u043a, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043f\u043e\u0441\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>n == 0xFFFF<\/code> \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e?<\/p>\n<h3>clueless.jpg<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u044f \u043f\u0438\u0441\u0430\u043b\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442, \u044f <a href=\"https:\/\/github.com\/serde-rs\/json\/pull\/1178\" rel=\"noopener noreferrer nofollow\">\u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0430<\/a>, \u0447\u0442\u043e \u044d\u0442\u043e \u0445\u0440\u0435\u0441\u0442\u043e\u043c\u0430\u0442\u0438\u0439\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0432\u0435\u0440\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430. <code>0xFFFF<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>0xFxxx<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c 16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u043e \u043a\u0430\u043c\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u043a \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043a \u043a\u043e\u043d\u0446\u0443, \u043d\u044b\u043d\u0447\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430. \u0411\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c <code>HEX<\/code> \u043a\u0430\u043a <code>[i8; 256]<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>-1<\/code> \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b. \u0422\u043e\u0433\u0434\u0430<\/p>\n<pre><code class=\"rust\">let mut n = 0; for _ in 0..4 {     n = (n &lt;&lt; 4) | HEX[self.slice[self.index] as usize] as i32;     self.index += 1; } <\/code><\/pre>\n<p>&#8230;\u0432\u0435\u0440\u043d\u0451\u0442 \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430, \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u2014 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e <code>as i32<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043d\u043e \u043d\u0430 x86 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>movsx<\/code> \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<p>\u0412 \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u044b\u0436\u043a\u0430 \u043f\u043e \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u043c\u0443 \u0431\u0438\u0442\u0443. \u0412\u043c\u0435\u0441\u0442\u043e <code>cmp r, imm; je label<\/code> \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c <code>js label<\/code>. \u041d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043b\u0438\u044f\u0435\u0442, \u043d\u043e, \u0431\u043b\u0438\u043d, \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0436\u0435!<\/p>\n<h3>\u0421\u0434\u0432\u0438\u0433\u0438<\/h3>\n<p>\u0421\u0434\u0432\u0438\u0433\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 latency. \u041f\u043b\u043e\u0445\u043e. \u0425\u043e\u0447\u0443 \u0431\u0435\u0437.<\/p>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043b\u0435\u0433\u043a\u043e. \u0425\u0440\u0430\u043d\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0432\u0435: <code>HEX0<\/code> \u2014 <code>HEX<\/code>, \u043d\u043e \u0432 \u0432\u0438\u0434\u0435 <code>[i16; 256]<\/code>, \u0438 <code>HEX1<\/code> \u2014 <code>HEX0<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c\u0438 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 <code>4<\/code> \u0431\u0438\u0442\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u0446\u0438\u043a\u043b \u043c\u043e\u0436\u043d\u043e \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<pre><code class=\"rust\">fn decode_four_hex_digits(a: u8, b: u8, c: u8, d: u8) -&gt; Option&lt;u16&gt; {     let a = HEX1[a as usize] as i32;     let b = HEX0[b as usize] as i32;     let c = HEX1[c as usize] as i32;     let d = HEX0[d as usize] as i32;      let codepoint = ((a | b) &lt;&lt; 8) | c | d;      \/\/ A single sign bit check.     if codepoint &gt;= 0 {         Some(codepoint as u16)     } else {         None     } } <\/code><\/pre>\n<p>\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 &#171;\u0412\u043e\u0439\u043d\u044b \u0438 \u043c\u0438\u0440\u0430&#187; \u0422\u043e\u043b\u0441\u0442\u043e\u0433\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0432 \u0432\u0438\u0434\u0435 JSON \u0441 284 MB\/s \u0434\u043e 344 MB\/s \u2014 \u043d\u0430 \u0446\u0435\u043b\u044b\u0445 21%.<\/p>\n<h2>\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u043d\u0433<\/h2>\n<h3>\u041f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u044e\u043d\u0438\u043a\u043e\u0434-\u0441\u0442\u0440\u043e\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 UTF-8.<\/p>\n<p>\u0412\u0435\u0441\u0435\u043b\u043e, UTF-8 \u0436\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0434\u043e \u0431\u043e\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e UTF-8 \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>1 \u0431\u0430\u0439\u0442: <code>0xxxxxxx<\/code><\/p>\n<\/li>\n<li>\n<p>2 \u0431\u0430\u0439\u0442\u0430: <code>110xxxxx 10xxxxxx<\/code><\/p>\n<\/li>\n<li>\n<p>3 \u0431\u0430\u0439\u0442\u0430: <code>1110xxxx 10xxxxxx 10xxxxxx<\/code><\/p>\n<\/li>\n<li>\n<p>4 \u0431\u0430\u0439\u0442\u0430: <code>11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<\/code><\/p>\n<\/li>\n<\/ul>\n<p><code>x<\/code>\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0431\u0438\u0442\u044b \u043a\u043e\u0434\u043f\u043e\u0438\u043d\u0442\u0430; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c. \u0412\u0441\u0435 \u043a\u043e\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0432 21 \u0431\u0438\u0442.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Rust \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043d\u043a\u043e\u0434\u0438\u043d\u0433 char \u0432 UTF-8 \u0447\u0435\u0440\u0435\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>char::encode_utf8<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a\u043b\u0430\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440. \u0415\u0441\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438 \u043b\u043e\u0436\u043a\u0430 \u0434\u0451\u0433\u0442\u044f. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">fn encode_utf8(self, dst: &amp;mut [u8]) -&gt; &amp;mut str; <\/code><\/pre>\n<p>&#8230;\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c <em>\u0443\u0436\u0435<\/em> \u043b\u0435\u0436\u0430\u0442 <em>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435<\/em> <code>u8<\/code>. \u041d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c \u0438 \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u0442\u044c <em>\u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> \u0431\u0443\u0444\u0435\u0440, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0435\u043c-\u0442\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u041f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u043d\u044b\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u0438\u0435. \u042d\u0442\u043e <em>\u043c\u043e\u0433\u043b\u043e<\/em> \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e UTF-8 \u2014 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0441 <em>\u043d\u0435\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439<\/em> \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0439\u0442, \u0447\u0435\u043c <code>encode_utf8<\/code> \u0445\u043e\u0447\u0435\u0442, \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u043d\u0443\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0430\u0439\u0442, \u043d\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f LLVM \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0439, \u0438 \u043e\u043d \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442.<\/p>\n<p>\u00a0<\/p>\n<p>\u0412 <code>serde_json<\/code> \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u043b\u0438\u0441\u044c:<\/p>\n<pre><code class=\"rust\">scratch.extend_from_slice(c.encode_utf8(&amp;mut [0u8; 4]).as_bytes()); <\/code><\/pre>\n<p><code>[0u8; 4]<\/code> \u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u0430\u043d\u0443\u043b\u044f\u0442\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u2014 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e aliasing analysis \u0441\u0438\u043b\u044c\u043d\u044b\u0439. \u041d\u0443, \u0432 \u0442\u0435\u043e\u0440\u0438\u0438.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0451 \u0445\u0443\u0436\u0435. <code>Vec::extend_from_slice<\/code> \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0431\u0430\u0439\u0442 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0430 \u043a\u0443\u0447\u0443. LLVM \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0442\u0443\u0442, \u0432\u044b\u0437\u044b\u0432\u0430\u044f <code>memcpy<\/code> \u0438\u0437 libc. \u0417\u0430\u0448\u0438\u0431\u0438\u0441\u044c!<\/p>\n<p>\u00a0<\/p>\n<p>\u041b\u0443\u0447\u0448\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c <code>memset<\/code> \u0438 <code>memcpy<\/code> \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0440\u0443\u0447\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f UTF-8. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c, \u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e <code>unsafe<\/code>. \u041d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043c\u0438\u0440\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u043c\u0435\u043b\u043a\u0438\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 &#171;\u0412\u043e\u0439\u043d\u0435 \u0438 \u043c\u0438\u0440\u0435&#187; \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0451 \u043d\u0430 9% \u0434\u043e 374 MB\/s.<\/p>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<h3>?<\/h3>\n<p>\u041c\u043e\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 <code>serde_json<\/code> \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445, \u043d\u0430\u043f\u0438\u0447\u043a\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u043d\u0430 10%, 23% \u0438 32%. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 JSON-\u044b \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0435\u0441\u0451\u0442 \u043f\u043e\u043b\u044c\u0437\u0443 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/838404\/\"> https:\/\/habr.com\/ru\/articles\/838404\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u0438\u0441\u0430\u043b\u0430 \u043a\u043e\u0434, \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u043f\u043e\u043d\u044f\u043b\u0430, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b \u043f\u0440\u043e \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0447\u0442\u0438\u0432\u043e\u043c. \u0423\u0447\u0438\u0442\u044c \u043a\u0430\u043a <em>\u0434\u0443\u043c\u0430\u0442\u044c<\/em> \u0442\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e, \u043a\u0430\u043a \u0438 \u0443\u0447\u0438\u0442\u044c <em>\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434<\/em>, \u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0442\u0430\u043a \u0440\u0435\u0434\u043a\u043e, \u0438 \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u044f \u0443\u0433\u0440\u043e\u0445\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b.<\/p>\n<p><code>serde<\/code> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Rust. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u043a \u043a\u0440\u0435\u0439\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435. <code>serde_json<\/code> \u2014 \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <code>serde<\/code>-\u043c\u0438\u043a\u0441\u0438\u043d \u0434\u043b\u044f JSON, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c, \u043b\u044e\u0434\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u043d\u0435\u043c\u0443. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 JSON, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/lib.rs\/crates\/simd-json\" rel=\"noopener noreferrer nofollow\">simd-json<\/a>, \u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0443 \u043d\u0438\u0445, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0430\u044f. <code>serde_json<\/code> \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0435\u0435: \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0430\u0436 \u0446\u0435\u043b\u044b\u0445 <a href=\"https:\/\/crates.io\/crates\/serde_json\/reverse_dependencies\" rel=\"noopener noreferrer nofollow\">26916<\/a> \u043a\u0440\u0435\u0439\u0442\u0430, \u0430 \u043e\u0442 <code>simd-json<\/code> \u2014 \u0432\u0441\u0435\u0433\u043e <a href=\"https:\/\/crates.io\/crates\/simd-json\/reverse_dependencies\" rel=\"noopener noreferrer nofollow\">66<\/a>.<\/p>\n<p>\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <code>serde_json<\/code> \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043c\u0438\u0448\u0435\u043d\u044c\u044e <s>(\u043d\u0435 \u043a\u0430\u043a \u0443 Jia Tan)<\/s> \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u0412\u0435\u043b\u0438\u043a \u0448\u0430\u043d\u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 <code>simd-json<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u043d\u043e, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442, \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e, \u0438 \u0442\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0434\u043b\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c&#8230;?<\/h3>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 <a href=\"https:\/\/purplesyringa.moe\/blog\/you-might-want-to-use-panics-for-error-handling\/\" rel=\"noopener noreferrer nofollow\">#[iex]<\/a>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0440\u0438\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 <code>serde<\/code> \u0438 <code>serde_json<\/code>, \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u0438\u0445 \u043a <code>#[iex]<\/code> \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0432\u0430\u0436\u043d\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0434\u0435.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 <code>#[iex]<\/code> \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u0430\u043a \u0447\u0442\u043e error-\u043f\u0443\u0442\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432. \u041a \u043c\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, error-\u043f\u0443\u0442\u044c <code>serde_json<\/code> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 success-\u043f\u0443\u0442\u0438 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td rowspan=\"2\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (MB\/s, \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/p>\n<\/td>\n<th colspan=\"2\">\n<p align=\"left\"><code>canada<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>citm_catalog<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>twitter<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Success path<\/p>\n<\/td>\n<td>\n<p align=\"left\">283<\/p>\n<\/td>\n<td>\n<p align=\"left\">416<\/p>\n<\/td>\n<td>\n<p align=\"left\">429<\/p>\n<\/td>\n<td>\n<p align=\"left\">864<\/p>\n<\/td>\n<td>\n<p align=\"left\">275<\/p>\n<\/td>\n<td>\n<p align=\"left\">541<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Error path<\/p>\n<\/td>\n<td>\n<p align=\"left\">122<\/p>\n<\/td>\n<td>\n<p align=\"left\">168<\/p>\n<\/td>\n<td>\n<p align=\"left\">135<\/p>\n<\/td>\n<td>\n<p align=\"left\">195<\/p>\n<\/td>\n<td>\n<p align=\"left\">142<\/p>\n<\/td>\n<td>\n<p align=\"left\">226<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">-57%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-60%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-69%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-77%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-48%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-58%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0434 <code>perf<\/code> \u0443\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u043e\u0435 \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0432\u0438\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"rust\">fn position_of_index(&amp;self, i: usize) -&gt; Position {     let mut position = Position { line: 1, column: 0 };     for ch in &amp;self.slice[..i] {         match *ch {             b'\\n' =&gt; {                 position.line += 1;                 position.column = 0;             }             _ =&gt; {                 position.column += 1;             }         }     }     position } <\/code><\/pre>\n<p>&#8230;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 <code>position()<\/code>, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u043a:<\/p>\n<pre><code class=\"rust\">\/\/\/ Position of the most recent call to next(). \/\/\/ \/\/\/ ... \/\/\/ \/\/\/ Only called in case of an error, so performance is not important. <\/code><\/pre>\n<p>&#8230;\u041c\u0434\u0430. \u0421\u043e\u0433\u043b\u0430\u0448\u0443\u0441\u044c, \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0431\u044b\u0441\u0442\u0440\u044b\u043c success-\u043f\u0443\u0442\u0451\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c error-\u043f\u0443\u0442\u0451\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0441\u0430\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c? <code>position_of_index()<\/code> \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432 \u043f\u0430\u0440\u0443 &#171;\u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u043b\u043e\u043d\u043a\u0430&#187;. \u0420\u0430\u0437\u043e\u0431\u044c\u0451\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u0434\u0432\u0435 \u043f\u043e\u043f\u0440\u043e\u0449\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e <code>\\n<\/code> \u0432 <code>self.slice[..i]<\/code> \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 0-\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438, \u0438<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 <code>i<\/code> \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e <code>\\n<\/code> \u0432 <code>self.slice[..i]<\/code> \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 1-\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0438\u0441\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u2014 \u0434\u0430\u0432\u043d\u043e \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0412 \u0421\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>strchr<\/code>, \u0430 \u0432 \u0440\u0430\u0441\u0442\u0435 \u2014 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/crates.io\/crates\/memchr\" rel=\"noopener noreferrer nofollow\">memchr<\/a>. \u0412\u043e\u043e\u0431\u0449\u0435, \u0432 \u044d\u0442\u043e\u043c \u043a\u0440\u0435\u0439\u0442\u0435 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 <a href=\"https:\/\/docs.rs\/memchr\/2.7.4\/src\/memchr\/memchr.rs.html#327-333\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a> <em>\u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430<\/em> \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0435.<\/p>\n<p>\u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <code>memchr<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 SIMD, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 \u043e\u0431\u0433\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0438\u043a\u043b\u043e\u043c. \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430<\/p>\n<pre><code class=\"rust\">fn position_of_index(&amp;self, i: usize) -&gt; Position {     let start_of_line = match memchr::memrchr(b'\\n', &amp;self.slice[..i]) {         Some(position) =&gt; position + 1,         None =&gt; 0,     };     Position {         line: 1 + memchr::memchr_iter(b'\\n', &amp;self.slice[..start_of_line]).count(),         column: i - start_of_line,     } } <\/code><\/pre>\n<p>&#8230;\u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td rowspan=\"2\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (MB\/s, \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/p>\n<\/td>\n<th colspan=\"2\">\n<p align=\"left\"><code>canada<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>citm_catalog<\/code><\/p>\n<\/th>\n<th colspan=\"2\">\n<p align=\"left\"><code>twitter<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<th>\n<p align=\"left\">DOM<\/p>\n<\/th>\n<th>\n<p align=\"left\">struct<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Success path<\/p>\n<\/td>\n<td>\n<p align=\"left\">283<\/p>\n<\/td>\n<td>\n<p align=\"left\">416<\/p>\n<\/td>\n<td>\n<p align=\"left\">429<\/p>\n<\/td>\n<td>\n<p align=\"left\">864<\/p>\n<\/td>\n<td>\n<p align=\"left\">275<\/p>\n<\/td>\n<td>\n<p align=\"left\">541<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Error path (<code>memchr<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">216<\/p>\n<\/td>\n<td>\n<p align=\"left\">376<\/p>\n<\/td>\n<td>\n<p align=\"left\">238<\/p>\n<\/td>\n<td>\n<p align=\"left\">736<\/p>\n<\/td>\n<td>\n<p align=\"left\">210<\/p>\n<\/td>\n<td>\n<p align=\"left\">492<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">-24%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-10%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-45%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-15%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-24%<\/p>\n<\/td>\n<td>\n<p align=\"left\">-9%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Error-\u043f\u0443\u0442\u044c \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c success-\u043f\u0443\u0442\u044c, \u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f.<\/p>\n<p>\u042f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 <a href=\"https:\/\/github.com\/serde-rs\/json\/pull\/1160\" rel=\"noopener noreferrer nofollow\">\u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u044d\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e<\/a> \u0438 \u0433\u0430\u0434\u0430\u043b\u0430, \u0432\u043e\u043b\u044c\u044e\u0442 \u0435\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412 <code>serde_json<\/code> \u0432\u0441\u0451 \u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u0442 \u043d\u0430\u043f\u043b\u0430\u043a\u0430\u043b, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u0440\u0435\u0439\u0442\u0430 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e PR \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442.<\/p>\n<p>\u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435, PR \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u043c\u0435\u0440\u0436\u0438\u043b\u0438. \u041d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h3>\u0410 \u0434\u0430\u043b\u044c\u0448\u0435?<\/h3>\n<p>dtolnay \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043c\u043d\u0435 \u043f\u043e\u0440\u044b\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043c\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. (\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.)<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u043d\u0435 \u0431\u0440\u043e\u0441\u0438\u043b\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u0446\u0438\u043a\u043b \u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"rust\">while self.index &lt; self.slice.len() &amp;&amp; !ESCAPE[self.slice[self.index] as usize] {     self.index += 1; } <\/code><\/pre>\n<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435-\u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b. \u042d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>\\<\/code> (\u043f\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c) \u0438 <code>\"<\/code> (\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438), \u043d\u043e \u0435\u0449\u0451 \u0438 \u0432\u0441\u0435 ASCII-\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441 \u043a\u043e\u0434\u043e\u043c, \u043c\u0435\u043d\u044c\u0448\u0438\u043c <code>0x20<\/code> \u2014 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f JSON <a href=\"https:\/\/www.crockford.com\/mckeeman.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442<\/a> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445: <code>\"line 1\\nline2\"<\/code> \u2014 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 JSON, \u0430 \u0437\u0430\u043c\u0435\u043d\u0430 <code>\\n<\/code> \u043d\u0430 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c.<\/p>\n<p><em>\u0415\u0441\u043b\u0438 \u0431\u044b<\/em> \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u0443\u0442 \u2014 \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/docs.rs\/memchr\/latest\/memchr\/fn.memchr2.html\" rel=\"noopener noreferrer nofollow\">memchr2<\/a> \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 <code>memchr<\/code>, \u0438 \u0434\u0435\u043b\u043e \u0432 \u0448\u043b\u044f\u043f\u0435. \u0410 \u0442\u0443\u0442 \u043c\u0430\u043b\u0438\u043d\u0443 \u043f\u043e\u0440\u0442\u0438\u0442 \u0442\u0440\u0435\u0442\u044c\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u044f\u0436\u0451\u043b\u0443\u044e \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044e. \u041e\u0442\u043a\u0443\u0434\u0430?<\/p>\n<h2>\u0412 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0434\u0435\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b dtolnay, \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u044b\u043c \u0435\u0451 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0445\u043e\u0442\u044c \u043a \u0442\u0435\u043c\u0435 \u043f\u043e\u0441\u0442\u0430 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043f\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>memchr2<\/code> \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 <code>\\<\/code> \u0438 <code>\"<\/code> \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0451 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a: \u043a\u043e\u0434 <em>\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043b\u0441\u044f<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <em>\u0434\u0432\u0430\u0436\u0434\u044b<\/em> \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u0441\u0442\u0440\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e) \u0432\u0441\u0435\u0433\u0434\u0430 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0435 <em>\u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b<\/em>, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0414\u0430, \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 <code>ch &lt; 0x20<\/code> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (<code>ESCAPE[...]<\/code>), \u043d\u043e \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u0437\u0435\u0440\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u0435\u0440\u043a\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u043a \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 RAM.<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f dtolnay \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 <a href=\"https:\/\/nrk.neocities.org\/articles\/cpu-vs-common-sense\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0441\u0442\u0435<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0421\u0438\u0448\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>strlcpy<\/code> \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e. \u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a?<\/p>\n<p><code>strlcpy(char *dst, const char *src, size_t size)<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 <code>src<\/code> \u0432 <code>dst<\/code>, \u0441\u0440\u0435\u0437\u0430\u044f \u0435\u0451 \u043f\u043e <code>size - 1<\/code> \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0443\u043b\u044c-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440; \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u0430\u044f: \u0434\u0435\u043b\u0430\u0435\u043c <code>*dst++ = *src++<\/code> \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 <code>size - 1<\/code> \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 <code>*src<\/code> \u043d\u0435 <code>\\0<\/code>, \u0438<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u0430\u044f: \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c <code>len = strlen(src)<\/code> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>memcpy(dst, src, min(len, size - 1))<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u044b\u043b \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>strlen<\/code> \u0438 <code>memcpy<\/code> \u0431\u044b\u043b\u0438 glibc-\u0448\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u0446\u0438\u044f\u043c\u0438, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 SIMD, \u0430 \u0446\u0438\u043a\u043b \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u043b \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u043c. \u0410\u0432\u0442\u043e\u0440 \u043f\u043e\u043d\u044f\u043b \u044d\u0442\u043e \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <code>strlen<\/code> \u0438 <code>memcpy<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">size_t bespoke_strlcpy(char *dst, const char *src, size_t size) {     size_t len = 0;     for (; src[len] != '\\0'; ++len) {} \/\/ strlen()      if (size &gt; 0) {         size_t to_copy = len &lt; size ? len : size - 1;         for (size_t i = 0; i &lt; to_copy; ++i) \/\/ memcpy()             dst[i] = src[i];         dst[to_copy] = '\\0';     }     return len; } <\/code><\/pre>\n<p>GCC \u043d\u0435 \u0434\u0443\u0440\u0430\u043a \u0438 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0446\u0438\u043a\u043b\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 glibc, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u0440 \u044f\u0432\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b \u0442\u0430\u043a\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u044b \u0447\u0435\u0440\u0435\u0437  <code>-fno-builtin<\/code>. \u0418 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a, \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e &#171;\u043d\u043e&#187;. <code>-fno-builtin<\/code> \u043d\u0435 \u0440\u0435\u0436\u0435\u0442 <em>\u0432\u0441\u0435<\/em> \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 <code>memcpy<\/code> \u2014 \u0446\u0438\u043a\u043b, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 <code>memcpy<\/code>, \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d. \u0422\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b GCC \u0441 <code>bespoke_strlcpy<\/code>, \u0438 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 <code>strlen<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) + \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>memcpy<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 <code>strlcpy<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f).<\/p>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>-fno-tree-vectorize<\/code> \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <em>\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435<\/em> \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f; \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f) \u0441 \u043e\u0434\u043d\u0438\u043c (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>\\0<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f), \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u0437-\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u00a0<\/p>\n<p>\u041c\u043e\u0440\u0430\u043b\u044c \u0441\u0435\u0439 \u0431\u0430\u0441\u043d\u0438 \u0442\u0430\u043a\u043e\u0432\u0430: \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u043c\u043e\u0449\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439. \u0418 \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u043e\u0434, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SIMD \u0432 \u043e\u0431\u043e\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445.<\/p>\n<h3>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430<\/h3>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0440\u0451\u043c <code>memchr2<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 <code>\\<\/code> \u0438\u043b\u0438 <code>\"<\/code>, \u0438<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SIMD, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u0435\u0441\u043e \u0438 \u0441\u043b\u0435\u043f\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043d\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e. \u0412 success-\u043f\u0443\u0442\u0438 \u043c\u044b <em>\u0438\u0449\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/em> <code>\\<\/code> \u0438 <code>\"<\/code>, \u043d\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043b\u0438\u0448\u044c <em>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435<\/em>. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u043c \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0446\u0438\u043a\u043b\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0440\u044b\u0436\u043e\u043a, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u044d\u0442\u043e:<\/p>\n<pre><code class=\"python\">for simd_word in to_simd_words(data):     if any(simd_word &lt; 0x20):         ... <\/code><\/pre>\n<p>&#8230;\u043d\u0430 \u044d\u0442\u043e:<\/p>\n<pre><code class=\"python\">mask = False for simd_word in to_simd_words(data):     mask |= simd_word &lt; 0x20 if any(mask):     ... <\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0439. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 (\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435) \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 <code>\\<\/code> \u0438 <code>\"<\/code>, \u0430 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043c\u044b \u0443\u043f\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u0434\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430. \u041f\u043b\u043e\u0445\u043e\u0432\u0430\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0443\u0447\u0448\u0435.<\/p>\n<h3>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u0443\u0434\u044c\u0431\u0443<\/h3>\n<p>\u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430 <em>\u043e\u0434\u0438\u043d<\/em> \u043f\u0440\u043e\u0445\u043e\u0434 \u0438\u0441\u043a\u0430\u0442\u044c <code>\\<\/code>, <code>\"<\/code> <em>\u0438<\/em> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b.<\/p>\n<p>\u042f \u0436\u0435 \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>serde_json<\/code> \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u0431\u044b\u043b \u0434\u043e \u043c\u0435\u043d\u044f. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u0440\u0435\u0433\u0440\u0430\u0434\u0430, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c, \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c SIMD-\u043a\u043e\u0434 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u2014 \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<h3>\u0422\u0440\u044e\u043a \u041c\u0430\u0439\u043a\u0440\u043e\u0444\u0442\u0430<\/h3>\n<p>\u0415\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c,<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-430209","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430209","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=430209"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430209\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=430209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=430209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=430209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}