<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
    <title>蔡梓溢的生活随笔</title>
    <subtitle>文学、计算机与一切</subtitle>
    <link rel="self" type="application/atom+xml" href="https://becharmkon.cn/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://becharmkon.cn"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-04T00:00:00+00:00</updated>
    <id>https://becharmkon.cn/atom.xml</id>
    <entry xml:lang="zh-CN">
        <title>武大信部生活支出理论最小值研究与省钱指南</title>
        <published>2026-08-04T00:00:00+00:00</published>
        <updated>2026-08-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/08-Aug/lowest-price/"/>
        <id>https://becharmkon.cn/blog/2026/08-Aug/lowest-price/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/08-Aug/lowest-price/">&lt;p&gt;最近暑期闲来无事——
话说私以为暑期这种无聊的玩意就当取缔——
我于是尝试了些极限挑战，
探索武汉大学信息学部区域
每月生活支出的理论最小值。&lt;&#x2F;p&gt;
&lt;p&gt;除了这个轻飘飘的值外，
本实践亦可为希望节约预算的同学提供些方法论上的参考。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;sheng-huo-zhi-chu-li-lun-zui-xiao-zhi-yan-jiu&quot;&gt;生活支出理论最小值研究&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;jie-lun-xian-xing&quot;&gt;结论先行&lt;&#x2F;h2&gt;
&lt;p&gt;经实践测算，武大信部区域的理论最低生活开支
依个人饭量大约在每月七百元至每月九百元之间浮动。&lt;&#x2F;p&gt;
&lt;p&gt;接下来是详细的推导过程。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;li-lun-zui-xiao-zhi-chu-de-ding-yi&quot;&gt;「理论最小支出」的定义&lt;&#x2F;h2&gt;
&lt;p&gt;首先我们需要明确我们在研究什么东西的极值。
这里的「支出」首先应该被定义为在校生活期间因
除参加竞赛、活动等原因外的一切支出的总和，
且不能与任何形式的收入相抵。&lt;&#x2F;p&gt;
&lt;p&gt;规定「不能与收入相抵」是由于从理论上讲，
我校有丰富的奖助学金资源，
这些东西的叠加几乎没有理论上限，
如果你是个超级大卷王，把所有的奖学金全薅了个遍，
在不排除这些部分的算法下你可以把这个值卷成负的。
这就没法继续探讨下去了。因此我们排除一切收入的影响。&lt;&#x2F;p&gt;
&lt;p&gt;接着是排除了竞赛、活动等大型开支，
某些竞赛的支出相当恐怖，
但我们不能鼓励大家为了省钱而放弃这些活动，
这样的评价标准是不健康的。故排除。&lt;&#x2F;p&gt;
&lt;p&gt;然后，「理论最小」被定义为
「满足基本的生活、学业、营养所需的最小值」。&lt;&#x2F;p&gt;
&lt;p&gt;填饱肚子的方法有很多，
其中有相当部分是几近免费的；
但长期使用会导致严重的营养不良并可能导致注意力涣散等
在学业上几乎灾难的症状。
这些是不可接受的，我们的评价标准不应当鼓励这些不可持续的方式。&lt;&#x2F;p&gt;
&lt;p&gt;综上，「理论最小支出」的定义就出来了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cong-huo-shi-fei-qie-ru&quot;&gt;从伙食费切入&lt;&#x2F;h2&gt;
&lt;p&gt;假设你的手机存储空间告急，
你会首先尝试删掉一些占用数 GB 的应用程序，
还是在相册里翻找无用的每张仅数百 KB 的照片？&lt;&#x2F;p&gt;
&lt;p&gt;开源节流也一样。
很多人上来把爱奇艺会员砍了，
好，每月怒省二十，没了；
相比之下每顿仅减少一元，每月能省九十。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fang-fa-lun-huan-jie&quot;&gt;方法论环节&lt;&#x2F;h2&gt;
&lt;p&gt;因此接下来以信四食堂为例探讨一下具体的节约方式。
（你都要探索理论最小值了肯定不能去信三了对吧。）&lt;&#x2F;p&gt;
&lt;p&gt;首先我们每天的伙食必定要包含碳水、蛋白质这两个硬的部分，
同时还要有相当数量的新鲜蔬菜，这是保证健康最基本的要求。
至于碳水，显然我们注意到食堂有九毛一大碗的粗制米饭
和一块一个的白面大馒头。&lt;&#x2F;p&gt;
&lt;p&gt;——这肯定比隔壁档口的烧饭炒面划算多了，是吧？&lt;&#x2F;p&gt;
&lt;p&gt;然后是蛋白质，这是整个计划中最难搞定的部分，
因为四食堂的菜价看起来便宜，实际上不算便宜，
带肉星的蔬菜能卖到五块，半盘肉半盘菜能卖到七块，
全是肉的就要九块了。但天无绝人之路，
食堂还是有供应一块一个的煎蛋的，
偶尔还会刷新价格相当的午餐肉片。
不过要注意的是由于缺少油水和咀嚼感，
相对于同等数量的肉来说这俩很容易饿。饭量小的可以考虑。&lt;&#x2F;p&gt;
&lt;p&gt;以及蔬菜，我们当然有五元一份的掺了微量肉沫的花菜生菜上海青，
但同时也有一到两元一份的豆芽、胡萝卜丝和土豆丝
（尽管这玩意算不算蔬菜还是回事）。
哪个更有性价比，想必不用我多说。&lt;&#x2F;p&gt;
&lt;p&gt;最后，你还需要具备一定的营养学知识来把这些组分组合成营养均衡的一顿。
实践表明，如果你的饭量比较小，午餐晚餐大约可以压到六元以内，
准确来说大约是五点七六元左右。&lt;&#x2F;p&gt;
&lt;p&gt;如果你的饭量比较大的话，
试图拿煎蛋和午餐肉代替严肃的肉类大概率会让你饿得眼冒金星。
因此你会需要每顿花七到九元吃一些真正的肉（不是肉制品）。
最后总成本也可控制在十元以内。&lt;&#x2F;p&gt;
&lt;p&gt;然后说早餐。显然你可以花三块一毛五得到一大碗吃不完的热干面，
但我不推荐你这么做，并非（或者并非主要）是因为它太难吃以致于我一个湖北人都吃不下去，
而是由于它含有太多的碳水和油脂，长期来看很不健康。
更推荐的是两个肉包子和两个煎鸡蛋，共三块五。&lt;&#x2F;p&gt;
&lt;p&gt;综上，按上文所说「饭量较小」的版本考虑，
本人曾经创下过一整天饮食花费十六块八的记录，
乘以三十是五百零四块。加上其他生活花销、API 调用费等等，七百块大约是理论最低花销值。
如果换成饭量较大的版本，大概是九百元。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fen-yu-suan-sheng-qian-zhi-nan&quot;&gt;分预算省钱指南&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;2500&quot;&gt;2500+&lt;&#x2F;h2&gt;
&lt;p&gt;感觉基本按正常花法很难超过，略。&lt;&#x2F;p&gt;
&lt;p&gt;（前提是专款专用，巨型支出有专项资金。
否则建议折算一下以后按纯粹的「生活开支」计算。）&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2000-yuan-dang&quot;&gt;2000 元档&lt;&#x2F;h2&gt;
&lt;p&gt;仍然可以过上很滋润的生活，
主要问题是要对钱有概念。&lt;&#x2F;p&gt;
&lt;p&gt;什么叫「有概念」？
打个比方，你正餐一顿去银泰吃掉三十块（在那地方算便宜的了），
两顿六十，早餐吃好点十块，一天七十，整月两千一，哦豁~&lt;&#x2F;p&gt;
&lt;p&gt;不少高考数学一百三一百四的反而容易载在这种鬼地方。。。&lt;&#x2F;p&gt;
&lt;p&gt;总体来讲只要保持大多数时候在校内吃饭，
别每个月都买套新衣服或者换个新显示器什么的，
这个预算基本没什么问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;1500-yuan-dang&quot;&gt;1500 元档&lt;&#x2F;h2&gt;
&lt;p&gt;看似下调了五百但其实仍然很容易满足，
同样是每个月少花点吃饭以外的钱，
别每天都有包裹在路上。&lt;&#x2F;p&gt;
&lt;p&gt;此外伙食方面需要尽量以四食堂为主了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;1000-yuan-dang&quot;&gt;1000 元档&lt;&#x2F;h2&gt;
&lt;p&gt;由于 1500 元档时我们已经把非必要消费干得差不多了，
现在我们需要在伙食费上下点功夫。
如果还希望有些闲钱能偶尔剁手的话伙食标准得按上面理论最小值的来了，
希望稍微吃好点的话（也好不到哪去了其实）就得彻底取缔非必要开支。&lt;&#x2F;p&gt;
&lt;p&gt;此外 Fable 5 什么的彻底别想了，
老老实实用 DS Flash；Pro 都停掉。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;li-lun-zui-xiao-zhi-dang&quot;&gt;理论最小值档&lt;&#x2F;h2&gt;
&lt;p&gt;除以上外，善用拼多多和 1688。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-xu-xia-tan&quot;&gt;继续下探&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;继续下探需要付出一定的健康代价，任何情况下不建议长期实践。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;笔者亦未实践过，以下进入瞎编环节。&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;由于此时除伙食费外的基本只剩下硬性支出
（话说别告诉我你是为了省钱旅游 &#x2F; 买显卡才看到这一档的啊），
基本再也压缩不动了，我们还是只能压伙食费。&lt;&#x2F;p&gt;
&lt;p&gt;（知道我为什么说要付出健康代价了吧……）&lt;&#x2F;p&gt;
&lt;p&gt;首先你会想到批发的杂牌袋装泡面（甚至可能需要自制调料），
或者把伙食彻底换成每顿两个大馒头。
然后你会希望去蹭一些免费汤。&lt;&#x2F;p&gt;
&lt;p&gt;尽管到这一步你应该已经不在乎营养良不良了，
但长此以往会造成严重的营养不良和身体素质极速下降。
这不是闹着玩的。&lt;&#x2F;p&gt;
&lt;p&gt;再往下似乎就只能挨饿了，毕竟在宿舍严禁炊火的情况下已经
没有比一块一个的馒头更经济实惠的选择。
但我的看法是&lt;strong&gt;在任何情况下都不要让自己饿着&lt;&#x2F;strong&gt;，
或者为了「如饱」而去搞什么一泡一满杯的奇怪粉末；
这样撑不了几天的，&lt;strong&gt;当心某天一头饿晕过去&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;cong-sheng-qian-jiao-du-gei-xiao-fang-de-jian-yi&quot;&gt;从省钱角度给校方的建议&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果这些建议真的有必要的话。因为目前看来资助政策似乎相当完善了。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先是增加四食堂五元档的「某某炒鸡蛋」类菜品，
理论次小值档的饮食目前高度依赖西红柿炒蛋这一道菜来提供「好吃的蛋白质」。&lt;&#x2F;p&gt;
&lt;p&gt;然后想个安全的办法让学生能做饭，
配合上学校附近的菜场（没去过，价格不清楚）说不定能显著降低健康饮食所需成本。&lt;&#x2F;p&gt;
&lt;p&gt;以上。&lt;strong&gt;祝各位永远不必真的实践本文。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>《题塞缪尔·贝克特〈方庭〉其二》及其解</title>
        <published>2026-07-31T00:00:00+00:00</published>
        <updated>2026-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/07-jul/quad-ii/"/>
        <id>https://becharmkon.cn/blog/2026/07-jul/quad-ii/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/07-jul/quad-ii/">&lt;h1 id=&quot;chuang-zuo-bei-jing&quot;&gt;创作背景&lt;&#x2F;h1&gt;
