<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=Learn-mindustry-logic-A4-Advanced</id>
	<title>Learn-mindustry-logic-A4-Advanced - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=Learn-mindustry-logic-A4-Advanced"/>
	<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;action=history"/>
	<updated>2026-04-04T09:21:51Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3599&amp;oldid=prev</id>
		<title>Fpzwsl：​清空全部内容</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3599&amp;oldid=prev"/>
		<updated>2026-03-05T10:40:02Z</updated>

		<summary type="html">&lt;p&gt;清空全部内容&lt;/p&gt;
&lt;a href=&quot;https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;amp;diff=3599&amp;amp;oldid=3588&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>Fpzwsl</name></author>
	</entry>
	<entry>
		<id>https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3588&amp;oldid=prev</id>
		<title>2026年3月4日 (三) 12:08 Fpzwsl</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3588&amp;oldid=prev"/>
		<updated>2026-03-04T12:08:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年3月4日 (三) 20:08的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 引言 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 引言 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;这是《逻辑教学》的超完整版 &lt;/del&gt;(进阶篇), 适用于已经掌握基础语句的玩家.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;这是《逻辑教学》的完整版 &lt;/ins&gt;(进阶篇), 适用于已经掌握基础语句的玩家.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程不是语句词典, 而是偏工程与实战的写法总结.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程不是语句词典, 而是偏工程与实战的写法总结.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mdtwiki_stnglove:diff:1.41:old-3587:rev-3588:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Fpzwsl</name></author>
	</entry>
	<entry>
		<id>https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3587&amp;oldid=prev</id>
		<title>Fpzwsl：​创建页面，内容为“__NOTOC__ &lt;div class=&quot;mdtLogicTutorial&quot;&gt;&lt;span id=&quot;引言&quot;&gt;&lt;/span&gt; == 引言 ==  这是《逻辑教学》的超完整版 (进阶篇), 适用于已经掌握基础语句的玩家.  本教程不是语句词典, 而是偏工程与实战的写法总结.  基线版本: * Mindustry 155   ----  &lt;span id=&quot;执行模型与调试&quot;&gt;&lt;/span&gt; == 执行模型与调试 ==  &lt;span id=&quot;执行四步&quot;&gt;&lt;/span&gt; === 执行四步 ===  逻辑运行可抽象为四步&lt;sup&gt;2&lt;/sup&gt;:…”</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=Learn-mindustry-logic-A4-Advanced&amp;diff=3587&amp;oldid=prev"/>
		<updated>2026-03-04T12:06:30Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“__NOTOC__ &amp;lt;div class=&amp;quot;mdtLogicTutorial&amp;quot;&amp;gt;&amp;lt;span id=&amp;quot;引言&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == 引言 ==  这是《逻辑教学》的超完整版 (进阶篇), 适用于已经掌握基础语句的玩家.  本教程不是语句词典, 而是偏工程与实战的写法总结.  基线版本: * Mindustry 155   ----  &amp;lt;span id=&amp;quot;执行模型与调试&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == 执行模型与调试 ==  &amp;lt;span id=&amp;quot;执行四步&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; === 执行四步 ===  逻辑运行可抽象为四步&amp;lt;sup&amp;gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;/a&gt;&amp;lt;/sup&amp;gt;:…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;mdtLogicTutorial&amp;quot;&amp;gt;&amp;lt;span id=&amp;quot;引言&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 引言 ==&lt;br /&gt;
