<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Программирование on kenji.blog</title><link>http://kenji.blog/ru/tags/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/</link><description>Recent content in Программирование on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Tue, 15 Jul 2025 18:03:03 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/index.xml" rel="self" type="application/rss+xml"/><item><title>Гипотеза Коллатца</title><link>http://kenji.blog/ru/p/collatz-conjecture/</link><pubDate>Tue, 15 Jul 2025 18:03:03 +0900</pubDate><guid>http://kenji.blog/ru/p/collatz-conjecture/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/img.png" alt="Featured image of post Гипотеза Коллатца" />&lt;h1 id="действительно-ли-любое-число-в-конце-концов-становится-1--играем-с-гипотезой-коллатца">&amp;ldquo;Действительно ли любое число в конце концов становится 1?&amp;rdquo; ── Играем с гипотезой Коллатца
&lt;/h1>&lt;p>Всем привет! Это Кенджи.&lt;/p>
&lt;p>Внезапный вопрос: когда вы слышите о &amp;ldquo;правиле, по которому любое число в итоге превращается в 1&amp;rdquo;,
разве это не кажется вам немного странным?&lt;/p>
&lt;blockquote>
&lt;p>Например, 19, или 87, или даже 1000000.
Если вы следуете определенному правилу и манипулируете числами, по какой-то причине они всегда сводятся к &amp;ldquo;1&amp;rdquo;.&lt;/p>
&lt;/blockquote>
&lt;p>Эта сказочная история и есть &lt;strong>гипотеза Коллатца (Collatz Conjecture)&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="для-начала-что-такое-гипотеза-коллатца">Для начала, что такое гипотеза Коллатца?
&lt;/h2>&lt;p>Сначала позвольте мне представить правила.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Старт: выберите любое &lt;strong>положительное целое число&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Операция:&lt;/p>
&lt;ul>
&lt;li>Если четное → делим пополам (n → n / 2)&lt;/li>
&lt;li>Если нечетное → умножаем на 3 и прибавляем 1 (n → 3n + 1)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Если повторять это снова и снова, гипотеза гласит, что &lt;strong>любое число в конечном итоге достигнет 1&lt;/strong>.&lt;/p>
&lt;p>Например, если мы начнем с &lt;code>6&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Оно действительно стало &amp;ldquo;1&amp;rdquo;. С возвращением!&lt;/p>
&lt;hr>
&lt;h2 id="давайте-попробуем-это-в-коде-коллатц-на-python">Давайте попробуем это в коде: Коллатц на Python
&lt;/h2>&lt;p>Что ж, в таких случаях быстрее всего попробовать написать код!
Давайте выведем &amp;ldquo;последовательность Коллатца&amp;rdquo; с помощью Python.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">steps&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Пример: давайте начнем с 19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">19&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>При запуске:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Оно успешно достигает 1.
Пришлось сделать немало крюков, но в итоге мы на финише!&lt;/p>
&lt;p>Кстати, даже если мы начнем с 29, оно достигнет 1 таким же образом.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pythonprint(collatz(29))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>При запуске:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>На это уходит целых 111 шагов!&lt;/p>
&lt;p>Более того, по пути оно иногда раздувается до более чем 9000.
Это тот случай, когда перед финишем делается огромный крюк.&lt;/p>
&lt;hr>
&lt;h2 id="итак-что-же-в-итоге-в-этом-такого-удивительного">Итак, что же в итоге в этом такого удивительного?
&lt;/h2>&lt;p>Удивительное в этой гипотезе то, что:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Хотя это не доказано, похоже, что оно всегда сводится к 1, независимо от того, какое число вы берете&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Вот в чем крутизна.&lt;/p>
&lt;p>А? А как насчет триллиона или квадриллиона&amp;hellip;?&lt;/p>
&lt;p>Если вы подумали об этом, то вы очень проницательны.
На самом деле, с помощью компьютеров это было проверено вплоть до &amp;ldquo;2 в 68-й степени&amp;rdquo;,
и &lt;strong>все они достигают 1&lt;/strong>. Невероятно&amp;hellip;&lt;/p>
&lt;p>Но &lt;strong>не было теоретически доказано, что &amp;ldquo;все будет именно так&amp;rdquo;&lt;/strong>.
Вот что называется &amp;ldquo;нерешенной проблемой&amp;rdquo; в мире математики.&lt;/p>
&lt;hr>
&lt;h2 id="кто-такой-мистер-коллатц">Кто такой мистер Коллатц?
&lt;/h2>&lt;p>Итак, дочитав до этого места, вы, возможно, спросите: &amp;ldquo;Кто вообще такой Коллатц?&amp;rdquo;
Я представлю его как следует!&lt;/p>
&lt;ul>
&lt;li>Имя: &lt;strong>Лотар Коллатц (Lothar Collatz)&lt;/strong>&lt;/li>
&lt;li>Гражданство: Германия&lt;/li>
&lt;li>Годы жизни: 1910 - 1990&lt;/li>
&lt;li>Профессия: Математик (активно работал в области функционального анализа и теории чисел)&lt;/li>
&lt;/ul>
&lt;p>Он предложил эту гипотезу в 1937 году,
и с тех пор, на протяжении более 80 лет, &lt;strong>никто не смог ее ни доказать, ни опровергнуть&lt;/strong>.&lt;/p>
&lt;p>Кстати, эта проблема настолько проста, но в то же время невероятно глубока,
что даже Пол Эрдёш (супер-известный математик) сказал нечто подобное.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Математика еще не созрела для решения проблемы Коллатца.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Иными словами, существует теория, что человеческая математика еще не доросла до этой загадки&amp;hellip;&lt;/p>
&lt;hr>
&lt;h2 id="сложные-формулы-не-нужны">&amp;ldquo;Сложные формулы&amp;rdquo; не нужны
&lt;/h2>&lt;p>Прелесть гипотезы Коллатца в том, что &lt;strong>каждый может с ней поиграть&lt;/strong>.&lt;/p>
&lt;p>Вам нужны только ручка и бумага.
Если вы напишете код на Python, вы сможете проверять это автоматически.
И при этом &lt;strong>передовые математики всерьез ломают над ней голову&lt;/strong>.&lt;/p>
&lt;p>Разве это не захватывающе?&lt;/p>
&lt;hr>
&lt;h2 id="бонус-код-для-массовой-проверки">Бонус: Код для массовой проверки
&lt;/h2>&lt;p>Я также приложу код для проверки множества чисел за один раз.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">21&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> (количество шагов: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Этот код сразу выведет последовательности Коллатца для чисел от &amp;ldquo;1 до 20&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="вывод-этот-мир-действительно-странный">Вывод: Этот мир действительно странный
&lt;/h2>&lt;p>Итак, это гипотеза Коллатца.&lt;/p>
&lt;ul>
&lt;li>Хотя она очень проста&lt;/li>
&lt;li>Никто не может ее доказать&lt;/li>
&lt;li>Это огромная проблема в математическом мире&lt;/li>
&lt;/ul>
&lt;p>Она оказалась чем-то вроде сгустка тайн.&lt;/p>
&lt;p>Даже новички в программировании могут попробовать ее, так что, пожалуйста, поиграйте!&lt;/p>
&lt;hr>
&lt;h2 id="рекомендуемые-ссылки-для-тех-кому-интересно">Рекомендуемые ссылки (для тех, кому интересно)
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://ru.wikipedia.org/wiki/%d0%93%d0%b8%d0%bf%d0%be%d1%82%d0%b5%d0%b7%d0%b0_%d0%9a%d0%be%d0%bb%d0%bb%d0%b0%d1%82%d1%86%d0%b0" target="_blank" rel="noopener"
>Википедия: Гипотеза Коллатца&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://arxiv.org/abs/1909.03562" target="_blank" rel="noopener"
>Статья Теренса Тао (на английском)&lt;/a>&lt;/li>
&lt;li>Также может быть интересно создать визуализированную версию на Python! (Если будет запрос, я ее сделаю)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Если вы хотите узнать больше историй о &amp;ldquo;таинственной математике × программировании&amp;rdquo;,
пожалуйста, не стесняйтесь писать &amp;ldquo;расскажи больше&amp;rdquo;.
В будущем я расскажу вам о гипотезе Римана, простых числах и многом другом!&lt;/p>
&lt;hr>
&lt;p>📮 Конец!&lt;/p>
&lt;hr></description></item><item><title>Преимущества и недостатки создания программ с использованием Win32API + C++</title><link>http://kenji.blog/ru/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</link><pubDate>Sat, 12 Jul 2025 12:30:35 +0900</pubDate><guid>http://kenji.blog/ru/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/img_1.png" alt="Featured image of post Преимущества и недостатки создания программ с использованием Win32API + C++" />&lt;h1 id="привлекательность-и-проблемы-разработки-с-win32api--c">Привлекательность и проблемы разработки с Win32API + C++
&lt;/h1>&lt;p>Для тех, кто хочет освоить разработку приложений под Windows, &lt;strong>Win32API + C++&lt;/strong> по-прежнему остается мощным выбором.
Эта комбинация, позволяющая взаимодействовать с ОС на минимальном расстоянии, сочетает в себе высокую скорость и гибкость.&lt;/p>
&lt;p>С другой стороны, поскольку она сильно отличается от современных стилей разработки, для ее освоения потребуется решимость.&lt;/p>
&lt;p>На этой странице, с точки зрения &lt;strong>действующего разработчика приложений под Windows&lt;/strong> , мы наглядно объясним ее преимущества и недостатки.&lt;/p>
&lt;hr>
&lt;h2 id="преимущества">Преимущества
&lt;/h2>&lt;h3 id="сверхбыстрое-нативное-выполнение">Сверхбыстрое нативное выполнение
&lt;/h3>&lt;p>Поскольку C++ и Win32API работают на уровне, наиболее близком к ОС, лишних накладных расходов практически нет.
Эффективность использования процессора и памяти чрезвычайно высока, и она может похвастаться &lt;strong>подавляющей скоростью выполнения&lt;/strong> .&lt;/p>
&lt;h3 id="высокая-гибкость-и-свобода">Высокая гибкость и свобода
&lt;/h3>&lt;p>Вы можете &lt;strong>самостоятельно и детально контролировать&lt;/strong> любое поведение приложения, такое как управление окнами, асинхронная обработка, интеграция COM и управление процессами.
Также возможно создание специализированных инструментов и собственных фреймворков.&lt;/p>
&lt;h3 id="легкость-распространения-без-среды-выполнения">Легкость распространения без среды выполнения
&lt;/h3>&lt;p>Поскольку не требуются внешние среды выполнения, такие как .NET или Java, приложение &lt;strong>можно распространять в виде одного исполняемого файла&lt;/strong> .
Проблемы при распространении возникают редко, и привлекает то, что его легко запустить даже без установщика.&lt;/p>
&lt;h3 id="возможность-создания-легковесных-приложений">Возможность создания легковесных приложений
&lt;/h3>&lt;p>Поскольку требуется лишь минимальная конфигурация, характерной чертой является то, что &lt;strong>объем используемой памяти очень мал&lt;/strong> .
Приложение будет комфортно работать даже на ПК с низкими характеристиками и в средах виртуальных машин.&lt;/p>
&lt;h3 id="возможен-расширенный-контроль-на-уровне-ос">Возможен расширенный контроль на уровне ОС
&lt;/h3>&lt;p>Также можно реализовать &lt;strong>управление, которое сложно выполнить с помощью обычных языков и библиотек&lt;/strong> , такое как глобальные хуки мыши и клавиатуры, тонкая настройка стилей окон и операции с системным меню.&lt;/p>
&lt;hr>
&lt;h2 id="недостатки">Недостатки
&lt;/h2>&lt;h3 id="низкая-эффективность-разработки">Низкая эффективность разработки
&lt;/h3>&lt;p>Создание графического интерфейса пользователя (GUI) также должно выполняться полностью с помощью кода, и &lt;strong>для создания одной кнопки могут потребоваться десятки строк кода&lt;/strong> .
Внесение изменений при перепроектировании также затруднено, а производительность ниже по сравнению с разработкой с использованием фреймворков UI.&lt;/p>
&lt;h3 id="склонность-к-снижению-ремонтопригодности">Склонность к снижению ремонтопригодности
&lt;/h3>&lt;p>Содержит много &lt;strong>кода со специальной структурой&lt;/strong> , такого как циклы сообщений и оконные процедуры, что затрудняет его чтение и повторное использование.
Есть также аспекты, которые делают его непригодным для командной разработки или долгосрочной поддержки.&lt;/p>
&lt;h3 id="адаптация-к-современному-ui-хлопотна">Адаптация к современному UI хлопотна
&lt;/h3>&lt;p>&lt;strong>Сложно адаптироваться к UX, востребованному в последние годы&lt;/strong> , такому как поддержка высокого DPI, сенсорных интерфейсов, специальных возможностей и темного режима.
Каждый из них нужно обрабатывать вручную, что требует больших усилий.&lt;/p>
&lt;h3 id="не-поддерживает-кроссплатформенность">Не поддерживает кроссплатформенность
&lt;/h3>&lt;p>Поскольку это API исключительно для Windows, его &lt;strong>невозможно перенести на macOS или Linux&lt;/strong> .
Если предполагается развертывание на нескольких платформах, потребуется выбрать другую технологию.&lt;/p>
&lt;h3 id="очень-высокая-стоимость-обучения">Очень высокая стоимость обучения
&lt;/h3>&lt;p>Вы должны понимать &lt;strong>концепции и механизмы, которые редко используются сегодня&lt;/strong> , такие как дескрипторы (handles), GDI, COM и OLE.
Многие документы также устарели, а обучение требует времени и терпения.&lt;/p>
&lt;hr>
&lt;h2 id="подходящие-применения">Подходящие применения
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Легковесные инструменты&lt;/strong> , такие как средства запуска файлов и помощники по горячим клавишам&lt;/li>
&lt;li>&lt;strong>Системные утилиты&lt;/strong> , такие как управление буфером обмена и управление IME&lt;/li>
&lt;li>&lt;strong>Приложения для нативного контроля&lt;/strong> , такие как глобальные хуки и захват окон&lt;/li>
&lt;li>&lt;strong>Вспомогательные инструменты для драйверов&lt;/strong> , тесно связанные с аппаратным обеспечением&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="неподходящие-применения">Неподходящие применения
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Приложения для обычных потребителей&lt;/strong> , где важен современный UI / UX&lt;/li>
&lt;li>&lt;strong>Создание прототипов и разработка MVP&lt;/strong> , где приоритетом является скорость&lt;/li>
&lt;li>&lt;strong>Крупномасштабные проекты&lt;/strong> , предполагающие долгосрочную эксплуатацию и командную разработку&lt;/li>
&lt;li>&lt;strong>Кроссплатформенные продукты&lt;/strong> , которые должны поддерживать несколько ОС&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="итоговая-оценка">Итоговая оценка
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Критерий&lt;/th>
&lt;th>Оценка&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Скорость выполнения&lt;/td>
&lt;td>◎ Очень быстро&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Эффективность памяти&lt;/td>
&lt;td>◎ Отлично&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Скорость разработки&lt;/td>
&lt;td>× Медленно&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ремонтопригодность&lt;/td>
&lt;td>× Низкая&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Кроссплатформенность&lt;/td>
&lt;td>× Не поддерживается&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Поддержка современного UI&lt;/td>
&lt;td>× Слабая&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Свобода контроля ОС&lt;/td>
&lt;td>◎ Подавляюще высокая&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="заключение">Заключение
&lt;/h2>&lt;p>&lt;strong>Win32API + C++ — это инструмент, подходящий для разработчиков, которые «хотят обрабатывать все в ОС самостоятельно».&lt;/strong>
Хотя его мощь огромна, обучение и использование требуют соответствующей решимости.&lt;/p>
&lt;blockquote>
&lt;p>Стоит ли делать такой «осознанный выбор», зависит от характера приложения, которое вы стремитесь создать.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>Погрузиться в мир &lt;code>#include &amp;lt;windows.h&amp;gt;&lt;/code> , не полагаясь на фреймворки GUI или современные языки —
этот выбор по-прежнему имеет смысл.&lt;/p></description></item><item><title>Коллекция шрифтов для программирования</title><link>http://kenji.blog/ru/p/%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F-%D1%88%D1%80%D0%B8%D1%84%D1%82%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/</link><pubDate>Sat, 30 Mar 2024 02:21:31 +0900</pubDate><guid>http://kenji.blog/ru/p/%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F-%D1%88%D1%80%D0%B8%D1%84%D1%82%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/img.png" alt="Featured image of post Коллекция шрифтов для программирования" />&lt;h2 id="jetbrains-mono">JetBrains Mono
&lt;/h2>&lt;p>Это шрифт для программирования с открытым исходным кодом, предоставляемый JetBrains.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://www.jetbrains.com/ja-jp/lp/mono/" target="_blank" rel="noopener"
>https://www.jetbrains.com/ja-jp/lp/mono/&lt;/a>&lt;/p>
&lt;h2 id="hackgen">HackGen
&lt;/h2>&lt;p>Hakugen (HackGen) — это шрифт для программирования, созданный путем объединения английского шрифта Hack для программирования и Genjyuu Gothic, производного от Source Han Sans.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://github.com/yuru7/HackGen/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/HackGen/releases&lt;/a>&lt;/p>
&lt;h2 id="ricty-diminished">Ricty Diminished
&lt;/h2>&lt;p>&lt;code>Ricty Diminished&lt;/code> — это родственный шрифт &lt;code>Ricty&lt;/code>, созданный путем объединения &lt;code>Inconsolata&lt;/code> и &lt;code>Circle M+ 1m&lt;/code> с помощью скрипта генерации &lt;code>Ricty&lt;/code> вместо &lt;code>Inconsolata&lt;/code> и &lt;code>Migu 1M&lt;/code>. Поскольку он не содержит глифов IPA Gothic, количество используемых глифов кандзи невелико, но вместо этого его можно распространять по лицензии &lt;code>SIL Open Font License&lt;/code>.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://rictyfonts.github.io/diminished" target="_blank" rel="noopener"
>https://rictyfonts.github.io/diminished&lt;/a>&lt;/p>
&lt;h2 id="cica">Cica
&lt;/h2>&lt;p>Шрифт для программирования, использующий &lt;code>Hack&lt;/code> + &lt;code>DejaVu Sans Mono&lt;/code> для английских букв, цифр и символов.
Для других символов используется &lt;code>Rounded Mgen+&lt;/code>.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://github.com/miiton/Cica/releases" target="_blank" rel="noopener"
>https://github.com/miiton/Cica/releases&lt;/a>&lt;/p>
&lt;p>Ссылка:&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://sourcefoundry.org/hack/" target="_blank" rel="noopener"
>Hack&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://dejavu-fonts.github.io/" target="_blank" rel="noopener"
>DejaVu Sans Mono&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="http://jikasei.me/font/rounded-mgenplus/" target="_blank" rel="noopener"
>Rounded Mgen+&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="migu">Migu
&lt;/h2>&lt;p>Это составной шрифт M+ и IPA.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://itouhiro.github.io/mixfont-mplus-ipa/migu/" target="_blank" rel="noopener"
>https://itouhiro.github.io/mixfont-mplus-ipa/migu/&lt;/a>&lt;/p>
&lt;h2 id="osaka">Osaka
&lt;/h2>&lt;p>Это шрифт, который позволяет использовать &lt;code>Osaka&lt;/code>, стандартный шрифт Mac OS, в Windows.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/" target="_blank" rel="noopener"
>http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/&lt;/a>&lt;/p>
&lt;h2 id="plemoljp">PlemolJP
&lt;/h2>&lt;p>Это шрифт для программирования, который сочетает в себе японский шрифт с открытым исходным кодом &lt;code>IBM Plex Sans JP&lt;/code>, выпущенный IBM, и &lt;code>IBM Plex Mono&lt;/code> из серии IBM Plex.&lt;/p>
&lt;p>Скачать: &lt;a class="link" href="https://github.com/yuru7/PlemolJP/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/PlemolJP/releases&lt;/a>&lt;/p></description></item><item><title>【По языкам】Сводка сред выполнения кода онлайн</title><link>http://kenji.blog/ru/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 09 Apr 2023 14:01:00 +0900</pubDate><guid>http://kenji.blog/ru/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/img.png" alt="Featured image of post 【По языкам】Сводка сред выполнения кода онлайн" />&lt;h2 id="python">Python
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://colab.research.google.com/#create=true" target="_blank" rel="noopener"
>Google Colaboratory&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Google Colaboratory — это среда выполнения Python, которая может запускаться онлайн.&lt;/p>
&lt;ul>
&lt;li>Также доступно использование GPU.&lt;/li>
&lt;li>С помощью блокнотов Colab можно писать исполняемый код и форматированный текст (включая изображения, HTML, LaTeX и т. д.) в одном документе.&lt;/li>
&lt;/ul>
&lt;p>Основан на Jupyter Notebook.&lt;/p>
&lt;h2 id="rust">Rust
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021" target="_blank" rel="noopener"
>Rust Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="javascript">JavaScript
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://playcode.io/" target="_blank" rel="noopener"
>Javascript Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="java">Java
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/ja/projects/new?language=java" target="_blank" rel="noopener"
>paiza.IO Online Java compiler&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="haskell">Haskell
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.haskell.org/" target="_blank" rel="noopener"
>Haskell Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="swift">Swift
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://online.swiftplayground.run/" target="_blank" rel="noopener"
>Online Swift Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="c">C++
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.onlinegdb.com/online_c&amp;#43;&amp;#43;_compiler" target="_blank" rel="noopener"
>C++ 14&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="другое">Другое
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://aws.amazon.com/jp/cloud9/" target="_blank" rel="noopener"
>AWS Cloud9&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Онлайн-интегрированная среда разработки, предоставляемая Amazon AWS. Поставляется с предварительно упакованными инструментами для более чем 40 языков программирования, таких как Node.js, JavaScript, Python, PHP, Ruby, Go, C++ и других.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://vscode.dev/" target="_blank" rel="noopener"
>Visual Studio Code for the Web&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Онлайн-среда разработки от Microsoft. Однако невозможно выполнять или отлаживать языки, требующие компиляции.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/projects/CGAcQLfW-IOXYy8Dq2OHBw?locale=ja-jp" target="_blank" rel="noopener"
>paiza.IO&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Онлайн-среда выполнения, поддерживающая 24 основных языка, включая C, C++, Java, Ruby, Python, PHP, Perl и др.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codepen.io/" target="_blank" rel="noopener"
>CodePen&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Онлайн-среда выполнения для HTML, CSS и JavaScript.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codeanywhere.com/" target="_blank" rel="noopener"
>codeanywhere&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Онлайн IDE. Вы можете делиться кодом и общаться в чате.&lt;/p></description></item></channel></rss>