&lt;p&gt;关于塞缪尔·贝克特《方庭》相关信息，
请见本站文章
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;becharmkon.cn&#x2F;blog&#x2F;2026&#x2F;07-jul&#x2F;quad&#x2F;#guan-yu-sai-mou-er-bei-ke-te-fang-ting&quot;&gt;『题塞缪尔·贝克特「方庭」』及其注解批判&lt;&#x2F;a&gt;
。&lt;&#x2F;p&gt;
&lt;p&gt;本文原本是我于七月十五日凌晨发布的一篇 QQ 说说，
现节选并加标题后重载于此。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ti-sai-mou-er-bei-ke-te-fang-ting-qi-er&quot;&gt;《题塞缪尔·贝克特〈方庭〉其二》&lt;&#x2F;h1&gt;
&lt;p&gt;雪山与原野正在远去，
锡兵与仙子变回铅字。
曾透纸背的笔尖在湿热空气里生锈，
并将在下次触及纸面时化为齑粉；
溶有万般柔情的墨河悉数干涸，
尽最后的残喘将砚盖紧锁。&lt;&#x2F;p&gt;
&lt;p&gt;高加索下，正一片神鸦社鼓；&lt;br &#x2F;&gt;
蜡筑薄羽，因鸢飞戾天而熔。&lt;br &#x2F;&gt;
黄犬一言叹千古，二十四桥月无声。&lt;br &#x2F;&gt;
春风空抚江南岸，斯人斯裳再不还。&lt;br &#x2F;&gt;
烈火焚过丹青处，仆地抢首君岂知？&lt;&#x2F;p&gt;
&lt;p&gt;此生终成，四方庭里，寻寻觅觅，冷冷凄凄。&lt;br &#x2F;&gt;
冷冷凄凄，春花秋月，恨无绝意，淅淅沥沥。&lt;&#x2F;p&gt;
&lt;p&gt;书至此处，雾眼朦胧；不知所云，止增笑耳。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ti-sai-mou-er-bei-ke-te-fang-ting-qi-er-jie&quot;&gt;《题塞缪尔·贝克特〈方庭〉其二》解&lt;&#x2F;h1&gt;
&lt;p&gt;雪山与原野：指瑰丽的想象。&lt;br &#x2F;&gt;
锡兵与仙子：指童话世界。&lt;br &#x2F;&gt;
变回铅字：指失去想象特性而回归单薄的文本。&lt;br &#x2F;&gt;
曾透纸背的笔尖：指力透纸背的文章与深刻锐利的思想。&lt;br &#x2F;&gt;
并将在下次触及纸面时化为齑粉：意在书明一种尚未发生但必定发生的宿命。&lt;br &#x2F;&gt;
溶有万般柔情的墨河：指文章的人文关怀。&lt;br &#x2F;&gt;
高加索：指高加索山，传说普罗米修斯盗取天火使宙斯大怒，后者遂缚其于高加索山受刑。&lt;br &#x2F;&gt;
神鸦社鼓：语出《京口北固亭怀古》。&lt;br &#x2F;&gt;
蜡筑薄羽：指希腊神话人物伊卡洛斯。&lt;br &#x2F;&gt;
鸢飞戾天：语出《与朱元思书》。&lt;br &#x2F;&gt;
黄犬一言：指「黄犬叹」典故。&lt;br &#x2F;&gt;
二十四桥：语出《扬州慢》。&lt;br &#x2F;&gt;
春风空抚江南岸：语出《泊船瓜州》。&lt;br &#x2F;&gt;
「斯人斯裳」三句：见本站文章
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;becharmkon.cn&#x2F;blog&#x2F;2026&#x2F;07-jul&#x2F;gallery&#x2F;&quot;&gt;《画廊》与《画廊》解&lt;&#x2F;a&gt;。&lt;br &#x2F;&gt;
四方庭：指《方庭》舞台。&lt;br &#x2F;&gt;
寻寻觅觅，冷冷凄凄：语出《声声慢》。&lt;br &#x2F;&gt;
春花秋月：语出李煜《虞美人》。&lt;br &#x2F;&gt;
恨无绝意：指遗憾没有断绝的征兆。恨，遗憾。&lt;br &#x2F;&gt;
淅淅沥沥：是对悲伤的形容。这悲伤并非是一场夏日的暴雨，而是持续一生的潮湿。&lt;br &#x2F;&gt;
雾眼朦胧：指水雾模糊了双眼。&lt;br &#x2F;&gt;
止增笑耳：只能为人们提供笑料罢了。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>《画廊》与《画廊》解</title>
        <published>2026-07-19T00:00:00+00:00</published>
        <updated>2026-07-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/07-jul/gallery/"/>
        <id>https://becharmkon.cn/blog/2026/07-jul/gallery/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/07-jul/gallery/">&lt;h1 id=&quot;hua-lang&quot;&gt;《画廊》&lt;&#x2F;h1&gt;