&lt;br /&gt;
这是《逻辑教学》的超完整版 (进阶篇), 适用于已经掌握基础语句的玩家.&lt;br /&gt;
&lt;br /&gt;
本教程不是语句词典, 而是偏工程与实战的写法总结.&lt;br /&gt;
&lt;br /&gt;
基线版本:&lt;br /&gt;
* Mindustry 155&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;执行模型与调试&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 执行模型与调试 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;执行四步&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 执行四步 ===&lt;br /&gt;
&lt;br /&gt;
逻辑运行可抽象为四步&amp;lt;sup&amp;gt;[[#fn-2|2]]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# 读取 &amp;lt;code&amp;gt;@counter&amp;lt;/code&amp;gt; 指向语句&lt;br /&gt;
# &amp;lt;code&amp;gt;@counter += 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# 执行被读取语句&lt;br /&gt;
# 回到 1&lt;br /&gt;
&lt;br /&gt;
这条规则解释了:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt; 的本质是改写下一条语句位置&lt;br /&gt;
* &amp;lt;code&amp;gt;wait/stop&amp;lt;/code&amp;gt; 的“卡住”是通过 &amp;lt;code&amp;gt;counter-- + yield&amp;lt;/code&amp;gt; 实现&lt;br /&gt;
* 所有函数/跳表都能用 &amp;lt;code&amp;gt;@counter&amp;lt;/code&amp;gt; 手工实现&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;变量表调试法&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 变量表调试法 ===&lt;br /&gt;
&lt;br /&gt;
建议你固定三层调试变量:&lt;br /&gt;
&lt;br /&gt;
* 控制层: &amp;lt;code&amp;gt;state phase step&amp;lt;/code&amp;gt;&lt;br /&gt;
* 数据层: &amp;lt;code&amp;gt;in out tmp err&amp;lt;/code&amp;gt;&lt;br /&gt;
* 时序层: &amp;lt;code&amp;gt;tick heartbeat watchdog&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
典型调试输出模板:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print &amp;quot;s=&amp;quot;; print state&lt;br /&gt;
print &amp;quot; p=&amp;quot;; print phase&lt;br /&gt;
print &amp;quot; t=&amp;quot;; print tick&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mdtMarkdownAlert mdtMarkdownAlert-note&amp;quot;&amp;gt;&lt;br /&gt;
变量表刷新频率低于逻辑执行频率, 快速跳转下会误读 @counter.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;最小监控框架&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 最小监控框架 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;心跳&amp;#039;&amp;#039;&amp;#039; 是什么: 持续变化的计数值。作用: 判断逻辑是否仍在运行。&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;卡死&amp;#039;&amp;#039;&amp;#039; 是什么: 逻辑未崩溃但长期不推进。作用: 作为触发恢复的判据。&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;看门狗&amp;#039;&amp;#039;&amp;#039; 是什么: 监控“是否长期无进展”的计数器。作用: 超时后触发重置或降级。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 监控心跳和卡死&lt;br /&gt;
op add heartbeat heartbeat 1&lt;br /&gt;
op mod heartbeat heartbeat 1000000&lt;br /&gt;
&lt;br /&gt;
op add watchdog watchdog 1&lt;br /&gt;
jump wd_ok lessThan watchdog 600&lt;br /&gt;
    print &amp;quot;watchdog trip&amp;quot;&lt;br /&gt;
    printflush message1&lt;br /&gt;
    set watchdog 0&lt;br /&gt;
wd_ok:&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;进阶控制流-基础&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 进阶控制流-基础 ==&lt;br /&gt;
&lt;br /&gt;
这一章只做“衔接”, 不再重复基础控制流定义。&lt;br /&gt;
&lt;br /&gt;
以下基础结构已移动到基础教程《逻辑教学.wiki》中的“控制流基础补充”章节:&lt;br /&gt;
&lt;br /&gt;
* skip&lt;br /&gt;
* if-else&lt;br /&gt;
* do-while&lt;br /&gt;
* while&lt;br /&gt;
* gwhile&lt;br /&gt;
&lt;br /&gt;
进阶篇只保留工程侧规则:&lt;br /&gt;
&lt;br /&gt;
* 多层循环必须用唯一标签前缀, 防止跳错行&lt;br /&gt;
* break/continue 跳转必须显式写“目标层级”&lt;br /&gt;
* 所有循环都要能从外部条件中断&lt;br /&gt;
&lt;br /&gt;
多层循环命名模板:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# outer loop&lt;br /&gt;
O_LOOP:&lt;br /&gt;
    # inner loop&lt;br /&gt;
I_LOOP:&lt;br /&gt;
        jump I_CONT lessThan x 0&lt;br /&gt;
        jump I_BREAK equal innerStop true&lt;br /&gt;
        # inner body...&lt;br /&gt;
    I_CONT:&lt;br /&gt;
        # inner tail...&lt;br /&gt;
    jump I_LOOP lessThan i 10&lt;br /&gt;
I_BREAK:&lt;br /&gt;
    jump O_BREAK equal outerStop true&lt;br /&gt;
    # outer tail...&lt;br /&gt;
jump O_LOOP lessThan o 5&lt;br /&gt;
O_BREAK:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;进阶控制流-选择&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 进阶控制流-选择 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;跳表基础&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 跳表基础 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;跳表&amp;#039;&amp;#039;&amp;#039; 是什么: 用 @counter 偏移把输入映射到分支入口。作用: 用常数时间做多分支分派。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# sel in [0,2]&lt;br /&gt;
op add @counter @counter sel&lt;br /&gt;
jump C0 always 0 0&lt;br /&gt;
jump C1 always 0 0&lt;br /&gt;
jump C2 always 0 0&lt;br /&gt;
C0:&lt;br /&gt;
    print &amp;quot;0&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
C1:&lt;br /&gt;
    print &amp;quot;1&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
C2:&lt;br /&gt;
    print &amp;quot;2&amp;quot;&lt;br /&gt;
END:&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;跳表防越界&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 跳表防越界 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# clamp sel to [0,2]&lt;br /&gt;
op max sel sel 0&lt;br /&gt;
op min sel sel 2&lt;br /&gt;
op add @counter @counter sel&lt;br /&gt;
jump C0 always 0 0&lt;br /&gt;
jump C1 always 0 0&lt;br /&gt;
jump C2 always 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;等长块分派&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 等长块分派 ===&lt;br /&gt;
&lt;br /&gt;
每块长度固定时, 可减少子表行数:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# len=4&lt;br /&gt;
op mul off idx 4&lt;br /&gt;
op add @counter @counter off&lt;br /&gt;
    print &amp;quot;A&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
    noop&lt;br /&gt;
    noop&lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;B&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
    noop&lt;br /&gt;
    noop&lt;br /&gt;
END:&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;匹配守卫&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 匹配守卫 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;匹配守卫&amp;#039;&amp;#039;&amp;#039; 是什么: case 之前的额外条件跳转。作用: 在不增加主分派复杂度的前提下细化命中条件。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# case 0 if a&amp;lt;b&lt;br /&gt;
op mul k n 2&lt;br /&gt;
op add @counter @counter k&lt;br /&gt;
    jump C0_G lessThan a b&lt;br /&gt;
    jump C0 always 0 0&lt;br /&gt;
    jump C1 always 0 0&lt;br /&gt;
C0_G:&lt;br /&gt;
    print &amp;quot;0 guard&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
C0:&lt;br /&gt;
    print &amp;quot;0&amp;quot;&lt;br /&gt;
    jump END always 0 0&lt;br /&gt;
C1:&lt;br /&gt;
    print &amp;quot;1&amp;quot;&lt;br /&gt;
END:&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;复杂条件&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 复杂条件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;逻辑代数定义&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 逻辑代数定义 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 形式&lt;br /&gt;
! 名称&lt;br /&gt;
! 说明&lt;br /&gt;
|-&lt;br /&gt;
| !A&lt;br /&gt;
| 非&lt;br /&gt;
| 反转条件&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;amp;&amp;amp; B&lt;br /&gt;
| 短路与&lt;br /&gt;
| A假时不看B&lt;br /&gt;
|-&lt;br /&gt;
| A || B&lt;br /&gt;
| 短路或&lt;br /&gt;
| A真时不看B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;基本反转表&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 基本反转表 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 原&lt;br /&gt;
! 反&lt;br /&gt;
|-&lt;br /&gt;
| lessThan&lt;br /&gt;
| greaterThanEq&lt;br /&gt;
|-&lt;br /&gt;
| lessThanEq&lt;br /&gt;
| greaterThan&lt;br /&gt;
|-&lt;br /&gt;
| greaterThan&lt;br /&gt;
| lessThanEq&lt;br /&gt;
|-&lt;br /&gt;
| greaterThanEq&lt;br /&gt;
| lessThan&lt;br /&gt;
|-&lt;br /&gt;
| equal&lt;br /&gt;
| notEqual&lt;br /&gt;
|-&lt;br /&gt;
| notEqual&lt;br /&gt;
| equal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;德摩根定律&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 德摩根定律 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;!(A &amp;amp;&amp;amp; B) = (!A) || (!B)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;!(A || B) = (!A) &amp;amp;&amp;amp; (!B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;构建算法&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 构建算法 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def build(cond, target):&lt;br /&gt;
    if cond.type == AND:&lt;br /&gt;
        tmp = newTag()&lt;br /&gt;
        build(not cond.left, tmp)&lt;br /&gt;
        build(cond.right, target)&lt;br /&gt;
        add(tmp)&lt;br /&gt;
    elif cond.type == OR:&lt;br /&gt;
        build(cond.left, target)&lt;br /&gt;
        build(cond.right, target)&lt;br /&gt;
    else:&lt;br /&gt;
        add(jump target cond)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;实战示例-复杂条件&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 实战示例-复杂条件 ===&lt;br /&gt;
&lt;br /&gt;
目标: &amp;lt;code&amp;gt;(a&amp;amp;lt;b &amp;amp;&amp;amp; c&amp;amp;lt;d) || e&amp;amp;lt;f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jump T1 greaterThanEq a b&lt;br /&gt;
jump TARGET lessThan c d&lt;br /&gt;
T1:&lt;br /&gt;
jump TARGET lessThan e f&lt;br /&gt;
print &amp;quot;false&amp;quot;&lt;br /&gt;
TARGET:&lt;br /&gt;
print &amp;quot;true&amp;quot;&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;函数系统-非递归&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 函数系统-非递归 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;函数组成&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 函数组成 ===&lt;br /&gt;
&lt;br /&gt;
# 入口跳过&lt;br /&gt;
# 函数体&lt;br /&gt;
# 返回语句 &amp;lt;code&amp;gt;set @counter ret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jump DEF_END always 0 0&lt;br /&gt;
fn_print:&lt;br /&gt;
    print msg&lt;br /&gt;
    set @counter ret&lt;br /&gt;
DEF_END:&lt;br /&gt;
&lt;br /&gt;
set msg &amp;quot;Hello&amp;quot;&lt;br /&gt;
op add ret @counter 1&lt;br /&gt;
jump fn_print always 0 0&lt;br /&gt;
&lt;br /&gt;
set msg &amp;quot;World&amp;quot;&lt;br /&gt;
op add ret @counter 1&lt;br /&gt;
jump fn_print always 0 0&lt;br /&gt;
&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;函数参数约定&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 函数参数约定 ===&lt;br /&gt;
&lt;br /&gt;
推荐约定:&lt;br /&gt;
&lt;br /&gt;
* 入参: &amp;lt;code&amp;gt;arg1 arg2 ...&amp;lt;/code&amp;gt;&lt;br /&gt;
* 出参: &amp;lt;code&amp;gt;retv&amp;lt;/code&amp;gt;&lt;br /&gt;
* 返回地址: &amp;lt;code&amp;gt;ret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;函数复用案例&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 函数复用案例 ===&lt;br /&gt;
&lt;br /&gt;
平方函数:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jump D_END always 0 0&lt;br /&gt;
fn_sqr:&lt;br /&gt;
    op mul retv arg1 arg1&lt;br /&gt;
    set @counter ret&lt;br /&gt;
D_END:&lt;br /&gt;
&lt;br /&gt;
set arg1 12&lt;br /&gt;
op add ret @counter 1&lt;br /&gt;
jump fn_sqr always 0 0&lt;br /&gt;
print retv&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;函数系统-递归与栈&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 函数系统-递归与栈 ==&lt;br /&gt;
&lt;br /&gt;
递归函数必须解决两个问题:&lt;br /&gt;
&lt;br /&gt;
# 返回地址会多层嵌套&lt;br /&gt;
# 中间变量会被后续递归覆盖&lt;br /&gt;
&lt;br /&gt;
所以要用内存做调用栈&amp;lt;sup&amp;gt;[[#fn-3|3]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;栈模型&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 栈模型 ===&lt;br /&gt;
&lt;br /&gt;
建议每帧栈帧结构:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 偏移&lt;br /&gt;
! 含义&lt;br /&gt;
|-&lt;br /&gt;
| +0&lt;br /&gt;
| 返回地址&lt;br /&gt;
|-&lt;br /&gt;
| +1&lt;br /&gt;
| 参数n&lt;br /&gt;
|-&lt;br /&gt;
| +2&lt;br /&gt;
| 临时值tmp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;递归框架&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 递归框架 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 仅示意骨架&lt;br /&gt;
set sp -1&lt;br /&gt;
jump DEF_END always 0 0&lt;br /&gt;
fib:&lt;br /&gt;
    # push ret&lt;br /&gt;
    # push n&lt;br /&gt;
    # recurse&lt;br /&gt;
    # pop&lt;br /&gt;
    set @counter ret&lt;br /&gt;
DEF_END:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;尾递归优化&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 尾递归优化 ===&lt;br /&gt;
&lt;br /&gt;
尾递归可改循环, 大幅降复杂度和 bug 风险.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# tail recursion -&amp;gt; loop&lt;br /&gt;
LOOP:&lt;br /&gt;
    # body&lt;br /&gt;
jump LOOP lessThan i n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;多处理器协作协议&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 多处理器协作协议 ==&lt;br /&gt;
&lt;br /&gt;
超大逻辑应拆分为多个处理器协作.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;协议字段&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 协议字段 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;协议&amp;#039;&amp;#039;&amp;#039; 是什么: 多处理器共享内存字段和时序规则的约定。作用: 避免协作时读写歧义与乱序。&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;消费者心跳&amp;#039;&amp;#039;&amp;#039; 是什么: 由消费者更新的心跳字段。作用: 让生产者判断消费者是否卡住。&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ACK&amp;#039;&amp;#039;&amp;#039; 是什么: 命令处理完成回执值。作用: 让发送方安全进入下一步。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 地址&lt;br /&gt;
! 字段&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 协议版本&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 生产者心跳&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 消费者心跳&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 命令码&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 参数A&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 参数B&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ACK&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 错误码&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;握手流程&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 握手流程 ===&lt;br /&gt;
&lt;br /&gt;
# Producer 写 cmd + args&lt;br /&gt;
# Consumer 读取并执行&lt;br /&gt;
# Consumer 写 ack=cmd&lt;br /&gt;
# Producer 校验 ack&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;协作模板&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 协作模板 ===&lt;br /&gt;
&lt;br /&gt;
生产者:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
write 1 bank1 0&lt;br /&gt;
op add hb hb 1&lt;br /&gt;
write hb bank1 1&lt;br /&gt;
write 200 bank1 3&lt;br /&gt;
write x bank1 4&lt;br /&gt;
write y bank1 5&lt;br /&gt;
read ack bank1 6&lt;br /&gt;
jump 0 notEqual ack 200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
消费者:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
read ver bank1 0&lt;br /&gt;
jump 0 notEqual ver 1&lt;br /&gt;
read cmd bank1 3&lt;br /&gt;
jump 0 notEqual cmd 200&lt;br /&gt;
read x bank1 4&lt;br /&gt;
read y bank1 5&lt;br /&gt;
# do work...&lt;br /&gt;
write 200 bank1 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;单位控制进阶&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 单位控制进阶 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;抢控保护&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 抢控保护 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;抢控&amp;#039;&amp;#039;&amp;#039; 是什么: 当前单位被其他逻辑或玩家接管。作用: 提醒当前控制逻辑立即重绑或回退。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find:&lt;br /&gt;
    ubind @flare&lt;br /&gt;
    sensor c @unit @controlled&lt;br /&gt;
jump find notEqual c 0&lt;br /&gt;
&lt;br /&gt;
ctrl:&lt;br /&gt;
    ucontrol move tx ty 0 0 0&lt;br /&gt;
    sensor dead @unit @dead&lt;br /&gt;
jump find notEqual dead false&lt;br /&gt;
    sensor owner @unit @controller&lt;br /&gt;
jump ctrl equal owner @this&lt;br /&gt;
jump find always 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;控制最小化&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 控制最小化 ===&lt;br /&gt;
&lt;br /&gt;
不用控制语句时不要发控制信号&amp;lt;sup&amp;gt;[[#fn-4|4]]&amp;lt;/sup&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 用 op len 判定距离, 替代 ucontrol within&lt;br /&gt;
sensor ux @unit @x&lt;br /&gt;
sensor uy @unit @y&lt;br /&gt;
op sub dx ux tx&lt;br /&gt;
op sub dy uy ty&lt;br /&gt;
op len dist dx dy&lt;br /&gt;
op lessThan near dist 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;可靠解绑&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 可靠解绑 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 确认当前确实在控制时再 unbind&lt;br /&gt;
sensor owner @unit @controller&lt;br /&gt;
jump skip notEqual owner @this&lt;br /&gt;
ucontrol unbind 0 0 0 0 0&lt;br /&gt;
skip:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;单位批处理与调度&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 单位批处理与调度 ==&lt;br /&gt;
&lt;br /&gt;
目标: 降低单帧峰值, 提升稳定性.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;时间片调度&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 时间片调度 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# task 0..2&lt;br /&gt;
op add @counter @counter task&lt;br /&gt;
jump T0 always 0 0&lt;br /&gt;
jump T1 always 0 0&lt;br /&gt;
jump T2 always 0 0&lt;br /&gt;
T0:&lt;br /&gt;
    # bind / select&lt;br /&gt;
    jump NEXT always 0 0&lt;br /&gt;
T1:&lt;br /&gt;
    # sense&lt;br /&gt;
    jump NEXT always 0 0&lt;br /&gt;
T2:&lt;br /&gt;
    # control&lt;br /&gt;
    jump NEXT always 0 0&lt;br /&gt;
NEXT:&lt;br /&gt;
op add task task 1&lt;br /&gt;
op mod task task 3&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;轮询类型&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 轮询类型 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lookup unit utype slot&lt;br /&gt;
ubind utype&lt;br /&gt;
# ... process one ...&lt;br /&gt;
op add slot slot 1&lt;br /&gt;
op mod slot slot @unitCount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;负载退避&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 负载退避 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# backlog高时减少控制频率&lt;br /&gt;
jump light lessThan backlog 20&lt;br /&gt;
    wait 0.05&lt;br /&gt;
    jump done always 0 0&lt;br /&gt;
light:&lt;br /&gt;
    wait 0.01&lt;br /&gt;
done:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;世界处理器-安全框架&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 世界处理器-安全框架 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;双开关安全门&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 双开关安全门 ===&lt;br /&gt;
&lt;br /&gt;
建议两个按钮:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;switch1&amp;lt;/code&amp;gt;: 总开关&lt;br /&gt;
* &amp;lt;code&amp;gt;switch2&amp;lt;/code&amp;gt;: 危险操作开关&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sensor en1 switch1 @enabled&lt;br /&gt;
sensor en2 switch2 @enabled&lt;br /&gt;
jump END equal en1 false&lt;br /&gt;
jump END equal en2 false&lt;br /&gt;
# privileged dangerous ops...&lt;br /&gt;
END:&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;回滚点&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 回滚点 ===&lt;br /&gt;
&lt;br /&gt;
任何会改地图状态的逻辑建议保留回滚参数:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 写入前先存旧值&lt;br /&gt;
getblock block oldB x y&lt;br /&gt;
write oldB bank1 20&lt;br /&gt;
# ... setblock ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;速率保险丝&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 速率保险丝 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;速率保险丝&amp;#039;&amp;#039;&amp;#039; 是什么: 先短时提速再自动回落的控制策略（本教程命名）。作用: 避免 setrate 长期高负载导致全局卡顿。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 防止 setrate 长时间高负载&lt;br /&gt;
setrate 20&lt;br /&gt;
wait 0.2&lt;br /&gt;
setrate 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;世界处理器-高级语句&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 世界处理器-高级语句 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fetch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== fetch ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fetch unit u @sharded i 0&lt;br /&gt;
fetch build b @sharded i @conveyor&lt;br /&gt;
fetch unitCount uc @sharded 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== message ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print &amp;quot;系统广播&amp;quot;&lt;br /&gt;
message announce 1 @wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;setprop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== setprop ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 高风险示例&lt;br /&gt;
setprop @health @this 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;setrule&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== setrule ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setrule lighting 1 0 0 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
status false wet unit 10&lt;br /&gt;
status true boss unit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mdtMarkdownAlert mdtMarkdownAlert-warning&amp;quot;&amp;gt;&lt;br /&gt;
世界处理器语句破坏性极强, 建议默认禁用, 仅在维护窗口开启.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;性能优化与资源预算&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 性能优化与资源预算 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;资源预算模型&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 资源预算模型 ===&lt;br /&gt;
&lt;br /&gt;
建议给每帧设置预算变量:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;budgetOps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;budgetIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;budgetDraw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;高频热点&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 高频热点 ===&lt;br /&gt;
&lt;br /&gt;
* 高频 &amp;lt;code&amp;gt;printflush/drawflush&amp;lt;/code&amp;gt;&lt;br /&gt;
* 全量遍历单位/链接&lt;br /&gt;
* 重复 sensor 同一属性&lt;br /&gt;
* 大量字符串拼接&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;优化手段&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 优化手段 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 问题&lt;br /&gt;
! 手段&lt;br /&gt;
|-&lt;br /&gt;
| 全量扫描卡顿&lt;br /&gt;
| 分帧批处理&lt;br /&gt;
|-&lt;br /&gt;
| 输出过于频繁&lt;br /&gt;
| 合并输出/降低 flush 频率&lt;br /&gt;
|-&lt;br /&gt;
| 逻辑难维护&lt;br /&gt;
| 状态机 + 协议层&lt;br /&gt;
|-&lt;br /&gt;
| 控制抖动&lt;br /&gt;
| 降频 + 持续控制窗口&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;实战-分帧遍历链接&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 实战: 分帧遍历链接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 每帧只处理一个链接&lt;br /&gt;
getlink b idx&lt;br /&gt;
# ... do something ...&lt;br /&gt;
op add idx idx 1&lt;br /&gt;
op mod idx idx @links&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;可维护性规范&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 可维护性规范 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;命名规范&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 命名规范 ===&lt;br /&gt;
&lt;br /&gt;
推荐前缀:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;s_&amp;lt;/code&amp;gt; 状态变量&lt;br /&gt;
* &amp;lt;code&amp;gt;t_&amp;lt;/code&amp;gt; 临时变量&lt;br /&gt;
* &amp;lt;code&amp;gt;io_&amp;lt;/code&amp;gt; 协议变量&lt;br /&gt;
* &amp;lt;code&amp;gt;cfg_&amp;lt;/code&amp;gt; 配置变量&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;模块边界&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 模块边界 ===&lt;br /&gt;
&lt;br /&gt;
建议一个处理器只负责一个职责:&lt;br /&gt;
&lt;br /&gt;
* 采集&lt;br /&gt;
* 决策&lt;br /&gt;
* 执行&lt;br /&gt;
* 可视化&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;注释规范&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 注释规范 ===&lt;br /&gt;
&lt;br /&gt;
注释写“为什么”, 不写“做了什么”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# bad: op add i i 1  # i加1&lt;br /&gt;
# good: # 轮询链接索引, 防止固定打同一建筑&lt;br /&gt;
op add i i 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;发布规范&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 发布规范 ===&lt;br /&gt;
&lt;br /&gt;
建议维护:&lt;br /&gt;
&lt;br /&gt;
* 版本号&lt;br /&gt;
* 协议版本&lt;br /&gt;
* 变更记录&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;编译器与工程化&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 编译器与工程化 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;什么时候上编译器&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 什么时候上编译器 ===&lt;br /&gt;
&lt;br /&gt;
满足任一条件就建议上:&lt;br /&gt;
&lt;br /&gt;
* 代码 &amp;gt; 300 行&lt;br /&gt;
* 需要函数与复用&lt;br /&gt;
* 需要自动构建复杂条件&lt;br /&gt;
* 需要多人协作&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;编译器对比&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 编译器对比 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 名称&lt;br /&gt;
! 特点&lt;br /&gt;
! 适配人群&lt;br /&gt;
|-&lt;br /&gt;
| mindcode&lt;br /&gt;
| 优化强、成熟&lt;br /&gt;
| 重性能&lt;br /&gt;
|-&lt;br /&gt;
| mlogjs&lt;br /&gt;
| JS/TS生态好&lt;br /&gt;
| 前端/脚本开发者&lt;br /&gt;
|-&lt;br /&gt;
| bang-lang&lt;br /&gt;
| 贴近 mlog、元编程强&lt;br /&gt;
| 深度控制流玩家&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;工程化流水线&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 工程化流水线 ===&lt;br /&gt;
&lt;br /&gt;
推荐流程:&lt;br /&gt;
&lt;br /&gt;
# 源码仓库&lt;br /&gt;
# 编译脚本&lt;br /&gt;
# 自动导出 mlog&lt;br /&gt;
# 回归测试图&lt;br /&gt;
# 版本发布&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bang最小用法&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== bang 最小用法 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mindustry_logic_bang_lang cl &amp;lt;&amp;lt;&amp;lt; &amp;#039;print &amp;quot;Hello, World!&amp;quot;;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;155与146差异对照&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 155与146差异对照 ==&lt;br /&gt;
&lt;br /&gt;
本章整理“旧教程常见说法”与 155 行为的关键差异.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 项目&lt;br /&gt;
! 146常见说法&lt;br /&gt;
! 155/当前基线&lt;br /&gt;
|-&lt;br /&gt;
| print缓冲上限&lt;br /&gt;
| 常被写成约220&lt;br /&gt;
| 源码上限为400&amp;lt;sup&amp;gt;[[#fn-5|5]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 二/十六进制负号&lt;br /&gt;
| 多写作 0b-101, 0x-80&lt;br /&gt;
| 也支持 +0b/-0b/+0x/-0x&lt;br /&gt;
|-&lt;br /&gt;
| read/write对象范围&lt;br /&gt;
| 常仅讲内存&lt;br /&gt;
| 可扩展到字符串/信息板/画板/逻辑变量等&lt;br /&gt;
|-&lt;br /&gt;
| select语句&lt;br /&gt;
| 旧版本无&lt;br /&gt;
| 新版本可直接用&lt;br /&gt;
|-&lt;br /&gt;
| ucontrol细节&lt;br /&gt;
| 文档较少&lt;br /&gt;
| 选项与行为更丰富&lt;br /&gt;
|-&lt;br /&gt;
| control范围&lt;br /&gt;
| 严格依赖链接&lt;br /&gt;
| 某些版本行为有变化, 以当版实测为准&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mdtMarkdownAlert mdtMarkdownAlert-important&amp;quot;&amp;gt;&lt;br /&gt;
若遇到“教程说法”和游戏行为冲突, 以当前版本实测 + 源码为准.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附录01-op方法进阶&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附录01-op方法进阶 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 类别&lt;br /&gt;
! 操作&lt;br /&gt;
|-&lt;br /&gt;
| 算术&lt;br /&gt;
| add sub mul div idiv mod emod pow&lt;br /&gt;
|-&lt;br /&gt;
| 比较&lt;br /&gt;
| equal notEqual lessThan lessThanEq greaterThan greaterThanEq strictEqual&lt;br /&gt;
|-&lt;br /&gt;
| 位运算&lt;br /&gt;
| shl shr ushr and or xor not&lt;br /&gt;
|-&lt;br /&gt;
| 数学&lt;br /&gt;
| abs sign floor ceil round sqrt log log10 logn max min rand&lt;br /&gt;
|-&lt;br /&gt;
| 几何/三角&lt;br /&gt;
| len angle angleDiff sin cos tan asin acos atan noise&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
要点:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mod&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;emod&amp;lt;/code&amp;gt; 在负数时行为不同&lt;br /&gt;
* 位运算前会转整数&lt;br /&gt;
* 三角函数是角度制&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附录02-传感器速查&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附录02-传感器速查 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 分类&lt;br /&gt;
! 属性&lt;br /&gt;
|-&lt;br /&gt;
| 坐标&lt;br /&gt;
| x y shootX shootY mineX mineY&lt;br /&gt;
|-&lt;br /&gt;
| 生存&lt;br /&gt;
| health maxHealth dead shield armor&lt;br /&gt;
|-&lt;br /&gt;
| 资源&lt;br /&gt;
| totalItems totalLiquids totalPower itemCapacity liquidCapacity powerCapacity&lt;br /&gt;
|-&lt;br /&gt;
| 行为&lt;br /&gt;
| enabled shooting boosting mining speed range&lt;br /&gt;
|-&lt;br /&gt;
| 标识&lt;br /&gt;
| team type id name controlled controller flag&lt;br /&gt;
|-&lt;br /&gt;
| 载荷&lt;br /&gt;
| payloadType payloadCount totalPayload payloadCapacity&lt;br /&gt;
|-&lt;br /&gt;
| 文本/显示&lt;br /&gt;
| size bufferSize displayWidth displayHeight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附录03-环境变量速查&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附录03-环境变量速查 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;逻辑信息&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 逻辑信息 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@this&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;@thisx&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;@thisy&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@links&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@unit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@ipt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;常量与数学&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 常量与数学 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@pi&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@e&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@degToRad&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@radToDeg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;世界变量&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 世界变量 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@time&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@tick&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@second&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@minute&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@waveNumber&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@waveTime&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@mapw&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;@maph&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;lookup计数&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== lookup计数 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@itemCount&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@unitCount&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@blockCount&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;@liquidCount&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附录04-术语表&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附录04-术语表 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 术语&lt;br /&gt;
! 解释&lt;br /&gt;
|-&lt;br /&gt;
| 跳表&lt;br /&gt;
| 是什么: 用 @counter 偏移把输入值映射到不同代码块。作用: 用常数时间完成多分支分派。&lt;br /&gt;
|-&lt;br /&gt;
| 匹配守卫&lt;br /&gt;
| 是什么: 在进入某个分支前额外检查一次条件的跳转。作用: 让同一个 case 支持更细粒度筛选。&lt;br /&gt;
|-&lt;br /&gt;
| 穿透&lt;br /&gt;
| 是什么: 分支执行后没有跳出, 继续执行后续分支。作用: 可用于刻意复用后续逻辑, 也可能引发误执行。&lt;br /&gt;
|-&lt;br /&gt;
| 阻塞&lt;br /&gt;
| 是什么: 在一行或几行上反复循环等待条件。作用: 保证条件满足后再继续, 但会牺牲推进速度。&lt;br /&gt;
|-&lt;br /&gt;
| 协议&lt;br /&gt;
| 是什么: 多处理器共享内存字段和时序规则的约定。作用: 避免协作时读写歧义和乱序。&lt;br /&gt;
|-&lt;br /&gt;
| 抢控&lt;br /&gt;
| 是什么: 单位控制权被其他逻辑或玩家接管。作用: 提醒当前控制逻辑需要重绑或回退。&lt;br /&gt;
|-&lt;br /&gt;
| 心跳&lt;br /&gt;
| 是什么: 持续递增并回写的计数值。作用: 用来判断某个处理器是否仍在运行。&lt;br /&gt;
|-&lt;br /&gt;
| 消费者心跳&lt;br /&gt;
| 是什么: 由消费者处理器维护的心跳值。作用: 让生产者检测消费者是否卡住或停机。&lt;br /&gt;
|-&lt;br /&gt;
| ACK&lt;br /&gt;
| 是什么: Acknowledgement, 命令已处理完成的回执值。作用: 让发送方确认可进入下一步。&lt;br /&gt;
|-&lt;br /&gt;
| 卡死&lt;br /&gt;
| 是什么: 逻辑没有崩溃, 但长期停在同一等待或循环。作用: 作为故障信号触发恢复流程。&lt;br /&gt;
|-&lt;br /&gt;
| 速率保险丝&lt;br /&gt;
| 是什么: 短时提速后自动回落的保护策略（本教程命名）。作用: 防止 setrate 长期高负载导致全局卡顿。&lt;br /&gt;
|-&lt;br /&gt;
| 看门狗&lt;br /&gt;
| 是什么: 监控流程是否长期无进展的保护计数器。作用: 超时后触发重置或降级恢复。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-人话例子&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 高频术语（一句人话 + 最小例子） ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-心跳&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;心跳&amp;#039;&amp;#039;&amp;#039;: 一句话人话: 一个持续变化的数字, 用来证明“这个逻辑还活着”.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
op add hb hb 1&lt;br /&gt;
op mod hb hb 1000000&lt;br /&gt;
write hb bank1 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-消费者心跳&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;消费者心跳&amp;#039;&amp;#039;&amp;#039;: 一句话人话: 消费者处理器每轮报平安, 让生产者知道它没停机.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# consumer side&lt;br /&gt;
op add hb_c hb_c 1&lt;br /&gt;
op mod hb_c hb_c 1000000&lt;br /&gt;
write hb_c bank1 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-ack&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ACK&amp;#039;&amp;#039;&amp;#039;: 一句话人话: “我这条命令做完了”的回执信号.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# producer&lt;br /&gt;
write 200 bank1 3&lt;br /&gt;
read ack bank1 6&lt;br /&gt;
jump 0 notEqual ack 200&lt;br /&gt;
&lt;br /&gt;
# consumer&lt;br /&gt;
read cmd bank1 3&lt;br /&gt;
# ...do work...&lt;br /&gt;
write cmd bank1 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-卡死&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;卡死&amp;#039;&amp;#039;&amp;#039;: 一句话人话: 逻辑没崩, 但一直卡在某个等待/循环里, 业务不前进.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wait_btn:&lt;br /&gt;
sensor on switch1 @enabled&lt;br /&gt;
jump wait_btn equal on false&lt;br /&gt;
# 按钮不变真就会一直卡在这里&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-速率保险丝&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;速率保险丝（本教程命名）&amp;#039;&amp;#039;&amp;#039;: 一句话人话: 短时提速, 自动回落, 防止 setrate 长期高负载.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setrate 20&lt;br /&gt;
# heavy work ...&lt;br /&gt;
wait 0.2&lt;br /&gt;
setrate 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;术语-看门狗&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;看门狗&amp;#039;&amp;#039;&amp;#039;: 一句话人话: 发现流程长期没进展就触发恢复动作.&lt;br /&gt;
&lt;br /&gt;
最小例子:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jump progressed notEqual step lastStep&lt;br /&gt;
op add stuck stuck 1&lt;br /&gt;
jump chk always 0 0&lt;br /&gt;
progressed:&lt;br /&gt;
set stuck 0&lt;br /&gt;
set lastStep step&lt;br /&gt;
chk:&lt;br /&gt;
jump ok lessThan stuck 600&lt;br /&gt;
    # recovery&lt;br /&gt;
    set state 0&lt;br /&gt;
ok:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附录05-排错清单&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附录05-排错清单 ==&lt;br /&gt;
&lt;br /&gt;
请按顺序检查:&lt;br /&gt;
&lt;br /&gt;
# 变量是否初始化&lt;br /&gt;
# 链接名是否存在且正确&lt;br /&gt;
# 是否同队伍且有权限&lt;br /&gt;
# @counter 是否跳飞&lt;br /&gt;
# 是否被 wait/stop 阻塞&lt;br /&gt;
# 单位是否被抢控&lt;br /&gt;
# 协议版本是否一致&lt;br /&gt;
# ACK 是否回写&lt;br /&gt;
# flush 频率是否过高&lt;br /&gt;
# 是否触发了安全门&lt;br /&gt;
&lt;br /&gt;
最小排错模板:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print &amp;quot;state=&amp;quot;; print state&lt;br /&gt;
print &amp;quot; err=&amp;quot;; print err&lt;br /&gt;
print &amp;quot; ack=&amp;quot;; print ack&lt;br /&gt;
printflush message1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;注释&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 注释 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [2] @counter 四步模型是理解所有高级控制流的基础.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [3] 递归调用必须隔离返回地址和跨调用变量.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-4&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [4] 单位控制语句会发控制信号, 非必要不要滥用.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-5&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [5] 当前基线中 textBuffer 上限为 400.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-6&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [6] 跳表前务必约束输入范围.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-7&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [7] 复杂条件转换时优先做逻辑代数化简.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-8&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [8] guard 优先处理“高概率失败”分支可减少执行成本.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-9&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [9] while 和 gwhile 选型取决于条件反转成本.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [10] 函数建议统一入参/出参/返回地址变量命名.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [11] 非递归函数的返回地址常用 @counter+1.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-12&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [12] 递归函数要保证栈平衡, 否则会读错返回地址.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-13&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [13] 多处理器协作应先定协议再写代码.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-14&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [14] 心跳变量建议做取模防止无限增长.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-15&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [15] ACK 建议回写命令码本身, 便于无状态校验.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-16&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [16] 单位控制需持续刷新, 否则控制会过期.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-17&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [17] owner 校验可快速检测抢控.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-18&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [18] 批处理策略是性能优化的第一手段.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-19&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [19] 世界处理器高风险操作必须有硬开关.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [20] 任何 setblock 类操作建议保留回滚信息.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-21&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [21] setrate 只应短时升高, 长时高频会压垮整体.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-22&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [22] flush 过频是常见卡顿源.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-23&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [23] 输出日志尽量结构化, 便于排错脚本解析.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-24&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [24] 命名规范是多人协作里性价比最高的质量手段.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-25&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [25] 注释写“原因”优先于“动作”.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-26&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [26] 编译器能显著降低复杂控制流的人肉错误率.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-27&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [27] 版本迁移先做差异表再做迁移计划.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-28&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [28] mod/emod 的负数行为不同, 算法里要明确选型.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-29&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [29] 位运算要注意数值转换与范围精度.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [30] strictEqual 与 equal 的语义差别在类型一致性.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [31] 逻辑代数化简可减少 jump 数量和维护成本.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [32] 先保证正确性再做局部性能优化.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-33&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [33] 协议字段建议保留错误码便于远程诊断.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-34&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [34] 调试逻辑与业务逻辑建议分离处理器.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-35&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [35] 对外交互 (message/marker) 建议加频率限制.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-36&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [36] 内存地址使用建议维护单独映射表.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-37&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [37] 每次大改应维护 migration 日志.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-38&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [38] 逻辑蓝图发布建议附最小测试图.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-39&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [39] 复杂项目推荐 CI 自动导出并做语法检查.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;fn-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; [40] 本教程若与将来版本冲突, 以新版本实测为准.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fpzwsl</name></author>
	</entry>
</feed>