{"id":476819,"date":"2026-04-21T11:37:25","date_gmt":"2026-04-21T11:37:25","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=476819"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=476819","title":{"rendered":"\u0420\u0435\u0432\u044c\u044e \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430 \u0441 \u0433\u043d\u0438\u043b\u044c\u0446\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0421++ \u043a\u043e\u0434\u043e\u043c"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/39\/ec\/ad\/39ecad72511f5bb6cea35690d944f29c.png\" alt=\"\u041e\u0431\u0437\u043e\u0440 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/39\/ec\/ad\/39ecad72511f5bb6cea35690d944f29c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/39\/ec\/ad\/39ecad72511f5bb6cea35690d944f29c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0431\u0437\u043e\u0440 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0443\u043c\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u043d\u043e \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0433\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 markus, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Claude Opus, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0443\u043c\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 markus<\/h3>\n<p>\u042f \u0438\u0441\u043a\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418, \u0438 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0441\u044f <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\">markus<\/a>.<\/p>\n<p>\u042d\u0442\u043e single-header \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0435\u0433\u043e \u0432 HTML. \u0421\u043e\u0437\u0434\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Claude Opus 4.5.<\/p>\n<p>\u041c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f. \u041c\u043e\u0436\u043d\u043e \u0435\u0451 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0441\u0440\u0430\u0437\u0443 \u043c\u043d\u043e\u0433\u043e \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430, \u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>markus.h<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e 6484 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 C++20. \u041f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430 \u0435\u0449\u0451 \u043c\u0435\u043d\u044c\u0448\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0432 \u0446\u0435\u043b\u044f\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u0427\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0442\u044f\u043d\u0443\u0442\u043e. <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L620\">\u041f\u0440\u0438\u043c\u0435\u0440<\/a>:<\/p>\n<pre><code class=\"cpp\">static constexpr uint8_t kWhitespaceTable[256] = {      0,      0,      0,      0,      .... \/\/ \u0438 \u0442\u0430\u043a 256 \u0441\u0442\u0440\u043e\u043a<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434\u0430 \u0435\u0449\u0451 \u043d\u0430 1000 \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u043f\u043e\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0418 \u0432\u043e\u0442 \u0443\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u044f, \u043c\u043e\u0433\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433\u0430<\/h3>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418 \u043c\u043e\u0436\u0435\u0442 \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0435\u0438\u0441\u043a\u0443\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>\u041a\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f, \u0442\u043e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c. \u041e\u0431 \u044d\u0442\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/990934\/\">\u043d\u0430\u043f\u0438\u0441\u0430\u043b<\/a> \u0420\u043e\u0431\u0435\u0440\u0442 \u041c\u0430\u0440\u0442\u0438\u043d:<\/p>\n<blockquote>\n<p>\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0430 AI \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043e\u0434\u0430. \u0423 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0443\u043c\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0442. \u0434. \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p>\u041d\u043e \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433\u0430, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u0430\u043b\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442: \u044d\u0442\u043e \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, <strong>\u0438\u0437\u043b\u0438\u0448\u043d\u0435\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0435 \u043a \u043d\u0435\u043c\u0443<\/strong>. \u0420\u0435\u0434\u043a\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u201c<a href=\"https:\/\/vc.ru\/ai\/2814435-ii-v-razrabotke-skorost-koda-i-risk-kachestva\">\u0418\u0418 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041d\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u0442<\/a>\u201d.<\/p>\n<p>\u0423\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u044d\u0442\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b \u0441\u0430\u043c\u0438, \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u0438\u043c, \u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0442. \u0434.<\/p>\n<p>\u0417\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e. \u042f \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u0440\u043e\u0441\u0438\u043b \u0418\u0418 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0442 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u042f \u0431\u044b\u043b \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438. \u041f\u0440\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b, \u0445\u043e\u0442\u044f \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0432 \u043a\u043d\u0438\u0433\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0431\u0438\u0442 \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c: \u201c\u0410 \u043d\u0435 \u043f\u043e\u0440\u0430 \u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0435\u0440\u043c\u0435\u0440\u044b?\u201d \u0421\u0430\u043c \u0431\u044b \u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f \u0431\u044b \u0435\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c, \u0442. \u043a. \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e \u043f\u0440\u043e \u0442\u0430\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b.<\/p>\n<p>\u042d\u0442\u043e \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0418\u0418. \u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 \u043a\u043e\u0434 markus, \u0442\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442: \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0442. \u0434:<\/p>\n<ol>\n<li>\n<p>\u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f [[unlikely]];<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>if constexpr<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f SIMD-Friendly Helper Functions;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d <code>std::pmr<\/code> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u043e\u0434 \u0441\u043e\u043b\u0438\u0434\u0435\u043d, \u0447\u0442\u043e \u0442\u0430\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u0442\u044c \u0447\u0442\u043e. \u041e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u2014 \u043b\u043e\u0436\u043d\u043e\u0435. \u0412\u0435\u0440\u043d\u0435\u0435, \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u0441\u0451 \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u041a \u0447\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u043b\u043e\u0434\u0435\u0446 \u0438 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0420\u0430\u0439\u0430\u043d \u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442:<\/p>\n<blockquote>\n<p>DO NOT USE IN PRODUCTION. This is completely vibe coded and has not undergone any reviews for memory safety. Its performance is also 2-3x slower than cmark.<\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0451\u0439? \u041a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0435\u0434\u0430\u043d\u0442\u0438\u0447\u043d\u044b\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c, \u043d\u043e \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 markus \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u043c. \u0410 \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0441 \u0447\u0435\u043c? \u041d\u0443\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0411\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u0438 \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<h3>\u041d\u0443\u0436\u0435\u043d \u043b\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442?<\/h3>\n<p>\u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u0434\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430?<\/p>\n<p>\u0412\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u043e\u0434. \u041e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u043e\u043f\u0440\u044f\u0442\u043d\u043e. \u041e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442, \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e?<\/p>\n<p>\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0431\u0435\u0437 \u043e\u0446\u0435\u043d\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u043d\u0435\u0441\u0451\u0442 \u0443\u0431\u044b\u0442\u043a\u0438, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0438\u0437-\u0437\u0430 \u0431\u0430\u0433\u043e\u0432 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0422\u0417.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0433\u043e \u043b\u043e\u043c\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u043d\u0435\u0432\u0430\u0436\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043b\u0433\u0438\u0439 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0415\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f\u043c\u0438, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u0442. \u0434.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0432\u0441\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u0432 \u0441\u0438\u043b\u0435 \u0438 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b. \u041a \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0443 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 SSDLC \/ \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/webinar\/rbpo\/content\/\">\u0420\u0411\u041f\u041e<\/a>.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u0433 \u043a \u0418\u0418<\/h3>\n<p>\u042f \u043d\u0435 \u0441\u0442\u0440\u043e\u0433, \u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043d. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0437\u044f\u0442 \u044f\u0437\u044b\u043a \u0421++. <strong>\u0421\u0443\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f C++ \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0445, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u043c\u044f\u0442\u044c<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0435 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c C++.<\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0432\u044b\u0431\u0440\u0430\u043d C++ \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043e\u0434. \u041d\u0435\u0432\u0430\u0436\u043d\u043e, \u043f\u0438\u0448\u0435\u0442 \u0435\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0418\u0418. \u0415\u0441\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0430.<\/p>\n<p>\u041c\u043e\u0439 \u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u2014 \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u0438 \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c. \u0412\u0430\u0439\u0431-\u043a\u043e\u0434\u0443, \u043a\u0430\u043a \u0438 \u043b\u044e\u0434\u044f\u043c, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0435. \u0415\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u041f\u043e\u043f\u0443\u0442\u043d\u043e, \u0440\u0430\u0437 \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e. \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0443\u0433\u0430\u0442\u044c \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433. \u042d\u0442\u043e \u0433\u043b\u0443\u043f\u043e, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0435\u0432\u0430\u043d\u0433\u0435\u043b\u0438\u0441\u0442\u043e\u0432 \u0418\u0418 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u044f \u0432\u0438\u0436\u0443, \u0447\u0442\u043e \u043a\u043e\u0434 \u2014 \u0445\u0440\u0435\u043d\u044c, \u044f \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0448\u0443.<\/p>\n<h3>SIMD-friendly \u043a\u043e\u0434<\/h3>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L377\"><code>IsSpanBlank<\/code><\/a> \u043e\u0431\u0435\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0438\u0437 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SSE-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0421\u0443\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0445\u0440\u0430\u043d\u044f\u0442 \u043b\u0438 \u043e\u043d\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b.<\/p>\n<pre><code class=\"cpp\">\/\/ Check if a span contains only blank characters (space, tab, \\r, \\n)\/\/ SIMD-friendly: processes 8 bytes at a timeinline bool IsSpanBlank(const char* data, size_t len) {  size_t i = 0;  \/\/ Process 8 bytes at a time  for (; i + 8 &lt;= len; i += 8) {    \/\/ For each byte, check if it's NOT a blank character    \/\/ Blank chars: space(0x20), tab(0x09), \\n(0x0A), \\r(0x0D)    bool all_blank = true;    for (size_t j = 0; j &lt; 8; ++j) {      unsigned char c = static_cast&lt;unsigned char&gt;(data[i + j]);      bool is_blank = (c == ' ' || c == '\\t' || c == '\\n' || c == '\\r');      all_blank = all_blank &amp;&amp; is_blank;    }    if (!all_blank) return false;  }  \/\/ Handle remaining bytes  for (; i &lt; len; ++i) {    unsigned char c = static_cast&lt;unsigned char&gt;(data[i]);    if (c != ' ' &amp;&amp; c != '\\t' &amp;&amp; c != '\\n' &amp;&amp; c != '\\r') {      return false;    }  }  return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0418\u0418 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/SIMD\">SIMD<\/a>-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0445\u0432\u043e\u0441\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<p>\u041c\u043d\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u0430\u0439\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043d\u0435 \u0445\u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">inline bool IsSpanBlank_Simple(const char* data, size_t len) {  for (size_t i = 0; i &lt; len; ++i) {    unsigned char c = static_cast&lt;unsigned char&gt;(data[i]);    if (c != ' ' &amp;&amp; c != '\\t' &amp;&amp; c != '\\n' &amp;&amp; c != '\\r') {      return false;    }  }  return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042f \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434. \u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0437\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u044f \u0431\u044b \u043f\u043e\u0448\u0451\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u0445.<\/p>\n<p>\u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c, \u044f \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0440\u0435\u0448\u0438\u043b\u0441\u044f. \u042f \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0430\u0436\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0438\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0446\u0435\u043b\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u201c\u0412\u043e\u0442! \u0422\u044b \u0441\u043b\u0430\u0431! \u0410 Claude Opus \u0432\u0437\u044f\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b. \u0412\u0437\u044f\u043b \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0443\u043c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u201d.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041c\u043e\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/?author=philip-khandeliants\">\u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0424\u0438\u043b\u0438\u043f\u043f<\/a> \u043f\u0440\u043e\u0432\u0451\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 <a href=\"https:\/\/quick-bench.com\/q\/rPfirfciTyG23cnVSLWDV9dEVJk\">GCC<\/a> \u0438 <a href=\"https:\/\/quick-bench.com\/q\/vfIF7a6mkD3AOzLw7HyDqaq0IyY\">Clang<\/a>:<\/p>\n<ul>\n<li>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c 1 000 000 \u0441\u0442\u0440\u043e\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043e\u0442 1 \u0434\u043e 127 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b. \u0417\u0430\u043c\u0435\u0440\u044f\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 <code>-O3<\/code>. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/af\/e9\/1e\/afe91ee6e2dae2eb8797994e18f5372c.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/af\/e9\/1e\/afe91ee6e2dae2eb8797994e18f5372c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/af\/e9\/1e\/afe91ee6e2dae2eb8797994e18f5372c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0411\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0443\u0447\u0448\u0435? \u041d\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u0410 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0431\u0435\u0437 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0441\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 \u0442\u043e\u0436\u0435 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0442\u0440\u0435\u043c\u044f \u043d\u043e\u0432\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 MSVC. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 <code>||<\/code> \u043d\u0430 <code>|<\/code>. Short-circuit evaluation \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u0434\u0438\u0442. \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">bool is_blank = (c == ' ' | c == '\\t' | c == '\\n' | c == '\\r');<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">inline bool IsSpanBlank_BinOR(const char* data, size_t len) {  size_t i = 0;  \/\/ Process 8 bytes at a time  for (; i + 8 &lt;= len; i += 8) {    \/\/ For each byte, check if it's NOT a blank character    \/\/ Blank chars: space(0x20), tab(0x09), \\n(0x0A), \\r(0x0D)    bool all_blank = true;    for (size_t j = 0; j &lt; 8; ++j) {      unsigned char c = static_cast&lt;unsigned char&gt;(data[i + j]);      bool is_blank = (c == ' ' | c == '\\t' | c == '\\n' | c == '\\r');      all_blank = all_blank &amp;&amp; is_blank;    }    if (!all_blank) return false;  }  \/\/ Handle remaining bytes  for (; i &lt; len; ++i) {    unsigned char c = static_cast&lt;unsigned char&gt;(data[i]);    if (c != ' ' &amp;&amp; c != '\\t' &amp;&amp; c != '\\n' &amp;&amp; c != '\\r') {      return false;    }  }  return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044f \u0441\u043f\u0440\u043e\u0441\u0438\u043b DeepSeek. \u041e\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445:<\/p>\n<pre><code class=\"cpp\">inline bool IsSpanBlank_Deepseek(const char* data, size_t len) noexcept {    \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 128-\u0431\u0438\u0442\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0434\u043b\u044f ASCII    static constexpr uint64_t blank_mask_low = []() {        uint64_t mask = 0;        mask |= 1ULL &lt;&lt; ' ';        mask |= 1ULL &lt;&lt; '\\t';        mask |= 1ULL &lt;&lt; '\\n';        mask |= 1ULL &lt;&lt; '\\r';        return mask;    }();        for (size_t i = 0; i &lt; len; ++i) {        unsigned char uc = static_cast&lt;unsigned char&gt;(data[i]);        if (uc &gt;= 64) return false;  \/\/ \u0412\u0441\u0435 blank-\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432 ASCII &lt; 64        if (!((blank_mask_low &gt;&gt; uc) &amp; 1)) return false;    }    return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u044f \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0443 DeepSeek \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"cpp\">inline bool IsSpanBlank_Deepseek_SSE(const char* data, size_t len) noexcept {  \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438  const __m128i space = _mm_set1_epi8(' ');  const __m128i tab = _mm_set1_epi8('\\t');  const __m128i newline = _mm_set1_epi8('\\n');  const __m128i carriage = _mm_set1_epi8('\\r');      size_t i = 0;      \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e 16 \u0431\u0430\u0439\u0442  for (; i + 15 &lt; len; i += 16) {    __m128i chunk = _mm_loadu_si128(reinterpret_cast&lt;const __m128i*&gt;(data + i));           \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445    __m128i eq_space = _mm_cmpeq_epi8(chunk, space);    __m128i eq_tab = _mm_cmpeq_epi8(chunk, tab);    __m128i eq_nl = _mm_cmpeq_epi8(chunk, newline);    __m128i eq_cr = _mm_cmpeq_epi8(chunk, carriage);           __m128i is_blank = _mm_or_si128(_mm_or_si128(eq_space, eq_tab),                                         _mm_or_si128(eq_nl, eq_cr));            \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0430\u0441\u043a\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c    int mask = _mm_movemask_epi8(is_blank);    if (mask != 0xFFFF) return false;}      \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043e\u043a  for (; i &lt; len; ++i) {    char c = data[i];    if (c != ' ' &amp;&amp; c != '\\t' &amp;&amp; c != '\\n' &amp;&amp; c != '\\r') return false;  }      return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0425\u043e\u0442\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b, \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u044f \u0438 \u0435\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b. \u0417\u0430\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 212 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u043e\u043c\u0443 \u044f\u0434\u0440\u0443. \u0415\u0441\u043b\u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e \u0447\u0451\u043c \u0438\u0434\u0451\u0442 \u0440\u0435\u0447\u044c, \u0437\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u201c<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/cpp\/0097\/\">\u0412\u0435\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/a>\u201d.<\/p>\n<pre><code>Win32:1. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0434\u043d\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c:                        1.39 \u0441\u0435\u043a.2. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \"\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\" \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c:       1.86 \u0441\u0435\u043a.3. \u0412 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b || \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 | :          0.351 \u0441\u0435\u043a.4. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442 Deepseek \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u0441\u043a\u0430\u0445:        0.817 \u0441\u0435\u043a.5. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442 Deepseek \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 SSE2 \u0438\u043d\u0442\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445:      0.0449 \u0441\u0435\u043a.Win64:1. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0434\u043d\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c:                        0.175 \u0441\u0435\u043a.2. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \"\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\" \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c:       0.309 \u0441\u0435\u043a.3. \u0412 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b || \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 | :          0.253 \u0441\u0435\u043a.4. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442 Deepseek \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u0441\u043a\u0430\u0445:        0.207 \u0441\u0435\u043a.5. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442 Deepseek \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 SSE2 \u0438\u043d\u0442\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445:      0.0396 \u0441\u0435\u043a.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e 64-\u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0447\u0430\u044f, \u0433\u0434\u0435 \u0432 \u0445\u043e\u0434 \u0438\u0434\u0451\u0442 SSE2, \u043d\u043e \u0438 \u0442\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p><strong>\u041a\u043e\u0434, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Claude Opus \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 markus, \u0445\u0443\u0434\u0448\u0438\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432.<\/strong><\/p>\n<p>\u0414\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043d\u043e \u0435\u0449\u0451 \u0438 \u043a\u043e\u0440\u043e\u0447\u0435. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u043e\u0448\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u0434.<\/p>\n<p>\u0412 \u043b\u0438\u0434\u0435\u0440\u0430\u0445 \u043a\u043e\u0434 \u043d\u0430 \u0438\u043d\u0442\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445, \u043d\u043e \u043f\u043b\u0430\u0442\u043e\u0439 \u0442\u043e\u043c\u0443 \u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041a\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u044f \u0437\u0440\u044f \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e. \u0414\u0430, Claude Opus \u0432\u044b\u0431\u0440\u0430\u043b \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u0432\u0435\u0434\u044c DeepSeek \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0435, \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u043a\u043e\u0434. \u041a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u043d\u043e \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0417\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0430. \u041d\u0443\u0436\u0435\u043d \u044d\u043a\u0441\u043f\u0435\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u043f\u043e\u0439\u043c\u0451\u0442 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u0442\u044c. \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435, \u0430 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u0434\u0430, \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435. \u0417\u0430\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430\u0447\u043d\u0443\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u201c\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u201d \u043a\u043e\u0434\u0435&#8230; \u041e\u0445, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430\u0441 \u0436\u0434\u0443\u0442.<\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a: \u0446\u0432\u0435\u0442\u043e\u0447\u043a\u0438<\/h3>\n<p>\u041c\u043e\u0451 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u043b\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v590\/\">V590<\/a> [CWE-571] Consider inspecting this expression. The expression is excessive or contains a misprint. markus.h 5987<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">BlockNode ParseParagraph() {  ....  auto trimmed = detail::TrimLeft(line);  \/\/ trimmed \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f std::string_view  ....  if (trimmed.size() &gt;= 2 &amp;&amp; trimmed[1] == '!' &amp;&amp; trimmed.size() &gt;= 9) {    ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0443\u0442, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e. \u041d\u0443 \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438 \u0442\u0430\u043a \u0432\u044b\u043a\u0438\u043d\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0414\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u043a\u043e\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"cpp\">if (trimmed.size() &gt;= 9 &amp;&amp; trimmed[1] == '!') \/\/ \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0445\u043e\u0440\u043e\u0448\u043e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0433\u043b\u0430\u0437\u0430 \u0441\u043a\u043e\u043b\u044c\u0437\u043d\u0443\u043b\u0438 \u043d\u0430 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435 <code>if<\/code>. \u0418 \u0432\u043e\u0442 \u0442\u0430\u043c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">std::pmr::string upper;for (size_t j = 0; j &lt; 9; ++j) {  upper += static_cast&lt;char&gt;(      std::toupper(static_cast&lt;unsigned char&gt;(trimmed[j])));}if (upper.starts_with(\"&lt;!DOCTYPE\")) {  goto html_interrupt;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 <code>\"&lt;!doctype\"<\/code>, \u043f\u0440\u0438\u0447\u0451\u043c \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0438\u043b\u0438 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435. \u0427\u0442\u043e\u0431\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u0438\u0439\/\u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0438 \u0443\u0436\u0435 \u043e\u043d\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c.<\/p>\n<p>\u0422\u0430\u043a \u0441\u0435\u0431\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u0442\u044f\u0436\u0451\u043b\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>std::pmr::string<\/code>. \u0412\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u0435\u0434\u044c \u043d\u0430\u0434\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0434\u0430 \u0435\u0449\u0451 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443. \u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 <code>std::string<\/code> \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0445\u0443\u0436\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 15 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/terms\/6658\/\">Small String Optimization<\/a>.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0443\u044e:<\/p>\n<pre><code class=\"cpp\">bool starts_with_insensitive(std::string_view str,                             std::string_view prefix_lower_case){  if (str.size() &lt; prefix.size()) return false;  const auto pred = [](unsigned char lhs, unsigned char rhs)  {    return lhs == std::tolower(rhs);  };  return std::equal(prefix_lower_case.begin(), prefix_lower_case.end(),                    str.begin(),                    pred);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440. \u041c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>istring_view<\/code>, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u0441\u0432\u043e\u0438 <a href=\"http:\/\/www.gotw.ca\/gotw\/029.htm\">char_traits<\/a>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u043a\u043e\u0434, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">if (starts_with_insensitive(trimmed, \"&lt;!doctype\")) {  goto html_interrupt;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0449\u0451 \u044f\u0440\u0447\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u0438\u0434\u043d\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435. \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0432\u0435\u0442\u043e\u0447\u043a\u0438, \u0430 \u044f\u0433\u043e\u0434\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043f\u0435\u0440\u0435\u0434\u0438.<\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a: \u044f\u0433\u043e\u0434\u043a\u0438<\/h3>\n<p>\u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio, \u044f \u043e\u0431\u0440\u0430\u0442\u0438\u043b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">std::optional&lt;HtmlBlock&gt; TryParseHtmlBlock() {  ....  static const std::pmr::vector&lt;std::pmr::string&gt; type1_tags = {      \"script\", \"pre\", \"style\", \"textarea\"  };  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043e\u043d \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v1096\/\">V1096<\/a> The \u2018type1_tags\u2019 variable with static storage duration is declared inside the inline function with external linkage. This may lead to ODR violation. markus.h 4781<\/p>\n<p>\u041d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435. \u041a\u0443\u0434\u0430 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435 \u0442\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u044d\u0442\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0435\u043b\u0430\u0434\u043d\u043e\u0435, \u0437\u0430\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0442 \u043f\u0440\u043e \u044d\u0442\u0443 \u0434\u0438\u0447\u044c.<\/p>\n<p>\u041a\u043e\u0434 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u044d\u0442\u0438\u0445 \u0442\u0435\u0433\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435. \u041d\u043e \u0432\u0435\u0434\u044c \u0432 \u0442\u0435\u0433\u0435 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0443\u0433\u043b\u043e\u0432\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 <code>&lt;<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0418\u0418, \u043d\u0435 \u0441\u0442\u044b\u0434\u044f\u0441\u044c, \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u044d\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0442\u0435\u0433 \u0441\u043e \u0441\u043a\u043e\u0431\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cpp\">for (const auto&amp; tag : type1_tags) {  std::pmr::string open_tag = \"&lt;\" + tag;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0433\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443. \u0412\u0430\u0439\u0431-\u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0435 \u043c\u0435\u0448\u043a\u0438 \u0432\u043e\u0440\u043e\u0447\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">std::pmr::string lower;for (size_t j = 0; j &lt; open_tag.size(); ++j) {   lower += static_cast&lt;char&gt;(       std::tolower(static_cast&lt;unsigned char&gt;(trimmed[j])));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u0440\u0438\u043d\u0436 <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L4781\">\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442<\/a> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">static const std::pmr::vector&lt;std::pmr::string&gt; type1_tags = {    \"script\", \"pre\", \"style\", \"textarea\"};for (const auto&amp; tag : type1_tags) {  std::pmr::string open_tag = \"&lt;\" + tag;  if (trimmed.size() &gt;= open_tag.size()) {    std::pmr::string lower;    for (size_t j = 0; j &lt; open_tag.size(); ++j) {      lower += static_cast&lt;char&gt;(        std::tolower(static_cast&lt;unsigned char&gt;(trimmed[j])));    }    if (lower == open_tag) {      \/\/ ....    }  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u0435\u0441\u043b\u0438 \u0442\u0435\u0433\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0435\u0442), <strong>\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043e\u0441\u0435\u043c\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a!<\/strong> \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443, \u0438 Small String Optimization \u0432\u043d\u0443\u0442\u0440\u0438 <code>std::pmr::string<\/code> \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0418 \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432\u0435\u043a\u0442\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 <code>std::string_view<\/code>, \u0447\u0442\u043e \u0432\u043e\u0432\u0441\u0435 \u0443\u0431\u0435\u0440\u0451\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">using namespace std::literals;static constexpr std::array type1_tags = {  \"&lt;script\"sv, \"&lt;pre\"sv, \"&lt;style\"sv, \"&lt;textarea\"sv};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>starts_with_insensitive<\/code>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0435\u0441\u044c \u0433\u043e\u0432\u043d\u043e\u043a\u043e\u0434, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0434\u043e:<\/p>\n<pre><code class=\"cpp\">using namespace std::literals;static constexpr std::array type1_tags = {  \"&lt;script\"sv, \"&lt;pre\"sv, \"&lt;style\"sv, \"&lt;textarea\"sv};for (auto tag : type1_tags) {  if (starts_with_insensitive(trimmed, tag.c_str(), tag.size()) {<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041a\u043e\u0434 \u0441\u0442\u0430\u043b \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043a\u043e\u0440\u043e\u0447\u0435 \u0438 \u0432 N \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/strong><\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0442\u0435\u0433\u043e\u043c \u0432 \u0441\u043a\u043e\u0431\u0430\u0445 <code>end_condition = \"&lt;\/\" + tag + \"&gt;\";<\/code>, \u0430 \u0431\u0440\u0430\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u041d\u043e \u0445\u0432\u0430\u0442\u0438\u0442 \u0443\u0436\u0435 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043c\u0443\u0447\u0438\u0442\u044c.<\/p>\n<h3>\u0426\u0435\u043d\u0430 \u043a\u0440\u0430\u0441\u043e\u0442\u044b<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043b \u043a\u043e\u0434, \u043c\u043e\u0451 \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u0432\u0430\u043b \u043a\u043e\u0434 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443. \u0412\u0441\u0451 \u043f\u043e \u0444\u044d\u043d\u0448\u0443\u044e: \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u044f\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u201c\u0432\u0438\u0437\u0438\u0442\u043e\u0440\u201d \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u041a\u043e\u0434 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0442\u044b\u0440\u0435: <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L3511\">GetAltTextFromIds<\/a>, <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L3543\">GetAltText<\/a>, <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L6262\">RenderInlines<\/a>, <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L6336\">DebugAst<\/a>, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435:<\/p>\n<pre><code class=\"cpp\">using InlineNode = std::variant&lt;....&gt;;std::pmr::string GetAltText(const std::pmr::vector&lt;InlineNode&gt;&amp; nodes) {  std::pmr::string result;  for (const auto&amp; node : nodes) {    std::visit(        [&amp;result, this](auto&amp;&amp; arg) {          using T = std::decay_t&lt;decltype(arg)&gt;;          if constexpr (std::is_same_v&lt;T, Text&gt;) {            result += arg.content;          } else if constexpr (std::is_same_v&lt;T, Code&gt;) {            result += arg.content;          } else if constexpr (std::is_same_v&lt;T, SoftBreak&gt;) {            result += ' ';          } else if constexpr (std::is_same_v&lt;T, HardBreak&gt;) {            result += ' ';          } else if constexpr (std::is_same_v&lt;T, Emphasis&gt;) {            result += GetAltTextFromIds(arg.children);          } else if constexpr (std::is_same_v&lt;T, Strong&gt;) {            result += GetAltTextFromIds(arg.children);          } else if constexpr (std::is_same_v&lt;T, Link&gt;) {            result += GetAltTextFromIds(arg.children);          } else if constexpr (std::is_same_v&lt;T, Image&gt;) {            result += arg.alt_text;          }        },        node);  }  return result;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044f \u0434\u0443\u043c\u0430\u043b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a-\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435. \u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u041c\u043e\u043b, \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u0418\u0418 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 C++ \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0418\u0442\u043e\u0433\u043e: \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0430 \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u044f\u043c \u0437\u0434\u043e\u0440\u043e\u0432\u043e.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0445\u0432\u0430\u043b\u0435\u0431\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043d\u0435, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a \u0447\u0435\u043c\u0443. \u0417\u0430\u0447\u0435\u043c \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b&#8230; \u041e\u0441\u0442\u0430\u043b\u0441\u044f \u0431\u044b \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c\u0438, \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 <code>constexpr<\/code> \u0438 \u043a\u043e\u0434\u043e\u043c, \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0441\u0442\u043e\u043b\u0431\u0438\u043a.<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0437\u0434\u0435\u0441\u044c \u043f\u043b\u043e\u0445\u043e. \u0421\u0435\u0439\u0447\u0430\u0441 \u0438 \u0432\u0430\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/37\/fa\/14\/37fa14eb05de61fc44ce4957fdae9967.png\" alt=\"\u041c\u0435\u043c: \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c \u0438\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/37\/fa\/14\/37fa14eb05de61fc44ce4957fdae9967.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/37\/fa\/14\/37fa14eb05de61fc44ce4957fdae9967.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0435\u043c: \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c \u0438\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0442\u0430\u043a, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0412 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0442\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e. \u0410 \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">using namespace std::literals;struct Node{    virtual ~Node() = default;    virtual std::string StrAltText() = 0;    virtual std::string StrDebug() = 0;};struct SoftBreak : public Node {    std::string StrAltText() { return \" \"s; }    std::string StrDebug() { return \" \"s; }};struct HtmlBlock : public Node {    std::string content;    std::string StrAltText() { return content; }    std::string StrDebug() { return std::format(\"HtmlBlock = {}\", content); }};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0431\u044b \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">std::string GetAltText(const std::vector&lt;Node *&gt;&amp; nodes) {    std::string result;    for (const auto&amp; node : nodes)        result += node-&gt;StrAltText();    return result;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c, \u0445\u0440\u0430\u043d\u044f \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435 \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/unique_ptr.html\"><code>std::unique_ptr<\/code><\/a>. \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/any.html\"><code>std::any<\/code><\/a>.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043a\u043e\u0434 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0443\u0437\u043d\u0430\u0432\u0430\u044f \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>dynamic_cast<\/code>. \u042d\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0442\u0438\u043f:<\/p>\n<pre><code class=\"cpp\">enum NodeType{    kSoftBreak,    kHtmlBlock};struct Node{    const NodeType type;    Node(NodeType t) : type(t) {}    virtual ~Node() = default;};struct SoftBreak : public Node {    SoftBreak() : Node(kSoftBreak) {}};struct HtmlBlock : public Node {    std::string content;    HtmlBlock() : Node(kHtmlBlock) {}};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u0437\u044f\u0449\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code class=\"cpp\">std::string GetAltText(const std::vector&lt;std::unique_ptr&lt;Node&gt;&gt;&amp; nodes){    std::string result;    for (const auto&amp; node : nodes)        switch(node-&gt;type)        {            case kSoftBreak:            {                \/\/ \u0417\u0434\u0435\u0441\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442.                \/\/ SoftBreak &amp;n = *static_cast&lt;SoftBreak *&gt;(node);                result += ' ';                break;            }            case kHtmlBlock:            {                const HtmlBlock &amp;n = static_cast&lt;const HtmlBlock &amp;&gt;(*node);                result += n.content;                break;            }    }    return result;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u0437\u044f\u0449\u0435\u0441\u0442\u0432\u0430, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/variant.html\"><code>std::variant<\/code><\/a>, \u0447\u0442\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u043b Claude Opus. \u0422\u0438\u043f <code>std::variant<\/code> \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0443\u043c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>union<\/code>, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0438\u043f\u043e\u0432. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u0416\u0438\u0440\u043d\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u043d\u044e\u0430\u043d\u0441.<\/p>\n<p>\u041d\u043e \u043d\u0430\u0447\u043d\u0451\u043c \u043c\u044b \u0441 \u0442\u043e\u0433\u043e, \u0442\u043e \u0418\u0418 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043e\u0437\u0434\u0430\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c. \u041e\u043d \u0437\u0430\u0432\u0451\u043b <a href=\"https:\/\/github.com\/ryanmcdermott\/markus\/blob\/4519680d8331693140aabac5bb5591931a796ad8\/markus.h#L70\">\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>NodeType<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0445\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"cpp\">enum class NodeType {  ....  kHtmlBlock,  kBlockQuote,  kList,  kListItem,  kText,  kSoftBreak,  ....};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432\u0441\u0442\u0430\u0432\u0438\u043b \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>kType<\/code> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">struct SoftBreak {  static constexpr NodeType kType = NodeType::kSoftBreak;};struct HtmlBlock {  static constexpr NodeType kType = NodeType::kHtmlBlock;  std::pmr::string content;  int block_type = 0;  \/\/ CommonMark HTML block type (1-7)};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. <code>kType<\/code> \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0431\u043b\u0430\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043e\u043d \u043a\u0430\u043a <code>static<\/code> \u0438 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435.<\/p>\n<p>\u0421\u0430\u043c\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u2014 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>NodeTypeToString<\/code>:<\/p>\n<pre><code class=\"cpp\">\/\/ Convert NodeType to string for debugginginline std::string_view NodeTypeToString(NodeType type) {  switch (type) {    case NodeType::kDocument:      return \"Document\";    case NodeType::kParagraph:      return \"Paragraph\";    case NodeType::kHeading:      return \"Heading\";    case NodeType::kThematicBreak:      return \"ThematicBreak\";   ....    case NodeType::kHtmlInline:      return \"HtmlInline\";  }  return \"Unknown\";}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u0438 \u043a\u0430\u043a \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0417\u0430\u0447\u0435\u043c \u043e\u043d\u0430? \u0427\u0435\u043c \u043e\u043d\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442? \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0438\u043a\u043e\u043c\u0443 \u0438 \u043d\u0438\u0447\u0435\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0449\u0451 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 100.<\/p>\n<p>\u041d\u0443 \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434, \u0438 \u043b\u0430\u0434\u043d\u043e \u2014 \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u0430\u0442\u044c. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0441 \u0436\u0434\u0451\u0442 \u0441\u0430\u043c\u043e\u0435 \u0442\u043e\u043b\u0441\u0442\u043e\u0435. \u0412 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0441\u043b\u043e\u0432\u0430.<\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430 <code>std::variant<\/code> \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b:<\/p>\n<pre><code class=\"cpp\">using InlineNode = std::variant&lt;Text, SoftBreak, HardBreak, Code, Emphasis,                                Strong, Link, Image, HtmlInline&gt;;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u0435\u0441\u044c\u043c\u0430 \u0440\u0430\u0437\u043d\u044b\u0439, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <code>SoftBreak<\/code>:<\/p>\n<pre><code class=\"cpp\">struct SoftBreak {  static constexpr NodeType kType = NodeType::kSoftBreak;};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 1 \u0431\u0430\u0439\u0442. \u0425\u043e\u0442\u044f \u043a\u043b\u0430\u0441\u0441 \u043f\u0443\u0441\u0442\u043e\u0439, \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u2014 <code>Image<\/code>:<\/p>\n<pre><code class=\"cpp\">struct Image {  static constexpr NodeType kType = NodeType::kImage;  std::pmr::string destination;  std::pmr::string title;  std::pmr::string alt_text;};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 120 \u0431\u0430\u0439\u0442\u043e\u0432. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>std::pmr::string<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/microsoft\/STL\/blob\/main\/stl\/inc\/xstring#L589\">STL<\/a> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 40 \u0431\u0430\u0439\u0442\u043e\u0432. \u0412\u044b \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442?<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0449\u0451 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0418\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <code>InlineNode<\/code> \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 128 \u0431\u0430\u0439\u0442\u043e\u0432! \u041c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/godbolt.org\/z\/WsWG6MM6K\">\u0437\u0434\u0435\u0441\u044c \u0441\u0430\u043c\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/a>.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0433\u0434\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 128 \u0431\u0430\u0439\u0442\u043e\u0432. \u041e\u0444\u0438\u0433\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u201c\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u201d \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0421\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0432 \u043f\u0440\u043e\u0431\u0435\u043b\u044b:<\/p>\n<pre><code class=\"cpp\">} else if constexpr (std::is_same_v&lt;T, SoftBreak&gt;) {  result += ' ';<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0427\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c 128 \u0431\u0430\u0439\u0442\u043e\u0432.<\/strong><\/p>\n<p>\u041f\u0435\u0440\u0435\u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435, \u043c\u043e\u0436\u0435\u0442, \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0443\u0436 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0451 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u043c\u0435\u043d\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043a\u044d\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0443\u043c\u043d\u044b\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u0418 \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c (\u0441\u043c. \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e <code>switch<\/code>).<\/p>\n<p>\u041d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f. \u041a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u0443\u0447\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0438 \u0438\u0445 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0435\u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u0427\u0442\u043e \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u0430\u043a \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0440\u044b\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 <code>std::variant<\/code>.<\/p>\n<p>\u0415\u0449\u0451 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code class=\"cpp\">std::pmr::vector&lt;InlineNode&gt; link_content;for (size_t i = opener-&gt;pos + 1; i &lt; result.size(); ++i) {  link_content.push_back(std::move(result[i]));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0441\u0442\u0430. \u0411\u0440\u0440&#8230; \u0412\u0435\u0440\u0441\u0438\u044f \u0441 \u0443\u043c\u043d\u044b\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>std::vector&lt;std::unique_ptr&lt;Node&gt;&gt;<\/code> \u043a\u0443\u0434\u0430 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0435\u0435.<\/p>\n<p>\u0418\u0442\u043e\u0433: \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u043d\u043e\u0432\u044c \u0433\u043e\u0432\u043d\u043e\u043a\u043e\u0434, \u043f\u043e\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u0435.<\/p>\n<p>\u042f \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044e, \u0447\u0442\u043e \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0438\u043b\u0438 <code>std::any<\/code> \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c. \u041c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434, \u0442\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043c\u0435\u0441\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0451?<\/h3>\n<p>\u041d\u0435 \u0437\u043d\u0430\u044e. \u042f \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0432\u044b\u0448\u0435\u043b \u0437\u0430 \u043b\u0438\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0443 \u043a\u043e\u0434\u0430 \u0438 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0435\u0449\u0451 \u0440\u0430\u0437 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0440\u043e\u0441\u0442\u0435 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0432\u044c\u044e\u0435\u0440\u043e\u0432. \u041d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435. \u0412\u043e\u043f\u0440\u043e\u0441: \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u0441\u0438\u043b\u044b \u043d\u0430 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0434\u0438\u043a\u0442\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e? \u041a\u0442\u043e \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442? \u041c\u044b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0432 \u043c\u0438\u0440\u0435 C++, \u0441\u0443\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e \u043e\u043d \u0442\u0443\u0442 \u0437\u0430\u0431\u044b\u043b?<\/p>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e, \u043d\u043e \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c PVS-Studio.<\/p>\n<h4>\u0421\u043a\u043b\u0435\u0440\u043e\u0437<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v560\/\">V560<\/a> [CWE-571] A part of conditional expression is always true: !input.empty(). markus.h 2228<\/p>\n<pre><code class=\"cpp\">explicit LineBuffer(std::string_view input) {  if (input.empty()) [[unlikely]] {    return;  }  ....  \/\/ input \u043d\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f  ....  if (input.size() &gt; line_start ||      (!input.empty() &amp;&amp; (input.back() == '\\n' || input.back() == '\\r'))) {    line_offsets_.push_back({line_start, input.size() - line_start});  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0418 \u043f\u0435\u0434\u0430\u043d\u0442\u0438\u0447\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>[[unlikely]]<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u043f\u0443\u0441\u0442\u0430\u044f, \u0438 \u0432\u043b\u0435\u043f\u043b\u044f\u0435\u0442 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 <code>!input.empty()<\/code>.<\/p>\n<h4>\u0421 \u043a\u0435\u043c \u043f\u043e\u0432\u0435\u0434\u0451\u0448\u044c\u0441\u044f, \u043e\u0442 \u0442\u043e\u0433\u043e \u0438 \u043d\u0430\u0431\u0435\u0440\u0451\u0448\u044c\u0441\u044f<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v1048\/\">V1048<\/a> [CWE-1164] The \u2018prev_line_had_content\u2019 variable was assigned the same value. markus.h 4090<\/p>\n<pre><code class=\"cpp\">void ExtractLinkReferences(Document&amp; doc) {  ....  bool prev_line_had_content = false;  ....  if (prev_line_had_content) {    prev_line_had_content = true;  \/\/ This line also has content    Advance();    continue;  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>prev_line_had_content<\/code> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true<\/code>, \u0445\u043e\u0442\u044f \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u0442\u0430\u043c \u043b\u0435\u0436\u0438\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432 \u2014 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043a\u043e\u0434\u0430. \u041d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435: \u044f \u0431\u044b \u043d\u0435 \u0441\u0442\u0430\u043b \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<p>\u0421\u043b\u044b\u0448\u0430\u043b\u0438 \u0431\u0430\u0439\u043a\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0438\u0448\u0443\u0442 \u0432\u0435\u0440\u043d\u044b\u0435, \u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438? \u0412\u0438\u0434\u0438\u043c\u043e, \u0443 \u0418\u0418 \u0431\u044b\u043b\u0438 \u201c\u0445\u043e\u0440\u043e\u0448\u0438\u0435\u201d \u0443\u0447\u0438\u0442\u0435\u043b\u044f. \u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e.<\/p>\n<p>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435 &#171;\u0412\u0440\u0435\u0434\u043d\u044b\u0439 \u0441\u043e\u0432\u0435\u0442 N53 \u2014 \u041e\u0442\u0432\u0435\u0447\u0430\u0439 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u201c\u0447\u0442\u043e?\u201d \u0432 \u043a\u043d\u0438\u0433\u0435 \u201c<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/cpp\/1053\/\">60 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0434\u043b\u044f \u0421++ \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430<\/a>\u201d.<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043a\u0441\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v823\/\">V823<\/a> Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2597<\/p>\n<pre><code class=\"cpp\">std::pmr::vector&lt;InlineNodeId&gt; ParseInlines() {  std::pmr::vector&lt;InlineNode&gt; result;  ....  result.push_back(Text(text_.substr(text_start, pos_ - text_start)));  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <code>Text<\/code>, \u0437\u0430\u0442\u0435\u043c \u043e\u043d \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>emplace_back<\/code>:<\/p>\n<pre><code class=\"cpp\">result.emplace_back(Text(text_.substr(text_start, pos_ - text_start)));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 <code>emplace_back<\/code> \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u0441\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 0% \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0435\u0449\u0451 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u2014 \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>emplace_back<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0445\u0438\u0442\u0440\u044b\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u042d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443, \u043a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0451 <code>std::string_view<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">result.emplace_back(std::in_place_type&lt;Text&gt;, text.substr(....));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0442\u0438\u043f\u0435 \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/variant\/variant.html\">5-\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430<\/a> \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <code>std::variant<\/code>.<\/p>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u043b\u043e\u0447\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u0441\u0442\u0430\u0432\u043e\u043a \u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0445\u043e\u0440\u043e\u0448\u043e<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2610<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2632<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2650<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2733<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2751<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2754<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2855<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2931<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018quote_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 5239<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018quote_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 5241<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018item_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 5641<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018item_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 5643<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018para_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 6045<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018para_lines\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 6047<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018delimiter_stack\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2729<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018delimiter_stack\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2746<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2193<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2196<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2208<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2218<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2221<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018line_offsets_\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2229<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2637<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2947<\/p>\n<\/li>\n<li>\n<p>V823 Decreased performance. Object may be created in-place in the \u2018result\u2019 container. Consider replacing methods: \u2018push_back\u2019 -&gt; \u2018emplace_back\u2019. markus.h 2958<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h4>\u041a\u043e\u043f\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v820\/\">V820<\/a> The \u2018content\u2019 variable is not used after copying. Copying can be replaced with move\/swap for optimization. markus.h 4670<\/p>\n<pre><code class=\"cpp\">struct Heading {  static constexpr NodeType kType = NodeType::kHeading;  int level = 1;  \/\/ 1-6  std::pmr::vector&lt;InlineNodeId&gt; children;  std::pmr::string raw_content;  \/\/ Temporary storage for inline parsing};std::optional&lt;Heading&gt; TryParseAtxHeading() {  ....  std::pmr::string content(trimmed.substr(i));  ....  Heading heading;  heading.level = level;  heading.raw_content = content;    \/\/ &lt;=  return heading;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>content<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">heading.raw_content = std::move(content);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>heading<\/code> \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430:<\/p>\n<pre><code class=\"cpp\">return Heading { .level = level,                 .raw_content = std::move(content)               };<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u044f\u0442\u044c-\u0442\u0430\u043a\u0438, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u2014 \u043c\u0435\u043b\u043e\u0447\u044c, \u043d\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>V820 The \u2018info_string\u2019 variable is not used after copying. Copying can be replaced with move\/swap for optimization. markus.h 4761<\/p>\n<\/li>\n<li>\n<p>V820 The \u2018content\u2019 variable is not used after copying. Copying can be replaced with move\/swap for optimization. markus.h 4762<\/p>\n<\/li>\n<li>\n<p>V820 The \u2018content\u2019 variable is not used after copying. Copying can be replaced with move\/swap for optimization. markus.h 5101<\/p>\n<\/li>\n<li>\n<p>V820 The \u2018content\u2019 variable is not used after copying. Copying can be replaced with move\/swap for optimization. markus.h 5821<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h4>\u0417\u0430\u043a\u0430\u0442 \u0441\u043e\u043b\u043d\u0446\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v837\/\">V837<\/a> The \u2018insert\u2019 function does not guarantee that arguments will not be copied or moved if there is no insertion. Consider using the \u2018try_emplace\u2019 function. markus.h 5274<\/p>\n<pre><code class=\"cpp\">using LinkRefMap =    std::pmr::unordered_map&lt;std::pmr::string,                            std::pair&lt;std::pmr::string, std::pmr::string&gt;&gt;;std::optional&lt;BlockQuote&gt; TryParseBlockQuote() {  ....   LinkRefMap* parent_link_refs_ = nullptr;  ....  for (const auto&amp; [label, dest_title] : nested_doc.link_references) {    if (parent_link_refs_-&gt;find(label) == parent_link_refs_-&gt;end()) {      parent_link_refs_-&gt;insert({label, dest_title});    }  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>PVS-Studio \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043a\u043b\u044e\u0447\u043e\u043c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430. \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0443\u0442 \u0434\u0432\u0430 \u043f\u043e\u0438\u0441\u043a\u0430:<\/p>\n<ol>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0449\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u044d\u0442\u0443 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043d\u043e\u0432\u0430, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u044b\u0437\u043e\u0432 <code>try_emplace<\/code> \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u0431\u044b\u043b\u043e:<\/p>\n<pre><code class=\"cpp\">for (const auto&amp; [label, dest_title] : nested_doc.link_references) {    parent_link_refs_-&gt;try_emplace(label, dest_title);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412\u044b\u0432\u043e\u0434\u044b \u0432\u0441\u0451 \u0442\u0435 \u0436\u0435, \u0447\u0442\u043e \u0431\u044b\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u201c<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/cpp\/1354\/\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434<\/a>\u201d. \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u041f\u041e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u043c\u0435\u0440.<\/p>\n<ol>\n<li>\n<p>\u0426\u0435\u043d\u0438\u0442\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u044e\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0435\u0451 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11596\/\">\u041a\u0418\u0411<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0426\u0435\u043d\u0438\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e. \u0422\u0435\u0445, \u043a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u043f\u0440\u0430\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11446\/\">\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u0434\u0430<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11452\/\">\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u0434\u0430<\/a> \u0438 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11574\/\">FAST \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/a> \u0434\u043b\u044f frontend-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11494\/\">\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0418\u0418 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0445 <a href=\"https:\/\/vkvideo.ru\/video-229013285_456239040?sh=4\">\u0433\u0430\u043b\u043b\u044e\u0446\u0438\u043d\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0430\u043a \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/video\/11433\/\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>. \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u0443\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u0440\u0430\u0437\u043d\u043e\u0431\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/webinar\/rbpo\/content\/\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u041f\u041e<\/a>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Andrey Karpov. <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1366\/\">Let\u2019s check vibe code that acts like optimized C++ one but is actually a mess<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1026084\/\">https:\/\/habr.com\/ru\/articles\/1026084\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041e\u0431\u0437\u043e\u0440 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430\u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0443\u043c\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u043d\u043e \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0433\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 markus, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Claude Opus, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0443\u043c\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.\u041f\u0440\u043e\u0435\u043a\u0442 markus\u042f \u0438\u0441\u043a\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418, \u0438 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0441\u044f markus.\u042d\u0442\u043e single-header \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0435\u0433\u043e \u0432 HTML. \u0421\u043e\u0437\u0434\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Claude Opus 4.5.\u041c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f. \u041c\u043e\u0436\u043d\u043e \u0435\u0451 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0441\u0440\u0430\u0437\u0443 \u043c\u043d\u043e\u0433\u043e \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0430, \u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 markus.h, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e 6484 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 C++20. \u041f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430 \u0435\u0449\u0451 \u043c\u0435\u043d\u044c\u0448\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0432 \u0446\u0435\u043b\u044f\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u0427\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0442\u044f\u043d\u0443\u0442\u043e. \u041f\u0440\u0438\u043c\u0435\u0440:static constexpr uint8_t kWhitespaceTable[256] = {      0,      0,      0,      0,      &#8230;. \/\/ \u0438 \u0442\u0430\u043a 256 \u0441\u0442\u0440\u043e\u043a\u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434\u0430 \u0435\u0449\u0451 \u043d\u0430 1000 \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u043f\u043e\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0418 \u0432\u043e\u0442 \u0443\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u044f, \u043c\u043e\u0433\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433\u0430\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418 \u043c\u043e\u0436\u0435\u0442 \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0435\u0438\u0441\u043a\u0443\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438.\u041a\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f, \u0442\u043e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c. \u041e\u0431 \u044d\u0442\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0420\u043e\u0431\u0435\u0440\u0442 \u041c\u0430\u0440\u0442\u0438\u043d:\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0430 AI \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u043e\u0434\u0430. \u0423 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.\u0422\u0430\u043a \u0447\u0442\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0443\u043c\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0442. \u0434. \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.\u041d\u043e \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433\u0430, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u0430\u043b\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442: \u044d\u0442\u043e \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0438\u0437\u043b\u0438\u0448\u043d\u0435\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0435 \u043a \u043d\u0435\u043c\u0443. \u0420\u0435\u0434\u043a\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u201c\u0418\u0418 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041d\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u0442\u201d.\u0423\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u044d\u0442\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b \u0441\u0430\u043c\u0438, \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u0438\u043c, \u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0442. \u0434.\u0417\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e. \u042f \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u0440\u043e\u0441\u0438\u043b \u0418\u0418 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0442 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u042f \u0431\u044b\u043b \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438. \u041f\u0440\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b, \u0445\u043e\u0442\u044f \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0432 \u043a\u043d\u0438\u0433\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443.\u0421\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0431\u0438\u0442 \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c: \u201c\u0410 \u043d\u0435 \u043f\u043e\u0440\u0430 \u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0435\u0440\u043c\u0435\u0440\u044b?\u201d \u0421\u0430\u043c \u0431\u044b \u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f \u0431\u044b \u0435\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c, \u0442. \u043a. \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e \u043f\u0440\u043e \u0442\u0430\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b.\u042d\u0442\u043e \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0418\u0418. \u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 \u043a\u043e\u0434 markus, \u0442\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442: \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0442. \u0434:\u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f [[unlikely]];\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 if constexpr;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432;\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f SIMD-Friendly Helper Functions;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d std::pmr \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.\u041a\u043e\u0434 \u0441\u043e\u043b\u0438\u0434\u0435\u043d, \u0447\u0442\u043e \u0442\u0430\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u0442\u044c \u0447\u0442\u043e. \u041e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u2014 \u043b\u043e\u0436\u043d\u043e\u0435. \u0412\u0435\u0440\u043d\u0435\u0435, \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u0441\u0451 \u043f\u043b\u043e\u0445\u043e.\u041a \u0447\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u043b\u043e\u0434\u0435\u0446 \u0438 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0420\u0430\u0439\u0430\u043d \u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442:DO NOT USE IN PRODUCTION. This is completely vibe coded and has not undergone any reviews for memory safety. Its performance is also 2-3x slower than cmark.\u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0451\u0439? \u041a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0435\u0434\u0430\u043d\u0442\u0438\u0447\u043d\u044b\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c, \u043d\u043e \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 markus \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u043c. \u0410 \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0441 \u0447\u0435\u043c? \u041d\u0443\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0411\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u0438 \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.\u041d\u0443\u0436\u0435\u043d \u043b\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442?\u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u0434\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430?\u0412\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u043e\u0434. \u041e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u043e\u043f\u0440\u044f\u0442\u043d\u043e. \u041e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442, \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e?\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0431\u0435\u0437 \u043e\u0446\u0435\u043d\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u043d\u0435\u0441\u0451\u0442 \u0443\u0431\u044b\u0442\u043a\u0438, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0438\u0437-\u0437\u0430 \u0431\u0430\u0433\u043e\u0432 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0422\u0417.\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0433\u043e \u043b\u043e\u043c\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u043d\u0435\u0432\u0430\u0436\u043d\u0430.\u041d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043b\u0433\u0438\u0439 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0415\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f\u043c\u0438, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u0442. \u0434.\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0432\u0441\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u0432 \u0441\u0438\u043b\u0435 \u0438 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b. \u041a \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0443 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 SSDLC \/ \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u0420\u0411\u041f\u041e.\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u0433 \u043a \u0418\u0418\u042f \u043d\u0435 \u0441\u0442\u0440\u043e\u0433, \u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043d. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0437\u044f\u0442 \u044f\u0437\u044b\u043a \u0421++. \u0421\u0443\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f C++ \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0445, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u043c\u044f\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0435 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c C++.\u0420\u0430\u0437 \u0443\u0436 \u0432\u044b\u0431\u0440\u0430\u043d C++ \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043e\u0434. \u041d\u0435\u0432\u0430\u0436\u043d\u043e, \u043f\u0438\u0448\u0435\u0442 \u0435\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0418\u0418. \u0415\u0441\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0430.\u041c\u043e\u0439 \u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u2014 \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u0438 \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c. \u0412\u0430\u0439\u0431-\u043a\u043e\u0434\u0443, \u043a\u0430\u043a \u0438 \u043b\u044e\u0434\u044f\u043c, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0435. \u0415\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.\u041f\u043e\u043f\u0443\u0442\u043d\u043e, \u0440\u0430\u0437 \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e. \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0443\u0433\u0430\u0442\u044c \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u0430\u0439\u0431-\u043a\u043e\u0434\u0438\u043d\u0433. \u042d\u0442\u043e \u0433\u043b\u0443\u043f\u043e, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0435\u0432\u0430\u043d\u0433\u0435\u043b\u0438\u0441\u0442\u043e\u0432 \u0418\u0418 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u044f \u0432\u0438\u0436\u0443, \u0447\u0442\u043e \u043a\u043e\u0434 \u2014 \u0445\u0440\u0435\u043d\u044c, \u044f \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0448\u0443.SIMD-friendly \u043a\u043e\u0434\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 IsSpanBlank \u043e\u0431\u0435\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0438\u0437 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SSE-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.\u0421\u0443\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0445\u0440\u0430\u043d\u044f\u0442 \u043b\u0438 \u043e\u043d\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b.\/\/ Check if a span contains only blank characters (space, tab, \\r, \\n)\/\/ SIMD-friendly: processes 8 bytes at a timeinline bool IsSpanBlank(const char* data, size_t len) {  size_t i = 0;  \/\/ Process 8 bytes at a time  for (; i + 8 &lt;= len; i += 8) {    \/\/ For each byte, check if it&#8217;s NOT a blank character    \/\/ Blank chars: space(0x20), tab(0x09), \\n(0x0A), \\r(0x0D)    bool all_blank = true;    for (size_t j = 0; j &lt; 8; ++j) {      unsigned char c = static_cast&lt;unsigned char&gt;(data[i + j]);      bool is_blank = (c == &#8216; &#8216; || c == &#8216;\\t&#8217; || c == &#8216;\\n&#8217; || c == &#8216;\\r&#8217;);      all_blank = all_blank &amp;&amp; is_blank;    }    if (!all_blank) return false;  }  \/\/ Handle remaining bytes  for (; i &lt; len; ++i) {    unsigned char c = static_cast&lt;unsigned char&gt;(data[i]);    if (c != &#8216; &#8216; &amp;&amp; c != &#8216;\\t&#8217; &amp;&amp; c != &#8216;\\n&#8217; &amp;&amp; c != &#8216;\\r&#8217;) {      return false;    }  }  return true;}\u041a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0418\u0418 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c SIMD-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0445\u0432\u043e\u0441\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.\u041c\u043d\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u0430\u0439\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043d\u0435 \u0445\u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.inline bool IsSpanBlank_Simple(const char* data, size_t len) {  for (size_t i = 0; i &lt; len; ++i) {    unsigned char c = static_cast&lt;unsigned char&gt;(data[i]);    if (c != &#8216; &#8216; &amp;&amp; c != &#8216;\\t&#8217; &amp;&amp; c != &#8216;\\n&#8217; &amp;&amp; c != &#8216;\\r&#8217;) {      return false;    }  }  return true;}\u042f \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434. \u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0437\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u044f \u0431\u044b \u043f\u043e\u0448\u0451\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u0445.\u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c, \u044f \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0440\u0435\u0448\u0438\u043b\u0441\u044f. \u042f \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0430\u0436\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0438\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0446\u0435\u043b\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443.\u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u201c\u0412\u043e\u0442! \u0422\u044b \u0441\u043b\u0430\u0431! \u0410 Claude Opus \u0432\u0437\u044f\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b. \u0412\u0437\u044f\u043b \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0443\u043c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u201d.\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0424\u0438\u043b\u0438\u043f\u043f \u043f\u0440\u043e\u0432\u0451\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 GCC \u0438 Clang:\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c 1 000 000 \u0441\u0442\u0440\u043e\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043e\u0442 1 \u0434\u043e 127 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445.\u041f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b. \u0417\u0430\u043c\u0435\u0440\u044f\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.\u0412 \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 -O3. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.\u0411\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0439\u0431-\u043a\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0443\u0447\u0448\u0435? \u041d\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u0410 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0431\u0435\u0437 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0441\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c.\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 \u0442\u043e\u0436\u0435 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0442\u0440\u0435\u043c\u044f \u043d\u043e\u0432\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 MSVC. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c.\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 || \u043d\u0430 |. Short-circuit evaluation \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u0434\u0438\u0442. \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:bool is_blank = (c == &#8216; &#8216; | c == &#8216;\\t&#8217; | c == &#8216;\\n&#8217; | c == &#8216;\\r&#8217;);\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438inline &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-476819","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476819","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=476819"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476819\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=476819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=476819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=476819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}