&lt;p&gt;我发现自己走在一间画廊里。&lt;&#x2F;p&gt;
&lt;p&gt;画廊不窄，很长，中间是一排长凳。没有窗户，两边淡粉的墙上交错挂着油画。&lt;&#x2F;p&gt;
&lt;p&gt;我转过身，开始看最近的一幅。那画的是一个年轻女人撑伞站在河堤上，风把她的裙摆朝一侧吹起。她撩起刘海，免得被遮住脸。旁边还有一个小孩子，穿一身魔法师般古灵精怪的衣装。上面的天很蓝，像宝石；草地也像刚洗过。我想我应该没有见过这么绿的原野，但我总感觉好像很熟悉。画里两个人都看着我，但他们没有表情，不过我觉得他们应当会快乐，哪怕是最后一次。&lt;&#x2F;p&gt;
&lt;p&gt;我应当已经看见了所有细节，我从上往下一行一行看。但我读不懂这幅画。我不知道为什么。&lt;&#x2F;p&gt;
&lt;p&gt;我抬起脚来，走向下一幅画。女人和孩子的目光追随着我，他们向我挥手，但他们仍然没有表情。&lt;&#x2F;p&gt;
&lt;p&gt;下一幅画的是夜晚的村庄，点点的灯火亮起。远处是群山，群山之外是流动的星光。那星光五彩斑斓，山头在映衬下不断变幻着色彩。离星星最近的不是群山，是村子里的塔楼，暖黄色的灯光透露出来，照亮大地和夜空间的缝隙。我知道刚才画里的女人和孩子已经不见了，我不用看也知道，那里现在应该只有微微的清风。因为在暖黄的光下，小魔法师正在听着故事，我钻进那光里看得一清二楚。&lt;&#x2F;p&gt;
&lt;p&gt;但我不得不从画里出来了，我不能在那里待太久。&lt;&#x2F;p&gt;
&lt;p&gt;“小伙子，”我听见一声呼唤，“到这里来坐坐吧。”&lt;&#x2F;p&gt;
&lt;p&gt;我这时才看见她，原来这画廊里还有人。她大概六十岁光景，穿着深红色呢子上衣，头戴黑色蕾丝帽。一种慈祥亲切的感觉像风一样吹过来。我到她身边，坐下，把手平放在膝头上。在正对我们的画里，人们在厨房里忙碌着。&lt;&#x2F;p&gt;
&lt;p&gt;“小伙子，你，叫什么名字？”她平静的眼神看过来。&lt;&#x2F;p&gt;
&lt;p&gt;“我……我穿着一身西装。”&lt;&#x2F;p&gt;
&lt;p&gt;她笑了，环顾四周，“你认识这画里的人吗？”&lt;&#x2F;p&gt;
&lt;p&gt;“……我感到很熟悉。”&lt;&#x2F;p&gt;
&lt;p&gt;“他们都是我爱的人。”&lt;&#x2F;p&gt;
&lt;p&gt;一位端着牛奶的少女从面前的画里探出头来，用闲着的那只手向我们问好。&lt;&#x2F;p&gt;
&lt;p&gt;“我喝过她亲手挤的牛奶。”老妇人看着她，幸福在脸上荡漾。&lt;&#x2F;p&gt;
&lt;p&gt;“您为什么不进画里？”&lt;&#x2F;p&gt;
&lt;p&gt;“没有人能长久待在画里，也没有人能长久待在画廊里。”&lt;&#x2F;p&gt;
&lt;p&gt;“那他们呢？”我指指面前的画。&lt;&#x2F;p&gt;
&lt;p&gt;“他们是影子。”&lt;&#x2F;p&gt;
&lt;p&gt;我不知道她想表达什么，但我感到悲伤。&lt;&#x2F;p&gt;
&lt;p&gt;她看看表：“好了，小伙子，是时候出发了。”&lt;&#x2F;p&gt;
&lt;p&gt;“出发去哪？您呢？”&lt;&#x2F;p&gt;
&lt;p&gt;她莞尔一笑。&lt;&#x2F;p&gt;
&lt;p&gt;我的腿将我撑起来，然后把我带向前方。一幅幅画向我身后移动。在匆匆一瞥里，我看见枫林尽头的小屋，看见阳光洒落的森林，看见淡蓝色阳光下不加修饰的人体。走廊突然亮起来，原来是旁边一幅画里的太阳升起来了，一男一女站在断垣上。&lt;&#x2F;p&gt;
&lt;p&gt;终于，我到了。合金标示牌竖立在面前，上面用淡黄的纸贴着：出口。&lt;&#x2F;p&gt;
&lt;p&gt;我断定我从未来过这里，但我知道一个来到这里的人应当做什么。我把自己放到标牌后站定，等待道路将我带向远方。&lt;&#x2F;p&gt;
&lt;p&gt;我这时才想到事情要坏，转过头，听见呼呼的风声，看见走廊正带着我向外延展。在画廊的远端，熊熊的火焰正开始燃烧。画里的人物都开始看着我，向我挥手。被这么多人盯着让我感觉很不自在，好像做什么都不对。&lt;&#x2F;p&gt;
&lt;p&gt;人们开始跳起来招手，然后有人把身子从画里探出来。他们不惧怕火焰，他们只是不停地向我告别。那些被火吞噬的人物，他们再也没有出现过。&lt;&#x2F;p&gt;
&lt;p&gt;最后老妇人站起来，也向我挥挥手，我看不清她的表情。&lt;&#x2F;p&gt;
&lt;p&gt;然后一切都消失了。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;hua-lang-jie&quot;&gt;《画廊》解&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;有些 LLM 解读得比我更好，但我相信我不必在此处贴出它们的回答——
诸位不妨自己去问它们。
作为参考，大约 GLM-5.2 级别的模型即已能在
人类提示下解读出此文所含全部意蕴。
以下是我作为作者本人对此篇的解释。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;「我发现自己走在一间画廊里」，开篇天上掉下来一句话。&lt;&#x2F;p&gt;
&lt;p&gt;英文中有句式「I found myself doing」，但中文里没有。
此处即是隐含有&lt;br &#x2F;&gt;
「当我回过神来的时候」&lt;br &#x2F;&gt;
之意。&lt;&#x2F;p&gt;
&lt;p&gt;由是，「走在一间画廊里」是既成的事实，
没有原因，亦无解释。
至于主角「我」自身，
则由于某种未书明的原因，
处于一种解离的状态，对其到此的原因同样一无所知，
但亦无意探求。&lt;&#x2F;p&gt;
&lt;p&gt;此乃进入画廊之缘起。接下来看画廊中的内容。
第二段，「画廊不窄，很长……」，以简笔勾勒了画廊的轮廓。&lt;&#x2F;p&gt;
&lt;p&gt;第一幅画：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;那画的是一个年轻女人撑伞站在河堤上，
风把她的裙摆朝一侧吹起……
旁边还有一个小孩子……
天很蓝，像宝石；草地也像刚洗过。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这显然是 Oscar-Claude Monet 的第一幅
&lt;em&gt;Woman with a Parasol&lt;&#x2F;em&gt;。
从历史上讲，此画作于 1875 年，
彼时画家 Claude 的妻子 Camille 已身患重疾，
Claude 于某次大风中的夏日散步时绘制了这幅家庭画。
1879 年，Camille 女士即与世长辞。
这幅画温暖灵动的笔触中，也难免因此染上隐伏的悲凉。&lt;&#x2F;p&gt;
&lt;p&gt;第二幅：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;夜晚的村庄……灯火……群山……流动的星光。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这是 Vincent van Gogh 的 &lt;em&gt;The Starry Night&lt;&#x2F;em&gt;。
此作创作于画家 1889 年于 Saint-Paul-de-Mausole
精神病院疗养期间。画面中流动的星光被人解读为其纷乱的思绪。
几乎恰是在一年后，Vincent 在麦田中自尽，
遗言是「悲伤永存」。&lt;&#x2F;p&gt;
&lt;p&gt;开篇引用的两幅名画，为本作字里行间带入了悲凉的基调。&lt;&#x2F;p&gt;
&lt;p&gt;此作中，「画」这一物品的形态亦于通常认知有所不同，
从「山头在映衬下不断变幻着色彩」一句即可看出。
画作善于表现静态的形象，而非动态的过程；
「不断变幻」这一过程恰是其所无法展现的。
后文对其作了映证：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我知道刚才画里的女人和孩子已经不见了……
那里现在应该只有微微的清风&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这说明了在此作的世界中，
「画」并非是仅供观赏的静态物体，
而是一种动态的、甚至可交互的实体。
这也暗示此作中的「画」，
与之相应的，存在着隐喻的作用。&lt;&#x2F;p&gt;
&lt;p&gt;接着让我们来看看文中的「我」是如何「欣赏」这些画的：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我应当已经看见了所有细节，
我从上往下一行一行看&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;稍等，画是这样看的吗？
使用逐行扫描法？&lt;&#x2F;p&gt;
&lt;p&gt;逐行扫描是计算机系统处理图像的方式，
但肯定不应当被作为人类对待艺术品的方式。
「从上往下一行一行看」肯定能高效地「看见所有细节」，
但绝对无法「读懂」一幅画。&lt;&#x2F;p&gt;
&lt;p&gt;接着，主人公「我」「钻进那光里」，
并且窥知了「小魔法师正在听着故事」。&lt;&#x2F;p&gt;
&lt;p&gt;请循其本。&lt;&#x2F;p&gt;
&lt;p&gt;「我」处在一种解离的状态中来到画廊，
因处在这一环境中而开始欣赏画作。
对于这样一个人来说，
对于一个甚至用逐行扫描法看画的人来说，
「钻进那光里」，还「看得一清二楚」，
是否有些过了？&lt;&#x2F;p&gt;
&lt;p&gt;「我」没有欣赏这些画的特定理由，
对画作内容亦无深刻理解，
在此之时仍愿「钻」入画中，
只能解读为「我」对画中内容有着特殊而幽微的情感。&lt;&#x2F;p&gt;
&lt;p&gt;然后是一句意味深长的话：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;但我不得不从画里出来了，
我不能在那里待太久。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这里同时有两层意思：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;我希望继续留在画里；&lt;&#x2F;li&gt;
&lt;li&gt;画里，由于某种原因，不能为人所久留。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;以及我们来看「我」对这些画的感受：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;但我总感觉好像很熟悉……
他们应当会快乐，哪怕是最后一次&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这些话听起来莫名其妙。仿佛「我」曾亲见过，
或亲历过画中场景，但由于当下的解离状态而无法确识。&lt;&#x2F;p&gt;
&lt;p&gt;此外还有一句更加令人费解的话：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;但他们没有表情&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这「没有表情」的强调在全文中重复多次，
意即此中的所有人物均缺乏了「表情」这一要素，
而是不完整的。&lt;&#x2F;p&gt;
&lt;p&gt;赏毕前两幅画，「我」注意到一位神秘人物。
我们注意到老妇出场时「我」的心理是：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我这时才看见她，原来这画廊里还有人。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;且让我们回顾全文开头对画廊构造的描述：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;画廊不窄，很长，中间是一排长凳。
没有窗户，两边淡粉的墙上交错挂着油画。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;我们注意到这里根本没有能藏下一个人，
且不被连续观赏两幅画的「我」发现的处所。&lt;&#x2F;p&gt;
&lt;p&gt;那么事情就开始便得有趣起来了，
老妇人只能是在「我」观赏第二幅画的中途
突然出现在画廊中的。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;题外话&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
此处老妇人形象灵感取自某动漫作品。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;紧接其后「我」感觉到：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;一种慈祥亲切的感觉像风一样吹过来。
我到她身边，坐下，
把手平放在膝头上。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;如果仅仅是由于老人的气质，
「我」最多会感到「慈祥亲切」，
而很难在坐下时自动地
「把手平放在膝头上」。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;题外话&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
「把手平放在膝头上」的表述是对残雪
《山上的小屋》的致意。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;说明「我」对老妇人同样存在着
「熟悉但解离」的印象。&lt;&#x2F;p&gt;
&lt;p&gt;接下去是一段对话，
作者特意用逗号强调了老妇人语气的平和柔缓。
但「我」对「叫什么名字」的回答却是：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我……我穿着一身西装。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这里的省略号是有用意的。
「我」处在一种解离状态下，
面对提问想要记起，
却无能为力，最终只能求助于自己的装束，
给出了「我穿着一身西装」这样看似
驴唇不对马嘴的回答。&lt;&#x2F;p&gt;
&lt;p&gt;接下来几轮对话继续丰富「画」的隐喻：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;「你认识这画里的人吗？」&lt;br &#x2F;&gt;
「……我感到很熟悉。」&lt;br &#x2F;&gt;
「他们都是我爱的人。」&lt;br &#x2F;&gt;
一位端着牛奶的少女从面前的画里探出头来……&lt;br &#x2F;&gt;
……&lt;br &#x2F;&gt;
「没有人能长久待在画里，
也没有人能长久待在画廊里。」&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;让我们目前来盘点此文中「画」的特质：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;动态性与轻度的交互性&lt;&#x2F;li&gt;
&lt;li&gt;为「我」和老妇所熟悉&lt;&#x2F;li&gt;
&lt;li&gt;与「我」和老妇有着特殊且深刻的情感联系&lt;&#x2F;li&gt;
&lt;li&gt;由于某些原因而不可为「我」所久留&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;至此而止，此作中「画」的面纱几乎被彻底解开，
其是指：记忆。&lt;&#x2F;p&gt;
&lt;p&gt;后文的「他们是影子」亦与「没有表情」呼应，
表达了记忆相对过往真实在交互性方面的缺陷。&lt;&#x2F;p&gt;
&lt;p&gt;而少女从画中钻出的情节，
亦隐含了老妇人突然出现于画廊中的原因。&lt;&#x2F;p&gt;
&lt;p&gt;有了以上诸点之铺垫，
「我」在「不知道她想表达什么」的解离之外
「感到悲伤」就不难理解了。&lt;&#x2F;p&gt;
&lt;p&gt;接下来「我」从长椅上起身来继续旅程，
我们在此注意到一个细节：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;她看看表：「好了，小伙子，是时候出发了。」&lt;br &#x2F;&gt;
……&lt;br &#x2F;&gt;
「我的腿将我撑起来」&lt;br &#x2F;&gt;
「一幅幅画向我身后移动」&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;「我」不仅在意识上是解离的，
而且在行动上是高度非自主的。
更确切地说，从进入画廊那一刻起，
「我」几乎从未得以有过自主的行动。&lt;&#x2F;p&gt;
&lt;p&gt;进入画廊，是「我发现自己走在一间画廊里」，
被未知的力量所安排，在自己醒悟时便已身处其间。&lt;&#x2F;p&gt;
&lt;p&gt;从老妇身边站起时，是
「我的腿将我撑起来」；
行动时，是腿「把我带向前方」，
强调腿的推动作用而非人的决策作用，
仿佛腿的行动是腿自发的动作，
而非受头脑指挥的结果。&lt;&#x2F;p&gt;
&lt;p&gt;「我」看似是一个独立的个体，
但在画廊这段旅途中受到彻底的摆布，
对自己的命运无力决定，甚至无力知晓，
以致于当老妇说到「是时候出发了」时，
「我」仍在天真地询问「去哪」，
而不知自己早已丧失了抉择的权利。&lt;&#x2F;p&gt;
&lt;p&gt;让我们再来审视这段旅途本身。
目前所知其已有的特点是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;丧失自主权&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;首次来到&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;有明确指南来了解自己的部分预期行动&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我断定我从未来过这里，
但我知道一个来到这里的人应当做什么&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;以记忆的走马灯式回溯为过程&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;以记忆某种程度的不可逆消逝为终焉&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;我们得到了一个十分骇人的结果，
这段旅途是：一段生命旅程的终结。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;题外话&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
此小说构思时原本尝试用画廊之行
隐喻回光返照与死亡；
但经一些 LLM 的点拨，
此文实际对生命的许多重要转点都适用，
例如升学、婚姻、退伍等。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;那么在这段生命旅途的尽头，
当「我」面对着一切的消逝，
我的表现如何呢？
作者提得隐晦而克制：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我这时才想到事情要坏，
转过头，听见呼呼的风声……&lt;br &#x2F;&gt;
……&lt;br &#x2F;&gt;
被这么多人盯着让我感觉很不自在，
好像做什么都不对。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;以上便是对「我」的反应的全部描述。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;题外话&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
网络上曾流传有一段据称是对于
史铁生《我与地坛》的书评：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个人在十三四岁的夏天捡到一支真枪，&lt;br &#x2F;&gt;
因为年少无知而扣下扳机，
当时没有人死也没有人受伤，
他以为自己开了空枪。&lt;br &#x2F;&gt;
但当他到了三四十岁或者更老时，
走在路上听到背后有风声，
他停下来转过身去，
子弹正中眉心。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;此段的表述意在向其致意。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;与之对比的是画廊中人们的活动：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;熊熊的火焰正开始燃烧。
画里的人物都开始看着我，向我挥手。&lt;br &#x2F;&gt;
……&lt;br &#x2F;&gt;
人们开始跳起来招手，
然后有人把身子从画里探出来。
他们不惧怕火焰，
他们只是不停地向我告别。
那些被火吞噬的人物，
他们再也没有出现过。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;有 LLM 将此段解读为是「狂欢式的告别」，
我不同意。&lt;&#x2F;p&gt;
&lt;p&gt;显然画廊中的人物们 &lt;strong&gt;清楚&lt;&#x2F;strong&gt;
火焰在燃烧，亦 &lt;strong&gt;清楚&lt;&#x2F;strong&gt;
被火吞噬即是终结。&lt;&#x2F;p&gt;
&lt;p&gt;在它们所不可避免的生命（如若他们有）
的最后，他们所希望的事情是——
与「我」好好告别。&lt;&#x2F;p&gt;
&lt;p&gt;因此它们挥手，疯狂地挥手，
然后从画中探出头，
它们极尽它们存在于记忆中的生命力之至，
它们从画中跃出，
不惜一切代价给「我」一个温情的告别。&lt;&#x2F;p&gt;
&lt;p&gt;它们的确不惧怕火焰，它们惧怕孤独。&lt;&#x2F;p&gt;
&lt;p&gt;或说，它们惧怕「我」的孤独。&lt;&#x2F;p&gt;
&lt;p&gt;那事情就止于此了吗？&lt;&#x2F;p&gt;
&lt;p&gt;不然。
犹记李白有诗云：
「仍怜故乡水，万里送行舟。」
可真是故乡水怜我送我？
非也。
长江千古以来均如是，
何来「送我」？
长江之「送」，
实则是「我」情感之投射，是谓「对写」。
王国维云
「以我观物，故物皆着我之色彩」，
此之谓也。&lt;&#x2F;p&gt;
&lt;p&gt;本文此处所用，即是一种典型的对写。
作者看似用笔克制，
对「我」的感受不着一墨，
但画中人的举动，早已映衬了「我」的内心。
此处较通常对写更特殊处在于，
画中之人，本就是「我」的内心记忆之投射。
综上，当熊熊火焰不断漫卷，
画中人尽最后的努力传递温情，
「我」的举动如何，即不言自明。&lt;&#x2F;p&gt;
&lt;p&gt;有判词曰：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;黄犬一言叹千古，二十四桥月无声。&lt;br &#x2F;&gt;
春风空抚江南岸，斯人斯裳再不还。&lt;br &#x2F;&gt;
烈火焚过丹青处，仆地抢首君岂知？&lt;br &#x2F;&gt;
——&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;becharmkon.cn&#x2F;blog&#x2F;2026&#x2F;07-jul&#x2F;quad-ii&#x2F;&quot;&gt;《题塞缪尔·贝克特〈方庭〉其二》&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注：&lt;br &#x2F;&gt;
黄犬，指李斯「黄犬叹」典故；&lt;br &#x2F;&gt;
二十四桥，语出《扬州慢》；&lt;br &#x2F;&gt;
江南岸，语出《泊船瓜州》；&lt;br &#x2F;&gt;
斯人斯裳，指 &lt;em&gt;Woman with a Parasol&lt;&#x2F;em&gt; 中的女性；&lt;br &#x2F;&gt;
烈火焚过丹青处，指本文结局；&lt;br &#x2F;&gt;
仆地抢首，指因悲痛而俯倒，崩溃得以头撞地。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;最终一句「然后一切都消失了」，
看似客观，实则
字字千钧，字字泣血。&lt;&#x2F;p&gt;
&lt;p&gt;综上，本文尝试描绘的是，
当一段生命旅途结束时，
我们面对记忆远去的无奈与悲怆。&lt;&#x2F;p&gt;
&lt;p&gt;在此，我谨以这样的问题来收束：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;如若别离是必然的结果，
那么相遇还有何意义？&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>『题塞缪尔·贝克特「方庭」』及其注解批判</title>
        <published>2026-07-19T00:00:00+00:00</published>
        <updated>2026-07-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/07-jul/quad/"/>
        <id>https://becharmkon.cn/blog/2026/07-jul/quad/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/07-jul/quad/">&lt;h1 id=&quot;guan-yu-sai-mou-er-bei-ke-te-fang-ting&quot;&gt;关于塞缪尔·贝克特『方庭』&lt;&#x2F;h1&gt;
