<?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/zh-cn/tags/%E7%BC%96%E7%A8%8B/</link><description>Recent content in 编程 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Tue, 15 Jul 2025 18:03:03 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>考拉兹猜想</title><link>http://kenji.blog/zh-cn/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</link><pubDate>Tue, 15 Jul 2025 18:03:03 +0900</pubDate><guid>http://kenji.blog/zh-cn/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</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是真的吗玩转考拉兹猜想">“任何数字最终都会变成1”是真的吗？——玩转考拉兹猜想
&lt;/h1>&lt;p>大家好！我是kenji。&lt;/p>
&lt;p>突然问一下，如果你听说“任何数字最终都会变成1的规则”，
会不会觉得有些不可思议？&lt;/p>
&lt;blockquote>
&lt;p>比如19，或者87，甚至1000000也是如此。
按照特定的规则去处理数字，不知为何最后都会收敛到“1”。&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>确实变成了“1”。欢迎回来！&lt;/p>
&lt;hr>
&lt;h2 id="用代码试试看用python写考拉兹猜想">用代码试试看：用Python写考拉兹猜想
&lt;/h2>&lt;p>好了，这种时候写代码测试最快！
让我们用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>顺便说一下，即使从 27 开始，也同样会到达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-python" data-lang="python">&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">27&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;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>诶？那1兆呢，1京呢……？&lt;/p>
&lt;p>能想到这点的你很敏锐。
实际上，用计算机已经验证到了“2的68次方”左右，
&lt;strong>全部都到达了1&lt;/strong>。难以置信……。&lt;/p>
&lt;p>但是，&lt;strong>“全部都会这样”并没有在理论上被证明&lt;/strong>。
这就是数学世界里的“未解决问题”。&lt;/p>
&lt;hr>
&lt;h2 id="考拉兹是谁">考拉兹是谁？
&lt;/h2>&lt;p>读到这里，你肯定会想“考拉兹到底是谁？”吧。
下面就好好介绍一下！&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>“数学还没有成熟到足以解决考拉兹猜想。”&lt;/p>
&lt;/blockquote>
&lt;p>也就是说，人类的数学水平可能还没赶上这个谜团……。&lt;/p>
&lt;hr>
&lt;h2 id="不需要复杂的公式">不需要“复杂的公式”
&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>这能一口气输出“1～20”的考拉兹数列。&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://zh.wikipedia.org/wiki/%e8%80%83%e6%8b%89%e5%85%b9%e7%8c%9c%e6%83%b3" 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>如果想了解更多这种“不可思议的数学×编程”题材，
请随时向我提出“想了解更多”的请求。
之后，我还会介绍黎曼猜想、素数的故事等各种内容！&lt;/p>
&lt;hr>
&lt;p>📮结束！&lt;/p>
&lt;hr></description></item><item><title>使用 Win32API + C++ 编写程序的优缺点</title><link>http://kenji.blog/zh-cn/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/zh-cn/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 在最靠近操作系统的层级上运行，因此几乎没有多余的开销。
其 CPU 和内存的使用效率极高，拥有 &lt;strong>压倒性的执行速度&lt;/strong>。&lt;/p>
&lt;h3 id="极高的灵活性和自由度">极高的灵活性和自由度
&lt;/h3>&lt;p>无论是窗口控制、异步处理、COM 协作还是进程管理等，应用的任何行为都可以 &lt;strong>自行进行精细控制&lt;/strong>。
你也可以构建专用于特定目的的工具，或自制独有的框架等。&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>。
即使在低配置的 PC 或虚拟机环境中也能流畅运行。&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>高 DPI 适配、触摸界面、无障碍功能、深色模式等，&lt;strong>很难应对近年来对 UX（用户体验）的要求&lt;/strong>。
必须逐一手动进行适配，非常费力。&lt;/p>
&lt;h3 id="不支持跨平台">不支持跨平台
&lt;/h3>&lt;p>因为完全是 Windows 专用的 API，&lt;strong>无法移植到 macOS 或 Linux&lt;/strong>。
如果考虑到多平台部署，则需要选择其他技术。&lt;/p>
&lt;h3 id="学习成本极高">学习成本极高
&lt;/h3>&lt;p>必须理解句柄、GDI、COM、OLE 等 &lt;strong>在现代已经不太使用的概念和机制&lt;/strong>。
文档也有很多是旧的，学习需要时间和毅力。&lt;/p>
&lt;hr>
&lt;h2 id="适合的用途">适合的用途
&lt;/h2>&lt;ul>
&lt;li>文件启动器或快捷键辅助等 &lt;strong>轻量级工具&lt;/strong>&lt;/li>
&lt;li>剪贴板操作或 IME 控制等 &lt;strong>系统实用程序&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;ul>
&lt;li>重视现代 UI/UX 的 &lt;strong>面向普通消费者的应用&lt;/strong>&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>OS 控制自由度&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>不依赖 GUI 框架或现代语言，跃入 &lt;code>#include &amp;lt;windows.h&amp;gt;&lt;/code> 的世界——
这种选择，至今依然是有意义的。&lt;/p></description></item><item><title>编程中可用的字体集合</title><link>http://kenji.blog/zh-cn/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/</link><pubDate>Sat, 30 Mar 2024 02:21:31 +0900</pubDate><guid>http://kenji.blog/zh-cn/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/</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>白源 (HackGen) 是由面向编程的英文字体 Hack，与思源黑体的衍生字体源柔黑体合成的编程字体。&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>Migu 1M&lt;/code>，而是将 &lt;code>Inconsolata&lt;/code> 和 &lt;code>Circle M+ 1m&lt;/code> 通过 &lt;code>Ricty&lt;/code> 生成脚本合成的字体。由于不包含 IPA 黑体的字形，可用的汉字字形数量较少，作为交换，可以在 &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>将 Mac OS 标准字体 &lt;code>Osaka&lt;/code> 制作成可以在 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>将 IBM 发布的开源日语字体 &lt;code>IBM Plex Sans JP&lt;/code> 与同样是 IBM Plex 系列的 &lt;code>IBM Plex Mono&lt;/code> 组合而成的编程字体。&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/zh-cn/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/zh-cn/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>支持 C、C++、Java、Ruby、Python、PHP、Perl 等 24 种主要语言的在线执行环境。&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>