&lt;p&gt;演出视频请见：&lt;&#x2F;p&gt;
&lt;iframe src=&quot;&#x2F;&#x2F;player.bilibili.com&#x2F;player.html?isOutside=true&amp;aid=20140793&amp;bvid=BV1cW411t7kG&amp;cid=32876278&amp;p=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;p&gt;原作剧本中包含了更多细节，
详情可参阅湖南文艺出版社 2016 年版
『贝克特全集』第十九卷第 359 页。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;guan-yu-ti-sai-mou-er-bei-ke-te-fang-ting-yuan-shi&quot;&gt;关于『题塞缪尔·贝克特「方庭」』原诗&lt;&#x2F;h1&gt;
&lt;p&gt;这是我于高中时期某次受了刺激所作，
说起来我受刺激的时候可真不少，
而每次受了刺激都能……咳咳，扯远了。
总之当年具体受了什么刺激我早忘得一干二净，
但从文本内容来看，当年的刺激似乎不小。&lt;&#x2F;p&gt;
&lt;p&gt;原文充斥着受了刺激之后的虚无主义气息，
本不应该发表。这确实没得洗。
但与此同时，我偶尔重读此作，觉得似乎又有些
文学水平在里头。好吧，那就发吧，
满足一下我个人卑劣的分享欲。
不得不请诸位辩证看待其中内容了。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;题赛缪尔·贝克特『方庭』&lt;br &#x2F;&gt;
空必聪&lt;&#x2F;p&gt;
&lt;p&gt;人生能得几春风？幽回低转乃真意。&lt;br &#x2F;&gt;
潮起汐落舟不渡，白首空回不知归。&lt;br &#x2F;&gt;
皇天后土且喟问，谁令游子羁逆旅？&lt;br &#x2F;&gt;
魂牵桑梓何处是？泪雨缥缈幻梦里。&lt;br &#x2F;&gt;
青莲已谢紫烟散，季宣无以隐山林。&lt;br &#x2F;&gt;
六月扶摇送舟去，不知三山与污泥。&lt;br &#x2F;&gt;
秋兰辟芷钟此身，救不得，唯留空文后世敬。&lt;br &#x2F;&gt;
还矢先王入太庙，可曾想，转眼身亡国破碎。&lt;br &#x2F;&gt;
酾酒临江分天下，百年后，亦是累累冢卧麟。&lt;br &#x2F;&gt;
且不论修短随化终期尽，白驹过隙间，顺遂能几何？&lt;br &#x2F;&gt;
人生有命命已定，聊且听余作悲声！&lt;br &#x2F;&gt;
试论朱弦不曾绝，君视锦瑟岂有弦？&lt;br &#x2F;&gt;
敢论苍天不老情难绝，君可见紫皇童颜百姓歌？&lt;br &#x2F;&gt;
五柳逝，羲皇远！&lt;br &#x2F;&gt;
富贵帝乡非吾愿，清平安居不可期！&lt;br &#x2F;&gt;
世尘堪破再无感，颠沛飘飖尽余生。&lt;br &#x2F;&gt;
生死朝暮人同轨，殚精求索岂非虚？&lt;br &#x2F;&gt;
藉此以谢轮回客：人间非福土，审慎莫淹留！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;jian-yi-jian-zhu&quot;&gt;简译简注&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;人生能有多少次春风得意之时呢？
幽暗低谷与兜兜转转才是人生的真谛。&lt;&#x2F;p&gt;
&lt;p&gt;早潮涌起，晚汐落下，生命的小舟终究无法抵达。
站在岁月尽头回望，枉白了满头青丝，却不知归向何方。&lt;br &#x2F;&gt;
（潮：早潮。汐：晚潮。）&lt;&#x2F;p&gt;
&lt;p&gt;我且向那苍天与大地，叹息发问：
是谁让我这可怜的旅客迷失在人生的道途中央？&lt;br &#x2F;&gt;
（逆旅：指人生。语出苏轼『临江仙·送钱穆父』。）&lt;&#x2F;p&gt;
&lt;p&gt;那使我魂牵梦绕的精神家乡，它在何方？
只在隐约幻梦当中，催我泪雨飘荡。&lt;&#x2F;p&gt;
&lt;p&gt;水中亭亭的荷，与诗仙一同凋零；
庐山升起的水烟，色泽随之褪去。
李季宣啊，你又凭借什么来安隐山林呢？&lt;br &#x2F;&gt;
（青莲：指青莲居士李白。
紫烟：语出李白『望庐山瀑布』。
季宣无以隐山林：典出汤显祖『青莲阁记』，
此指诗人般的浪漫褪色，
季宣亦失去隐居的精神凭依。）&lt;&#x2F;p&gt;
&lt;p&gt;六月的海风扬帆送我，
可谁知那彼岸是仙山还是淤泥？&lt;br &#x2F;&gt;
（六月扶摇：传说中海上六月的大风，
语出庄子『逍遥游』。
送舟去：语出李清照『渔家傲·记梦』。
三山：东海上的三座仙山。）&lt;&#x2F;p&gt;
&lt;p&gt;即便身具美妙的品质，
如秋日兰花般静雅，
亦若幽辟处白芷芬芳，
屈子亦未救己于命运，
空留下文章供人景仰；&lt;br &#x2F;&gt;
（秋兰辟芷：语出屈原『离骚』，
都是香草名。此处代指屈原。
救不得：一语双关，
屈原未能救得楚国，
他亦未能救得自己。）&lt;&#x2F;p&gt;
&lt;p&gt;当庄宗杀死仇敌，对父亲的英灵报告，
又有谁想到其转眼国破家亡？&lt;br &#x2F;&gt;
（还矢先王：指后唐庄宗李存勖。
事见欧阳修『五代史伶官传序』。）&lt;&#x2F;p&gt;
&lt;p&gt;曹操曾面对长江豪饮，
勇猛征战，雄霸一方；
百年后，亦只有坟墓稍具气场。&lt;br &#x2F;&gt;
（酾酒临江：语出苏轼『赤壁赋』，
指曹操面对大江斟酒。
冢卧麟：既可指杰出人物的冢墓犹现其生前英姿，
亦可指风流远去唯剩陵幕。）&lt;&#x2F;p&gt;
&lt;p&gt;且不论人生长短，终究凋零，
仅在这短短生命中，有几事又能顺意？&lt;br &#x2F;&gt;
（修短随化终期尽：语出王羲之『兰亭集序』，
指人生长短由造化而定，但最终都将完结。）&lt;&#x2F;p&gt;
&lt;p&gt;人生的命数早已确定，
且听我奏响这无益的悲歌！&lt;&#x2F;p&gt;
&lt;p&gt;我要尝试论说，那常喻知己的朱弦从未断绝，
因你请看那锦瑟何曾真有琴弦？&lt;br &#x2F;&gt;
（锦瑟：或是在化李商隐『无题·锦瑟无端五十弦』之典。
此句意为「朱弦从未有过，因此永不断绝」。）&lt;&#x2F;p&gt;
&lt;p&gt;我敢说苍天不老，人情不断，
想你几时见过玉皇年轻，百姓欢歌？&lt;br &#x2F;&gt;
（如上句，指苍天早已迟暮，因此不可能再度衰老；
人情早已绝迹，因此不可能再度断绝。
反用张先『千秋岁·数声鶗鴂』。）&lt;&#x2F;p&gt;
&lt;p&gt;陶潜那般的隐士早已死去，
上古的安逸生活亦成缥缈残歌！&lt;br &#x2F;&gt;
（五柳：指东晋著名诗人陶渊明。
羲皇：远古时代的帝王。
传说远古时代百姓生活安乐。）&lt;&#x2F;p&gt;
&lt;p&gt;荣华加身本非我愿，
可连生活安定平稳的期望
如今亦成泡影。&lt;br &#x2F;&gt;
（富贵帝乡：语出陶渊明『归去来兮辞』。）&lt;&#x2F;p&gt;
&lt;p&gt;看穿世尘，我心再无波澜。
颠沛飘零中，我且过我孤独的余生。&lt;&#x2F;p&gt;
&lt;p&gt;生与死、早与迟，
世间道路一回事。
殚精竭虑，孜孜求索；
一朝踏空，万古销蚀。&lt;br &#x2F;&gt;
（人同轨：应当是对『方庭』的化用。）&lt;&#x2F;p&gt;
&lt;p&gt;谨以此诗告诫轮回中的行客：
人间远非福禄地，
务要当心莫驻足！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;xie-zai-zui-hou&quot;&gt;写在最后&lt;&#x2F;h1&gt;
&lt;p&gt;如我前述，我们当辩证看待此文。
其文学水平的确为我所著的文章中相对出挑者，
但其虚无主义的悲观思想不应当被提倡。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;且去想象西西弗斯、伊卡洛斯与普罗米修斯的快乐。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>请停止滥用统计学规律进行所谓的 AIGC 检测</title>
        <published>2026-07-13T00:00:00+00:00</published>
        <updated>2026-07-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/07-jul/stop-detecting-ai-with-statistical-patterns/"/>
        <id>https://becharmkon.cn/blog/2026/07-jul/stop-detecting-ai-with-statistical-patterns/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/07-jul/stop-detecting-ai-with-statistical-patterns/">&lt;p&gt;AI 发展方兴未艾，对 AI 的滥用亦如是。&lt;&#x2F;p&gt;
&lt;p&gt;AI 检测技术应运而生，对 AI 检测技术的滥用亦如是。&lt;&#x2F;p&gt;
&lt;p&gt;当 AI 出现在诸多其不应当出现之处，
人们试图通过各样手段来「侦测」AI 的不当使用，
这是刚需，也属正当。
但本文将要探讨的是这其中最广泛的，
甚至可能是我们每天正下意识使用的，
某些基于统计学规律的手段，
对人类，以及人类社群的优良生态所造成的伤害。&lt;&#x2F;p&gt;
&lt;p&gt;最近，我听到一位先生说：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;你看，这份作业里中文和英文中间都有空格，我知道 AI
就喜欢这么加。这作业恐怕是直接从网页里复制来一个字都没改的。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;我心想：好嘛，那我写了这么多年盘古之白，我成 AI 了呗。&lt;&#x2F;p&gt;
&lt;p&gt;但这显然也不能怪那位先生，盘古之白并非强制标准，他大概率并不知道这么一回事，
只是被用 AI 应付了事的学生们弄入了绝望境地。&lt;&#x2F;p&gt;
&lt;p&gt;稍加反思，其实这样的现象也很容易解释，AI 的语料库中包含大量技术社区的优秀文档，
而这些文档全部遵循开源社区的良好规范——盘古之白。
于是 AI 有样学样，越学越好，这本来是好事；没承想成了「区分 AI」用的抓手。&lt;&#x2F;p&gt;
&lt;p&gt;与之类似的还有所谓的「AI 味」，与饱受诟病的「AIGC 检测」。
由于 AI 的训练库中有太多的论文，尝试降低 AIGC 率的学生们最终陷入
「越像论文，越像 AI」的怪圈。&lt;&#x2F;p&gt;
&lt;p&gt;这样的事例越来越多，以致于我们不得不思考这样一件事：
AI 的训练集本就包含了最高质量的人类写作内容，而且其被鼓励生成高质量的文章。
那么高质量文章的标准为何？&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;是遵循 W3C 规范使用盘古之白给文字增加呼吸感&lt;&#x2F;li&gt;
&lt;li&gt;是使用专业、正式的语言保持学术活动严肃性&lt;&#x2F;li&gt;
&lt;li&gt;是广泛使用 Markdown 格式增强文本可读性&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;但当这些良好习惯被 AI 习得，又反过来被人们用作区分 AI 的「特征」，
这只会最终驱逐真正优秀的文本，而这恰与我们识别 AI 的初衷背道而驰。&lt;&#x2F;p&gt;
&lt;p&gt;我由此呼吁，停止滥用统计学特征进行 AI 识别，无论使用算法或肉眼。
我们不能因为 AI 生成的东西「好」，就把「好东西」全部当成是 AI。
识别 AI 固然是刚需，但一竿子打翻一船人，对于倡导高质量文本无疑贻害更重！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>归去来</title>
        <published>2026-06-18T00:00:00+00:00</published>
        <updated>2026-06-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/06-jun/part-and-reunion/"/>
        <id>https://becharmkon.cn/blog/2026/06-jun/part-and-reunion/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/06-jun/part-and-reunion/">&lt;p&gt;我走在一条长路上，&lt;br &#x2F;&gt;
一路将山花采撷。&lt;&#x2F;p&gt;
&lt;p&gt;清晨的雾织造出仙境，&lt;br &#x2F;&gt;
群花以露珠将自我点缀；&lt;br &#x2F;&gt;
春光里，百虫跳着甜蜜的舞蹈；&lt;br &#x2F;&gt;
至若夏夜，流萤又搭出地上的银河。&lt;&#x2F;p&gt;
&lt;p&gt;一天，我希望细数过往珍藏，&lt;br &#x2F;&gt;
打开篮，却发现空无一物。&lt;&#x2F;p&gt;
&lt;p&gt;想必是遗落在来路上了吧。&lt;br &#x2F;&gt;
我回头望去，&lt;br &#x2F;&gt;
身后的道路正漂浮起来，&lt;br &#x2F;&gt;
在上升中扭变，&lt;br &#x2F;&gt;
化为七色的虹，&lt;br &#x2F;&gt;
然后最终幻灭。&lt;&#x2F;p&gt;
&lt;p&gt;我吓坏了，&lt;br &#x2F;&gt;
我怕脚下的路也将如是浮起，&lt;br &#x2F;&gt;
那我该向何处安居？&lt;&#x2F;p&gt;
&lt;p&gt;于是我开始奔跑。&lt;br &#x2F;&gt;
我跑在一条长路上，&lt;br &#x2F;&gt;
一路将山花采撷。&lt;&#x2F;p&gt;
&lt;p&gt;疾风拂过我的身侧，&lt;br &#x2F;&gt;
风里依稀是百花的笑语；&lt;br &#x2F;&gt;
在我身后，七色的虹彩翻转变换，&lt;br &#x2F;&gt;
向前方映出隐约的回环。&lt;&#x2F;p&gt;
&lt;p&gt;我不要七彩的幻灭，我要向远方&lt;br &#x2F;&gt;
去逐那鲜活的百花、&lt;br &#x2F;&gt;
流动的芳香。&lt;&#x2F;p&gt;
&lt;p&gt;于是我越跑越快。&lt;&#x2F;p&gt;
&lt;p&gt;我飞奔在一条长路上，&lt;br &#x2F;&gt;
随手抓起泥、草与山花来采撷。&lt;&#x2F;p&gt;
&lt;p&gt;我越跑越快，&lt;br &#x2F;&gt;
身后的道路仍在消散。&lt;br &#x2F;&gt;
或许某天我会跑得无形，&lt;br &#x2F;&gt;
变成长路上一阵风。&lt;br &#x2F;&gt;
而我的花篮，与我爱的百花，&lt;br &#x2F;&gt;
将落下，然后&lt;br &#x2F;&gt;
在这风中飘散，&lt;br &#x2F;&gt;
化为虹霞。&lt;&#x2F;p&gt;
&lt;p&gt;我飘散在一条长路上，&lt;br &#x2F;&gt;
那里曾山花烂漫。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>PDF 跨平台显示乱码？可能是因为字体没有嵌入</title>
        <published>2026-06-09T00:00:00+00:00</published>
        <updated>2026-06-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/06-jun/pdf-font-embedding/"/>
        <id>https://becharmkon.cn/blog/2026/06-jun/pdf-font-embedding/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/06-jun/pdf-font-embedding/">&lt;blockquote&gt;
&lt;p&gt;创作声明：由 AI 在人类指导下创作。人工已审核正确性。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;使用 Pandoc + XeLaTeX 在 Linux 下生成的 PDF，发到 Windows 上打开全是乱码方块——这个问题我踩过了，写下来备忘。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yuan-yin&quot;&gt;原因&lt;&#x2F;h2&gt;
&lt;p&gt;PDF 文件本身&lt;strong&gt;不会默认内嵌字体&lt;&#x2F;strong&gt;。它只在文件中记一笔「这里用思源宋体」，渲染时去系统里找这个字体。Linux 上编译时字体是齐全的，但 Windows&#x2F;Mac 上没装同样的字体，系统就会用乱七八糟的 fallback 顶上，结果就是乱码。&lt;&#x2F;p&gt;
&lt;p&gt;检查一个 PDF 的字体是否已嵌入，用 &lt;code&gt;pdffonts&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;pdffonts&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; doc.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;输出中 &lt;code&gt;emb&lt;&#x2F;code&gt; 列全是 &lt;code&gt;yes&lt;&#x2F;code&gt; 才说明字体已嵌入。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-jue-fang-an&quot;&gt;解决方案&lt;&#x2F;h2&gt;
&lt;p&gt;给 Pandoc 的 xelatex 引擎加一个编译选项：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;pandoc&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; doc.md&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-constant z-character&quot;&gt; --pdf-engine=xelatex \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other&quot;&gt;    --metadata-file&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.pandoc&#x2F;zh-metadata.yaml&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-other&quot;&gt;    -o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; doc.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;code&gt;zh-metadata.yaml&lt;&#x2F;code&gt; 中加入一行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;documentclass&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ctexart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mainfont&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Source Han Serif CN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;monofont&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; WenQuanYi Micro Hei Mono&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;CJKoptions&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;UTF8&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; EmbedAll&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt;       # ← 这一行&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;papersize&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; a4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;geometry&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; margin=2.5cm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;关键在于 &lt;code&gt;CJKoptions: [UTF8, EmbedAll]&lt;&#x2F;code&gt;，它告诉 XeLaTeX 把所有用到的中文字体都打包进 PDF。&lt;&#x2F;p&gt;
&lt;p&gt;改完 metadata 文件后，以后所有用 Pandoc 生成的 PDF 都会自动内嵌字体，发到任何设备上打开都不会乱码。&lt;&#x2F;p&gt;
&lt;p&gt;熬了一晚上终于解决了这个阴间问题，再不写下来下次一定又忘。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>C++17 以前赋值运算符左右运算顺序不定导致的悬垂引用问题</title>
        <published>2026-06-06T00:00:00+00:00</published>
        <updated>2026-06-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/06-jun/hung-reference-in-cpp/"/>
        <id>https://becharmkon.cn/blog/2026/06-jun/hung-reference-in-cpp/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/06-jun/hung-reference-in-cpp/">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;声明&lt;&#x2F;strong&gt;：由于身体报恙，本文使用 AIGC 辅助创作。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;二更：人工审稿后发现此文过程全错，但至少结果是对的。
烦请各位高抬贵手，将就看看吧。确实没精力改了。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;今天刷算法题，题目要求从 stdin
读入一棵树，具体格式是前序遍历，
空子结点用 -1 表示，于是有了如下代码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;std&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; buildTree &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;]() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;    int&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;!&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;std&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;cin &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; val)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; (val &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;== -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;    int&lt;&#x2F;span&gt;&lt;span&gt; mlc_copy &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; mlc&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; (mlc_copy &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt; cont&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;size&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;        cont&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;        lcd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;        rcd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;    cont[mlc_copy]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;    lcd[mlc_copy]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; buildTree&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;    rcd[mlc_copy]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; buildTree&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; mlc_copy&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这其中，&lt;code&gt;cont&lt;&#x2F;code&gt;, &lt;code&gt;lcd&lt;&#x2F;code&gt; 和 &lt;code&gt;rcd&lt;&#x2F;code&gt; 分别是三个
&lt;code&gt;std::vector&amp;lt;int&amp;gt;&lt;&#x2F;code&gt; 类型变量，分别存储
结点的值、左子索引和右子索引。
没有对应孩子时，索引部分存 0。
而 &lt;code&gt;mlc&lt;&#x2F;code&gt; 则是 memory alloc 的缩写，
其在此处的意义是从三数组中分配出一个未
被使用的索引给这个新读到的结点。&lt;&#x2F;p&gt;
&lt;p&gt;值得注意的是，为了节省空间，此处的 &lt;code&gt;cont&lt;&#x2F;code&gt;,
&lt;code&gt;lcd&lt;&#x2F;code&gt; 和 &lt;code&gt;rcd&lt;&#x2F;code&gt; 三个数组在开始时都相当小，
在空间不足时会自动扩容。&lt;&#x2F;p&gt;
&lt;p&gt;该函数读取一个结点，然后递归构建其左右
子树，存下子树根结点索引，最后返回自身根索引。&lt;&#x2F;p&gt;
&lt;p&gt;但这段代码在实际使用中在
&lt;code&gt;lcd[mlc_copy] = buildTree();&lt;&#x2F;code&gt; 一行出现
段错误，线上 OJ 平台也挂了几个测试点，
有 SIGSEGV 也有 WA。&lt;&#x2F;p&gt;
&lt;p&gt;乍一看，这像是经典的
&quot;&lt;code&gt;std::vector&lt;&#x2F;code&gt; 扩容导致引用失效&quot;问题：
&lt;code&gt;lcd[mlc_copy]&lt;&#x2F;code&gt; 返回一个 &lt;code&gt;int&amp;amp;&lt;&#x2F;code&gt;（本质是指向
vector 内部缓冲区的指针），然后递归调用
&lt;code&gt;buildTree()&lt;&#x2F;code&gt; 触发 &lt;code&gt;emplace_back&lt;&#x2F;code&gt; → 缓冲区
重新分配 → 老指针变为悬垂 → 写入时爆炸。&lt;&#x2F;p&gt;
&lt;p&gt;但真的这么简单吗？&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deng-deng-de-yun-suan-shun-xu-shi-zen-yang-de&quot;&gt;等等，= 的运算顺序是怎样的？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;lcd[mlc_copy] = buildTree()&lt;&#x2F;code&gt; 这条语句中，
左右操作数谁先求值？&lt;&#x2F;p&gt;
&lt;p&gt;很多人（包括最初的我）第一反应是：
&quot;赋值当然先算左边再算右边啊&quot;。但 C++
标准并不这么保证——至少老的版本不保证。&lt;&#x2F;p&gt;
&lt;p&gt;对于 &lt;code&gt;operator=&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C++17 之前&lt;&#x2F;strong&gt;：左、右操作数的求值顺序
&lt;strong&gt;未指定&lt;&#x2F;strong&gt;（unspecified）。编译器可能先算左边，
也可能先算右边，完全取决于实现。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;C++17 起&lt;&#x2F;strong&gt;：标准明确规定右操作数
&lt;strong&gt;先于&lt;&#x2F;strong&gt;左操作数求值，所有副效应在左侧求值
之前完成。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ben-di-wei-shen-me-neng-guo-oj-wei-shen-me-zha&quot;&gt;本地为什么能过？OJ 为什么炸？&lt;&#x2F;h2&gt;
&lt;p&gt;来看本地编译环境：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ g++ --version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;g++ (GCC) 16.1.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ g++ -dM -E -x c++ &#x2F;dev&#x2F;null | grep __cplusplus&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#define __cplusplus 202002L  &#x2F;&#x2F; 默认 C++20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;本地 g++ 16 默认 C++20。&lt;code&gt;= &lt;&#x2F;code&gt; 的求值顺序
遵守 C++17 规约：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;先求值 &lt;code&gt;buildTree()&lt;&#x2F;code&gt; → 递归执行完毕，
该扩容的扩容完了，所有 vector 存储稳定。&lt;&#x2F;li&gt;
&lt;li&gt;再求值 &lt;code&gt;lcd[mlc_copy]&lt;&#x2F;code&gt; → 拿到一份**
稳定存储上**的引用。&lt;&#x2F;li&gt;
&lt;li&gt;写入 → 安全。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;所以本地跑一万遍都不会出问题。&lt;&#x2F;p&gt;
&lt;p&gt;但线上 OJ 通常用的什么编译器？看这题目
风格，多半是老旧的 g++ 5.x&#x2F;7.x，默认 C++14
甚至 C++11。在这些标准下编写者，
&lt;code&gt;=&lt;&#x2F;code&gt; 左右两边的求值顺序是&lt;strong&gt;未指定&lt;&#x2F;strong&gt;的。&lt;&#x2F;p&gt;
&lt;p&gt;如果编译器选择了这样求值：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;先求值 &lt;code&gt;lcd[mlc_copy]&lt;&#x2F;code&gt; → 拿到当前存储
（容量已满，即将扩容）上的引用。&lt;&#x2F;li&gt;
&lt;li&gt;再求值 &lt;code&gt;buildTree()&lt;&#x2F;code&gt; → &lt;code&gt;emplace_back&lt;&#x2F;code&gt;
触发扩容 → vector 扔掉旧 buffer，搬到新
位置 → 步骤 1 的引用指向已释放的旧内存。&lt;&#x2F;li&gt;
&lt;li&gt;往悬垂指针写入 → &lt;strong&gt;未定义行为&lt;&#x2F;strong&gt;
（有的跑出 SIGSEGV，有的恰好写到旧内存里
看起来像 WA，全看编译器心情和内存布局）。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这不是编译器 bug，是&lt;strong&gt;标准版本差异&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;也不是「vector 扩容导致悬垂引用」这个问题
本身有什么猫腻——这确实是 vector 扩容导致
悬垂引用，问题的奇诡之处在于&lt;strong&gt;它只在老的
C++ 标准下才会发生&lt;&#x2F;strong&gt;。在 C++17 及以后，
求值顺序的保障让它意外地变得安全了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xiu-fu&quot;&gt;修复&lt;&#x2F;h2&gt;
&lt;p&gt;把递归调用和写入拆开，对所有标准版本都安全：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; lchild &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; buildTree&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; rchild &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; buildTree&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;lcd[mlc_copy]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; lchild&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable&quot;&gt;rcd[mlc_copy]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rchild&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;写左值时 vector 存储已经稳定，无论编译器
以什么顺序求值，都不会有悬垂引用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jiao-xun&quot;&gt;教训&lt;&#x2F;h2&gt;
&lt;p&gt;C++ 的语言细节很多。&lt;code&gt;= &lt;&#x2F;code&gt; 的求值顺序看似
基础到没人会去查，但在递归 + 扩容的语境下
就成了你摸不着头脑的 bug。本地能过真的
只是因为你有个好编译器（或者说，好的默认标准）。&lt;&#x2F;p&gt;
&lt;p&gt;求求学校用点 C++17 这种现代玩意吧。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>一晌贪欢</title>
        <published>2026-05-28T00:00:00+00:00</published>
        <updated>2026-05-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/05-may/steal-a-wanton-hour-of-fleeting-joy/"/>
        <id>https://becharmkon.cn/blog/2026/05-may/steal-a-wanton-hour-of-fleeting-joy/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/05-may/steal-a-wanton-hour-of-fleeting-joy/">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;创作声明：&lt;&#x2F;strong&gt; 在个人真实经历基础上
进行大量改编拼接而来，不代表真实事件。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;我乘在母亲电动车的后座上，
天边是紫橙色的云霞。&lt;&#x2F;p&gt;
&lt;p&gt;夏日的晚风使人心旷神怡。
我们从小道上拐出，上到砂石铺就的大道。&lt;&#x2F;p&gt;
&lt;p&gt;我从没想过我们还能这样随意——
下午五点，吃过饭，
我说，我想姥姥 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#granny&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 了。
于是母亲就带我骑车过来。
聊天半晌，我们竟还能乘着霞光而归。&lt;&#x2F;p&gt;
&lt;p&gt;东方逐渐暗沉的天空使我想起一场梦，
那是一个明媚的夜，繁星满天，
我站在村口，
被大人们团团围住
——我向来不喜欢这样的场面，
因为我总认不请他们是谁，
要称呼时只能红着脸说不出话。
然而那梦里却无那种尴尬，
时间像水一样流淌，
淌在皎白的月光与星斗下。
一位老人开口问「现在上几年级了，
成绩怎样啊」。
他如此自然地问到，我便同样自然地答，
这我倒无须担心什么，
多年来我的回答总能让他们欣慰。
那老人笑了，说「好，好啊」；
旁边的叔叔搭腔「那一定能上清华北大喽」。&lt;&#x2F;p&gt;
&lt;p&gt;大家都笑了。&lt;&#x2F;p&gt;
&lt;p&gt;大家笑时我正看着月下的红砖摞，
它们在月光下不留一丝暗影，
静谧地仿佛一只猫头鹰将要钻出。&lt;&#x2F;p&gt;
&lt;p&gt;我将这梦说与母亲，她并不奇怪——
每次宴席我都被一群亲戚围住，
而每次我都不会认识他们。
这样的场景发生太多次了。
只是我偶尔会觉得，
梦中的老人似乎与阁楼上的黑白照相似。&lt;&#x2F;p&gt;
&lt;p&gt;我突然想到我或许应当认识他们，
尽管我那时仍未理解人与人间礼节的意义。
亲戚们总声称他们在某年某月抱起过我，
而我对此却全无印象。
任记忆就这样飘散，不也很遗憾吗？
我望着西方深蓝色天空笼罩的原野，不禁想到。&lt;&#x2F;p&gt;
&lt;p&gt;但我的思绪被虫子们打断了。
兆杣 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#zhaomian&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 的夏天总是闷热，
蜻蜓们在与人同高处盘旋，
黑压压盈满天空。&lt;&#x2F;p&gt;
&lt;p&gt;我向来惧怕虫类，甚至于惧怕蝴蝶般的豌豆花。
坐在后座上，我左躲右躲，却就是躲不开那漫天飞舞的
可怖的红竿与银翼。它们笼罩在三一八国道上，
似乎绵延千里，无边无际。&lt;&#x2F;p&gt;
&lt;p&gt;「蜻蜓是益虫」，妈妈说。
可我不觉得这和益虫有何关联，
他们长着同样奇诡的外表。
然而路途漫漫，久之，我也只能尝试与它们安处。&lt;&#x2F;p&gt;
&lt;p&gt;天际线上隐约有炊烟。
我忽然忘记自己已经吃过饭，说：
「老妈，我饿了。」&lt;&#x2F;p&gt;
&lt;p&gt;「你不是刚吃过吗？」&lt;&#x2F;p&gt;
&lt;p&gt;「对哦，我好像是刚吃过。」
我这才记起来，我晚饭吃了炒藕片和青椒肉丝。
我一边吃一边看科教频道的记录片，
那讲的是二战中盟军的舰队。&lt;&#x2F;p&gt;
&lt;p&gt;于是我只能转而说起明天的菜，
我说我想吃炸藕丸。
她说好，然后说起明早上市场买肉，
前夹肉最近便宜；
家里的淀粉也快见底了，要顺手带些……
我就这样在紫色的晚风中听得入迷。&lt;&#x2F;p&gt;
&lt;p&gt;恍惚间，我感到自己似乎升上天空，
从万米高空俯瞰下来，
看见蒙蒙黑的夜里一辆铁灰色的电单车，
载着笑语中的二人，
在逐渐暗沉下来的平原道路上缓缓前行。&lt;&#x2F;p&gt;
&lt;p&gt;……&lt;&#x2F;p&gt;
&lt;p&gt;我从八人合租间 &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#room&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 狭小的书桌上醒来，
电脑忘了锁屏；手边是半桶凉透的泡面。&lt;&#x2F;p&gt;
&lt;p&gt;（二零二六年夏于武汉）&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;granny&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;姥姥：按标准称呼应当是「外曾外祖母」。
老人已于一零年代初离世，她在最后的日子里几乎忘却了一切亲朋。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;zhaomian&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;兆杣：虚构地名。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;room&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;八人合租间：在现实中没有原型。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>Shell Lab 测试点中存在的一个问题（已修复）</title>
        <published>2026-05-25T00:00:00+00:00</published>
        <updated>2026-05-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/05-may/shell-lab-problem/"/>
        <id>https://becharmkon.cn/blog/2026/05-may/shell-lab-problem/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/05-may/shell-lab-problem/">&lt;p&gt;&lt;strong&gt;本文所述问题已在诸位助教学长努力下修复。向助教们致敬！&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;背景声明&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;本文适用于武汉大学『计算机系统基础』
配套的 Shell Lab 实验。
因本人精力有限，并未对 CSAPP 上游资源进行测试。
因此，本文所述内容对你的 Shell Lab
环境可能无效。请仔细甄别。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;二次更新：经检查，CMU 上游无此 trace。
请允许我在此一并向此实验的非官方扩充者们致意！
使用套接字通信来测试时序问题无疑是个天才般的主意，
即便出现了细微漏洞，在总体上也瑕不掩瑜。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AIGC 使用声明&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;本文所述漏洞在 AIGC 辅助下发现。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;今天运行 Shell Lab 对拍时我注意到一些奇妙的报错：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;47. Running trace28.txt...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Oops: test and reference outputs for trace28.txt differed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Test output:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# trace28.txt - Robustness: job continued by outside your shell&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Stop and check the job state&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Job [1] (186197) stopped by signal 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1] (186197) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Now continue it, but not through fg&#x2F;bg in shell&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1] (186197) Running    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Reference output:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# trace28.txt - Robustness: job continued by outside your shell&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Stop and check the job state&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Job [1] (186207) stopped by signal 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1] (186207) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Now continue it, but not through fg&#x2F;bg in shell&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tsh&amp;gt; jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1] (186207) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Output of &amp;#39;diff test reference&amp;#39;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6c6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt; Job [1] (186197) stopped by signal 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; Job [1] (186207) stopped by signal 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;8c8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt; [1] (186197) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; [1] (186207) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;11c11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt; [1] (186197) Running    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; [1] (186207) Stopped    .&#x2F;mycont 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;我们注意到例程 &lt;code&gt;tshref&lt;&#x2F;code&gt; 在对子进程的 &lt;code&gt;SIGCONT&lt;&#x2F;code&gt; 信号发送后
仍然输出了 &lt;code&gt;Stopped&lt;&#x2F;code&gt; 状态。&lt;&#x2F;p&gt;
&lt;p&gt;我起初以为是 &lt;code&gt;tshref&lt;&#x2F;code&gt; 例程存在问题，当成笑话发给 AI。
AI 一通分析后指出是这里的测试点错了。&lt;&#x2F;p&gt;
&lt;p&gt;trace28.txt 的内容中有这样一段：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Now continue it, but not through fg&#x2F;bg in shell&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SIGNAL # inform the child to continue its parent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;bin&#x2F;echo -e tsh\076 jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NEXT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里发送了一个信号给 &lt;code&gt;mycont&lt;&#x2F;code&gt; 程序。
让我们再来看看该程序中处理此信号的方式：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;fork&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;    &#x2F;* Child. *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;    &#x2F;* ... *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    ssize_t&lt;&#x2F;span&gt;&lt;span&gt; rc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; ((rc &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; send&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(syncfd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; cmdp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; strlen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(cmdp)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        perror&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;send&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        exit&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; ((rc &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; recv&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(syncfd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; buf&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; MAXBUF&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        perror&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;recv&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        exit&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;    &#x2F;* Send SIGCONT after handshake *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    kill&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;getppid&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt; SIGCONT)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    exit&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-section&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;我们注意到子进程在收到测评机发来的信号后，
将一个 &lt;code&gt;SIGCONT&lt;&#x2F;code&gt; 信号发给了自己的亲进程，
即是从我们的 &lt;code&gt;tsh&lt;&#x2F;code&gt; 中启动的那个。&lt;&#x2F;p&gt;
&lt;p&gt;但注意到，系统调度的次序是任意的，
即孙进程可能在 &lt;code&gt;kill&lt;&#x2F;code&gt; 后立即被调度走，
待评测机和 &lt;code&gt;tsh&lt;&#x2F;code&gt; 运行 &lt;code&gt;jobs&lt;&#x2F;code&gt; 命令结束后
子进程才被继续执行，收到信号，
然后才触发 &lt;code&gt;tsh&lt;&#x2F;code&gt; 的信号处理函数，
更新 Running 状态。&lt;&#x2F;p&gt;
&lt;p&gt;由此导致了如上的偶发错误。
在我的机器上，此错误的复现率约为 1%。&lt;&#x2F;p&gt;
&lt;p&gt;显然此错误在其他测试点中很可能同样存在，
但由于本人能力不足，暂时无法查清究竟哪些测试点受到影响。&lt;&#x2F;p&gt;
&lt;p&gt;因此，各位同学在做 Shell Lab 遇到玄学问题时，
不要怀疑，因为：&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;错的真的可能不是你，而是题。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>兆杣市志选·泽上隐</title>
        <published>2026-05-21T00:00:00+00:00</published>
        <updated>2026-05-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/05-may/ze-shang-yin/"/>
        <id>https://becharmkon.cn/blog/2026/05-may/ze-shang-yin/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/05-may/ze-shang-yin/">&lt;blockquote&gt;
&lt;p&gt;此为虚构的文学创作。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;出兆杣市东坊二里，为一大泽，水汽升腾，白露千里，终年难散。人所不至也。&lt;&#x2F;p&gt;
&lt;p&gt;二年春，有渔者误入。因泽中少有人至，所获颇丰。然烟波茫，归路迷。四望，见雾中仿佛一点翠绿，抵近，乃一沙洲。&lt;&#x2F;p&gt;
&lt;p&gt;洲上有隐者，自谓空空道人，香茗待之。遂相识。至露略散乃归。&lt;&#x2F;p&gt;
&lt;p&gt;二日，渔人又往，谒道人，授以鱼。道初不悦，后与坐谈，笑语竟闻市坊。因之常往。&lt;&#x2F;p&gt;
&lt;p&gt;四月，道随渔来市，自曰市坊奇物，前所未闻。市人见其仙风道骨，亦异之。有倩其把脉算命，测谶福凶者，或与而或弃。&lt;&#x2F;p&gt;
&lt;p&gt;久之，至若景明云开，洲可得见于岸。二人携行于市，亦成常景。道亦置舟，或而独往。&lt;&#x2F;p&gt;
&lt;p&gt;三年，渔之舟覆，惊骇而亡。因是道不再来。&lt;&#x2F;p&gt;
&lt;p&gt;五年，旱。白露尽消，而洲不再。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh-CN">
        <title>网站正式上线</title>
        <published>2026-05-20T00:00:00+00:00</published>
        <updated>2026-05-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://becharmkon.cn/blog/2026/05-may/at-last-online/"/>
        <id>https://becharmkon.cn/blog/2026/05-may/at-last-online/</id>
        
        <content type="html" xml:base="https://becharmkon.cn/blog/2026/05-may/at-last-online/">&lt;p&gt;今天，也即 2026 年 5 月 20 日，
此网站备案流程走完，正式上线！&lt;&#x2F;p&gt;
&lt;p&gt;普天同庆，
特此广谕天下~&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;鉴于「关于」页面还在建设中
（实际是还什么都没开始），
在此先贴出我个人的联系方式：
&lt;a href=&quot;mailto:ziyicai@becharmkon.cn&quot;&gt;ziyicai@becharmkon.cn&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;本人很不喜欢微信和 QQ，
因此就不鼓励各位网友从这两个渠道联系我了，
见谅！&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
