鉴真阁的核史官
一、最好的史官,出了一段假史国史馆里,论才情,没人比得上何太史。 何太史大名何敏行,三十四岁入史馆,四十二岁升太史。他修过《世宗实录》,主编过《皇朝通典》,经手的文稿摞起来比他本人还高两头。同僚们说:"何太史写的人物列传——你读着就觉着这人好像刚从你面前走过去。" 但偏偏就是在人物列传上,何太史出过一次大错。 去年国史馆重修《文宗实录》。何太史负责写六位大臣的列传。其中一位叫盛文昭——做过一任礼部侍郎,不算很有名。何太史洋洋洒洒写了三千字。写了他哪年科举、哪年中进士、哪年上过一道著名的"请罢矿监"折子——写得绘声绘色,从殿上对答到同僚侧目都写了。 稿子送到总纂官案头。总纂官姓陈,是个以"龟毛"闻名的老学究——一个年份前后差半年他都能跟你较三天劲。 陈总纂翻完何太史的盛文昭传,没批字。过了三天,他把一沓文牍放在何太史桌上。 "你写'盛文昭于隆庆三年上《请罢矿监疏》'——我查了隆庆三年所有的奏疏档,没有。" 何太史接过文牍,翻了一遍。确实没有。 "那可能年份记错了——"...
博古斋的寻典人
一、京城最博学的先生,翻了三次大车应天书院里有位顾先生,博闻强记,名满江南。他能引经据典随口就来,哪本书哪一卷哪一页,张嘴就有。学生问他任何一个朝代任何一年的科举题目,他不假思索,脱口而出。 但最近半年,他当众翻了三次车。 头一次——一个学生问他:"顾先生,北宋熙宁三年,王安石推行免役法的同一年,开封府出了个有名的案子——您记得是哪件?" "包拯审乌盆。"顾先生脱口而出。 底下鸦雀无声。过了半晌,一个学生小声说:"先生,包拯是真宗朝的人,熙宁是神宗朝——差了一百年……" 顾先生愣了片刻,自己笑了。但笑得不自然。 第二次——有人问到《元史·地理志》里一个边塞小城。顾先生一口气说了一长串,事后学生对了一本原书——地名对了、方位对了、建城年份——说错了。 第三次最要命。一个远来的贡生问了一件陈年公案——国初大诰里的某条刑律具体怎么说的。顾先生信誓旦旦背了原文。结果第二天那贡生从怀里掏出誊抄的大诰原文——顾先生背的那段,是另一个案子里的。他搞混了。 书院山长把顾先生叫到屋里喝茶。 "老顾——你学问还在。但你最近是不是,...
演算堂的推演生
一、张口就算,可十题错六题金陵府学下设有一间演算堂,专给各县选拔上来的算学神童开小灶。每年两百多个神童里,能进演算堂的不超过十五个。 掌教姓秦,人称秦推之。他在演算堂教了二十年,教出来两个状元,六个会元。全江南的府学都知道——"算学出金陵,金陵出秦门。" 但最近三年,秦推之觉得不对劲。 新一届十五个学童,天赋是一个比一个吓人。心算两位数乘法——一息出答案。心算三位数乘三位数——一顿饭的工夫。上一届最厉害的也不过如此。可等秦推之把题从"单纯算数"换成"应用题"之后——这帮神童塌了一大半。 比如这道: 张家有田四十二亩,李家有田三十六亩。张家的亩产比李家高两斗。两家一年共收粮四千一百二十八斗。问张家亩产多少斗? 按说这帮心算天才,拿下这题最多一盏茶的工夫。结果交上来的十四份卷子——只对了三份。 不是他们不会算两位数的乘除。是题里的数字多了、关系绕了、得"先求什么、再求什么、最后套什么"——这帮神童的大脑到第二步就懵了。 秦推之把错卷摆开看了一遍。十一个错的人,错得五花八门:有的一步没推对就开始心算,算...
问心斋的解语人
一、同一个神龛,百样不同的答长安城西有一座问心斋,说是道观,其实就一间小殿,供着一尊不问世事的神。 神龛前有一口铜铃。你问一个问题,摇三下铃,神龛底下会滑出一张纸来——上面写着回答。 但这尊神有个怪脾气:同一个问题,不同的人问,答出来的东西天差地别。 去年有人问:"我该不该去江南做生意?" 一位老商人去问,回答是:"江南水路通达,货如轮转,三年可致千金。但须防梅雨损货,端午前出手为上。" 一个年轻的衙役也去问了同样的问题——一字不改。回答是:"江南?江南的雨多,鱼多,姑娘好看。别的我不知道。" 老商人的儿子不信,换了件旧衣裳,改了个行礼的路数,混进去又问了一遍。这次回答是:"做生意哪有不冒风险的?江南做布匹的第一年亏本,第二年回本,第三年才赚钱——你熬得住三年吗?" 同一个人,同一尊神,同一个问题。三个回答,三种味道。 消息传开,问心斋的门槛快被踩烂了。全长安城的人都想知道:这尊神的脑子到底是怎么转的? 二、改的不是神,是前面铺的路问心斋有个管事的,姓柳,人称柳解语。 她不是道士,也不是尼姑。干的事说...
礼乐司的教习官
一、乐谱全对,可皇上听了皱眉头礼部辖下有个礼乐司,专管朝廷祭祀和宴飨的雅乐。编制三百人——编钟、石磬、琴瑟、笙竽、柷敔,八音齐备。 教习姓周,人称周司乐。他在礼乐司待了三十余年,带出来无数宫廷乐师,可这几年他的心脏快撑不住了。 问题是这么来的。皇上新登基,对雅乐异常苛求。每月初一的太庙祭祀,乐班奏完一套,皇上就两个字:"不对。" 不对在哪?没人知道。 周司乐自己坐到乐班前面听,听了一整场。音准——没一个音跑了。节奏——编钟和石磬严丝合缝。声部——八音按谱子来,一处没乱。曲子——用的是洪武年间的正谱,祖宗定下来的,几百年来都是这么奏的。 "谱是对的,"周司乐捋着胡子,"但皇上说不对,就是不对。" 问题到底出在哪? 一个叫小乐的乐工有一天无意中说了句话:"师父,咱们照谱子奏,每个音都对——可你不觉得太'冷'了吗?" 冷?周司乐从来没用过这个字——他只管符不符合谱子。一套曲子十几个乐章,只要各声部按谱的标记奏完,他就是满意的。但"冷"——那是一种感觉。谱子上不写感觉。 他...
铸丹坊的炼药师
一、三个丹炉,三炉废渣终南山下有座道观,道观后头有一间铸丹坊。 说是铸丹坊,其实就是三间土坯房加三个丹炉。坊主是个老道士,姓公孙,单名一个"炼"字。没人知道他多大岁数——观里的道童说,他爷爷的爷爷的师父,就已经在叫公孙炼"师父"了。 可这些年,公孙炼的名声不怎么好。 观里的香火钱一年比一年少。住持找公孙炼谈过三回——"公孙道长,您炼了一辈子丹,拿出一样东西来堵外头的嘴,行不行?" 公孙炼有三个徒弟:大徒弟抱朴,二徒弟守拙,小徒弟归真。 三人炼丹的路子,完全不一样。 抱朴走"精料"路线。他用最好的丹砂、最纯的铅汞,但丹炉极小——就是一尊三尺高的青铜炉,一回只炼一两。出来的东西确实不错——偶尔能炼出几颗品相圆润的丹丸。但要他多炼——"不行,炉就这么大。" 守拙走"广量"路线。他不管料好不好——山里刨出来的矿石,水沟里淘的泥巴,统统往里倒。丹炉比抱朴的大三倍,一次出丹半斤。但出来的东西——杂质多得像泥丸子,药力若有若无。住持私下说:"吃了守拙的丹,最大的风险...
观文堂的续笔生
一、续笔十年,未曾写过一句自己的话翰林院下设一个小衙门,叫观文堂。编制三十人,干的活说出来都不太好意思——"代笔"。 不是代笔写文章。是续写。某位大人上折子写了上半段,下面不知道怎么接了,把稿子丢到观文堂来。观文堂的笔帖式负责往下续——续出来得跟那位大人亲笔写的一样口气、一样用词、一样立场,前后浑然一体,像同一个人一口气写完的。 观文堂的掌班叫沈续之,在这间屋子里坐了二十二年。他续过的折子不下三百万件。六部的、各直省的、都察院的、内务府的——什么样的公文他没见过? "沈师傅续的折子,摘了落款你分不清是谁写的。"这是翰林院流传最广的一句评价。 今年开春,观文堂来了个新差事,把所有人都难住了。 不是续折子。是续——"所有东西"。 二、天底下的文字,没有它收不了的尾新来的掌院学士姓谭,是个有想法的人。他翻了一遍观文堂二十年的存档,发现了一件事:沈续之续折子只需看三行。 "三行?"谭学士把沈续之叫来,"你只看三行,就知道后面该写什么?" "用不了三行。"沈续之低头站着,...
缮经阁的拆字僧
一、字太多了,藏经阁装不下白马寺的缮经阁,藏了三十万卷经文。从东汉摄摩腾译《四十二章经》算起,六百余年,梵文、巴利文、汉文经卷层层叠叠,光是经目就编了八十本。 可这几年出了个要命的麻烦。 朝廷要重编《大藏经总目》——给三十万卷经书里的每一个字做一个索引卡。哪个字、在哪一卷、第几行。方丈把任务派给了缮经阁。 阁里的僧人们先按老规矩来:把经书里的字一个一个抄到卡片上。抄了三个月,抄出了四百二十万张卡片——光一个"佛"字,就占了整整十二个抽屉。 但问题不在这。问题在于——有些字,一共就出现过两三次,也给它们一人一张卡片,柜子占得满满当当;而"如是我闻"四个字连着出现的次数太多,可阁里没有任何一种办法把它们捆成一个"整件"来检索。 管经目的老僧慧明,在阁里待了五十年。他看了一眼那四百二十万张卡片,说了六个字: "字不是这么拆的。" 二、常用字留着,生僻字拆开慧明把沙弥们叫到跟前,在案上铺了一张白纸。 "你们看——'佛'这个字,三十万卷经书里,出现了八十万次。它是个完整的、谁见了都认识...
万象阁的布星人
一、鲸鱼到底算鱼还是算兽?京师的万象阁,藏尽天下书。光经史子集四大部的书目,就摞了一人多高。 阁主姓陆,做了二十年书目分类。他的书架排法叫"四百六十八部"——所有书按一个树状分类,从根到叶,每本书坐一个坑。 说白了,就是一个巨大的树形目录。经部→易类→某个朝代→某位注者。每本书有且只有一个位置。 二十年前这规矩还行得通。书少。 近十年不行了。印书坊越出越多,新书一年比一年多。更要命的是,很多新书根本不知道该往哪放。 上个月出了一件事。两位翰林在书阁里吵了起来。 起因是一本《鲸谱》。甲翰林在"海兽部"找到了它——因为鲸是海里的兽。乙翰林在"渔获部"找不到,大发雷霆——"你让我翻完兽部再翻渔部?它到底是兽是鱼,你得给个说法!" 陆阁主被叫来评理,半天没说出话。 另一本《鼯鼠志》,更头大。鼯鼠会飞——放禽部?是鼠——放兽部?吃虫子——放虫部?三个编目员给出了三个答案。 陆阁主那天晚上喝了三壶茶,抽了一整包烟,在天井里坐到四更。四百六十八部,好大一棵树。可知识他妈的根本不长成树。 "树装不下了,&q...
雾隐斋的洗画人
一、一张灰纸,说是幅名画金陵城外有个雾隐斋,专修一种别人不肯接的活——被"雾"吃掉的画。 这毛病城里人都听过。一幅画放久了、受了潮气,画面上会起一层灰翳,像蒙了层雾。今天薄薄一层,明天又薄薄一层。 一年不管,山水还看得清;十年不管,只剩个影子;几十年没人管——整幅画就糊成一张匀匀的灰纸,什么都没有了。 这天来了位裴老爷,抱着个锦盒,手一直抖。 打开——一张灰扑扑的纸,边角都脆了。 "这是……一张白纸?"徒弟阿墨凑近看。 "《寒江独钓》,"裴老爷声音发颤,"我祖上传下来的,周朴的真迹。" 阿墨愣住了。周朴的画,青州拍出过八百两一幅。可眼前这张,灰蒙蒙一片,别说钓翁孤舟,连一条线都找不着。 "裴老爷,"阿墨陪着小心,"这雾落得太厚了。满城的裱画师傅都会说同一句话——没救了。" "所以我才来雾隐斋。"裴老爷把锦盒往前一推,"陆师傅在么?" 二、雾是怎么落上去的,我比谁都清楚里屋出来一位老者,姓陆名迟,人称陆师傅。他捏起那张灰纸,...
百工坊的分派官
一、一百二十八位师傅,活反而出不来了青州城的百工坊,天下闻名。 说是"百工",其实是实数——一百二十八位匠人,三十六行手艺。木匠、铁匠、皮匠、陶匠、漆匠、银匠、石匠、织匠……凡是你叫得出名字的手艺,坊里都有,而且每行至少三四位师傅。 外地客商来订货,常说一句话:"只要是百工坊出来的东西,拿到哪里都卖得上价。" 但今年开春,百工坊差点砸了招牌。 江宁布商陈老板订了三百套嫁妆箱——红木底、铜角包边、皮革衬里。订金八十两,交货期谷雨。 谷雨那天陈老板来取货,坊主邢百川却拿不出东西。 "陈老板……再宽限十天。" "十天?"陈老板把订契拍在桌上,"江宁那边迎亲的日子都定了,你让我拿什么送到人家府上?" 邢百川涨红了脸,说不出话。 不是匠人不卖力。恰恰相反——一百二十八位匠人,没有一个闲着的。问题就出在"一百二十八"这个数上。 坊里接一件活,老规矩叫"过堂":十六位首席师傅先坐下来议。议完了,木匠去开料、铁匠去打铜件、皮匠去裁衬里、漆匠去调色——一件活,...
述古阁的修典人
一、这部法典,三百年来没有破不了的案述古阁坐落在京城东角,灰砖青瓦,三进院子。门匾上三个字——"述古阁"——是本朝开国皇帝御笔亲题的。 天下衙门多的是。刑部、都察院、大理寺——三法司的名头一个比一个响。但要论根基,谁也比不过述古阁。 三百年前开国那一年,太祖下了一道旨:收集天下所有律法条文、判例成案,编成一部"万全典"。从这部典里,天下每一个案子——不管多古怪、多刁钻——都能判出一个是非黑白来。 三百年。九代太史令。一千四百三十六卷。 到这一代太史令傅长生手里,万全典已经修到了一千四百三十六卷。傅长生六十二岁,在述古阁坐了三十年,头发白得像雪,眼睛亮得像刚磨的刀。 他常对底下的人说一句话—— "天底下没有判不了的案子。如果你觉得判不了,那是你没把典则吃透。" 这话不是随口说的。述古阁的典则有它的根基:元律九条,推导章法三条。元律是本——九条根本大法,每一条都是自明的、不需要证明的。推导章法是器——三条推演规则,告诉你如何从已知的判词推出新的判词。 从这十二样东西出发,一千四百三十六卷里每一条判词——都是一步一步、有根有据...
云来客栈的断程人
一、云来客栈里能断程的人南北东西四条官道交汇的地方,有一座云来客栈。 客栈的东家姓程,六十出头,清瘦寡言。往来客商不知道他的名字,只叫他"断程先生"——因为他有一个旁人没有的本事:他一眼能看出一条路能不能走到头。 起因是一桩旧事。十年前一个皮货商在客栈歇脚,一边喝酒一边发愁。他从北边收了三百张羊皮要运到江南,手上有三条路线——一条走水路绕徐州,一条翻山走陆路,一条绕道湖广。他拿不准哪条路可靠,怕货压在手里烂了。 程先生从柜台后面探出头来,看了那商人手里的路线图大概三息工夫。 "水路不通。徐州那边码头封了,你到淮安就得掉头。山路能到,但要两个月。湖广那条最稳——四十天,过了岳州一路平川。" 皮货商不信,派人去打听——三条路跟程先生说的一模一样。码头果然封了。皮货商走湖广那条路,四十三天到了江南,羊皮一匹没丢。 从那以后,"断程先生"的名头就传开了。 皮货商、盐贩子、赶考的书生、上任的官员——但凡要出远门的人,都要先到云来客栈坐一坐,把路线图交给程先生看一眼。他看了二十年,看的路线不下三千张。每一张图,他只消顺着路一笔一笔捋...
衔勒坊的配辔人
一、好马不听使唤京城最大的车马行里有一匹出了名的好马,叫追风。 这匹马膘肥体壮、日行千里、认路极准。拉重车的时候往辕上一套,千斤的货它一个人拖着就走,别的马在旁边看着只喘粗气。但全京城没有一个车夫敢用它。 因为它不听使唤。 你拽左边缰绳让它往东,它往西。你喊停,它偏要加速。你让它慢下来走桥,它一个冲刺上了独木桥——吓得车夫半条命都没了。半年来,十一个骑手被它摔下来过。最惨的一个在碎石路上被拖了二十丈,躺了三个月才能下地。追风虽然谁都能骑上去,但骑上去之后往哪儿走——它自己有一套主意。 车马行的东家老魏愁得头发都白了。卖又卖不掉——都知道这马烈。留着又没用——没人敢驾。 这天,一个瘦高的中年人站在车马行门口看了很久。他不看马——看辔头。 "你这辔头谁配的?"他问。 老魏没好气:"城里最好的皮匠。" "皮匠做的是皮具。"中年人蹲下来,翻看追风嘴上那副辔头的接缝,"辔头不是皮具。辔头是信使。你的信使把信号传错了——马听到的不是'往东',是'往东但要当心右边'。马一犹豫——你再加一鞭——...
读代码前必运行的五个Git命令——快速诊断代码库健康状况
本文灵感来源于文章《The Git Commands I Run Before Reading Any Code》 一、为什么读代码前要先看Git历史作为一个 C++ 工程师,我接手过很多新项目。以前我总是迫不及待地打开代码编辑器,试图从第一行代码开始理解整个系统。但我发现,这种方法效率很低——我常常在代码迷宫中迷失方向,不知道哪里是核心、哪里是坑。 后来我学到了一个重要的技巧:在打开任何代码文件之前,先运行几个 Git 命令,从提交历史中获取代码库的诊断画像。 这就像看医生之前,护士会先测体温、量血压一样。Git 历史能告诉我们: 谁构建了这个系统? 哪里是问题集中的地方? 团队是充满信心地迭代,还是小心翼翼地拆炸弹? 项目是在加速还是在衰退? 二、命令一:谁是代码改动最频繁的文件1git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20 运行结果示例: 12345156 src/core/engine.cpp 8...
银锭铺的校秤人
一、一笔买卖等三刻钟鎏金城是北方最大的金银集散地。十三条金铺街上,最要紧的东西不是金子,而是一杆秤。 老董在这条街上干了三十年。他的秤能称出一粒金沙的份量——误差不超过发丝的千分之一。全城的商人都认他的秤,但也都怕他的秤。因为太慢了。 "一笔买卖等三刻钟。"丝绸铺的周掌柜把一袋金沙撂在柜台上,"北边新开了骆驼道,银子走得比风还快。你这秤再这么慢,我生意就活不下去了。" 老董不吭声,手稳得像铁铸的。铜盘里堆着一万三千种金粉砝码,从一粒沙到一斤金。他正一粒一粒往上添,眼皮都不抬。 旁边的小徒弟阿衡替他回话:"周掌柜,师傅称得准,才不让你吃亏。上回李家的秤少称了二钱七——" "准有什么用?"周掌柜拍着柜台,"骆驼道上的买卖,人家不在乎少那二钱七!人家在乎的是今天能不能把货发出去!等你称完一袋金沙,人家的驼队已经翻过三座山了。" 老董终于抬起眼皮:"让他另请高明。" 周掌柜一甩袖子走了。阿衡望着他气呼呼的背影,又看看师傅手边那堆堆成小山的待称金沙,心里头一次犯起了嘀咕。...
RAG检索增强生成——让大模型学会翻书作答:读《Retrieval-Augmented Generation》论文有感
一、大模型的知识困境作为一个 C++ 工程师,我一直在思考一个问题:为什么大语言模型知道很多东西,但又常常"胡说八道"? 比如,如果你问 GPT-3 "2024年美国总统是谁",它可能会给你一个错误的答案——因为它的知识截止到2021年。更糟糕的是,它可能会编造一个不存在的事实,还说得煞有介事。 这就是大模型的"知识困境": 知识过时:训练完成后,参数就被冻结了,无法获取最新信息 容易幻觉:经常生成看似合理但实际上错误的内容 缺乏可解释性:无法追溯答案的来源 专业知识不足:对于冷门或专业领域的知识,模型的准确性大打折扣 这正是《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》这篇论文要解决的问题。 二、RAG 的核心思想2.1 "开卷考试"vs"闭卷考试"论文用一个非常形象的比喻来解释 RAG 的核心思想: 闭卷考试:考生只能依靠自己的记忆作答,知识有限且可能不准确。 开卷考试:考生可以查阅参考...
对影阁的鉴画人
一、千幅画像锁在库房里,谁都认不全刑部画影司的库房里存着三千七百幅画像。 不是名画,是人像。每一幅画像都是一个有案底的人——逃犯、骗子、惯偷——画影司的职责就是在有人报官的时候,调出画像让目击者辨认。但画影司管画像只管了半截。画像是按编号存的,文牒是按姓名存的——画像库和文牒库是两个完全独立的院子,中间隔着一道照壁,互不相通。 每次有人报官,情形是这样的:书吏先问目击者——"你看清他长什么样了吗?"目击者说了一堆——"大约四十岁、高颧骨、鼻子有点歪、左眼角有颗痣"。书吏记下来,拿到文牒库里去翻——翻姓名、翻案底、翻记录。翻出来的文牒上有编号,再拿着编号去画像库里找对应的画像。画像拿出来给目击者看——"是这个人吗?"目击者摇头。 重来。换一个。再摇头。再换。反复折腾。 "你们难道不能直接用目击者说的话去找画像吗?"有一次,一位被折腾了整整一个下午的老妇人终于忍不住了,"我说的每一个字都在纸上写着,你们的每一幅画都在库房里存着——为什么对不上?" 书吏尴尬地搓着手:"因为……...
批本处的拟稿人
一、内阁第一笔,慢得出了名徐砚秋是内阁公认的第一笔。 他批的奏章,措辞之精准、轻重之得宜,当朝无人能及。皇上拿到票拟,十份里有九份只批三个字——"知道了"——意思是不用改,照办就行。剩下那一份,最多改一两个字。满朝文武都知道,徐学士笔下出来的东西,闭着眼用就行。 但大家也知道另一件事:他太慢了。 一份奏章摆到他面前,他先读三遍——第一遍看大意,第二遍看门道,第三遍看藏在字缝里的心思。读透了,才提笔。每个字都要从肚子里搜——这个词是不是轻了,那个词是不是重了,这句和上句能不能接上气。一份奏章一盏茶,一天从日出坐到掌灯,最多批二十份。 而内阁每天收进来的奏章不下百份。边关军报、河道汛情、各省赋税、百官升迁——案头永远堆着一座小山。剩下的八十份怎么办?交给底下的小吏去批。小吏批出来的东西,皇上那三个字——"知道了"——变成了一长串朱批:"此处措辞不妥""再议""尔等办事怎如此草率"。一道驳回,就得重写、重递、重批,一来一回折腾四五天。 协办大学士刘敏行不止一次找徐砚秋谈过这事。 &quo...
营造司的掌班人
一、三千工匠,乱成一锅粥京城要建天下粮仓。十万石储量,工期三个月。工部一道急令,从直隶三十六县调了三千工匠,黑压压地涌进了城东那片空地。 头七天过去,督造官卢大人来巡工。他在工地上站了不到半刻钟,脸就绿了。 东头有二十几个瓦匠在砌墙,泥还没干,西头又有一队人推着车过来,把刚砌好的墙角撞塌了一块。南边堆着三千块青砖没人搬,北边的木匠在等砖,干坐了一上午。还有七八十个工匠散在各处,晒太阳的、抽旱烟的、靠墙打盹的——不是不想干,是根本没告诉他们该干什么。 "三千人,七天,只砌了三面半墙。"卢大人把营造司的掌班鲁端木叫到跟前,"照这个进度,别说三个月,三年也封不了顶。" 鲁端木没吭声。他在工地上蹲了三天,把三千人的动线全看了一遍。他发现问题不是工匠懒,也不是监工不尽力——是这三千人根本没有编组。谁跟谁搭伴、谁取料谁砌墙、哪个队管哪块工区,全凭工匠自己商量。三千人乱成了一锅粥。 "给我三天。"鲁端木站起来,拍了拍膝上的灰,"三天之后,工地上多一个人都不要,但每天砌的墙要比现在多五倍。" 卢大人盯着他看了好一阵:...
const&万能引用的陷阱——现代C++参数传递的正确姿势
本文灵感来源于知乎专栏文章《最后的绅士》 一、一条刻在肌肉记忆里的铁律作为一个 C++ 工程师,我相信很多人和我一样,脑子里都刻着一条铁律: "传参用 const&,拷贝贵。" 这条规则在很多场景下确实是正确的。当函数只是观察参数,不作任何修改时,使用 const& 可以避免不必要的拷贝: 1234567double norm(std::vector<double> const& xs) { double sum = 0.0; for (double x : xs) { sum += x * x; } return std::sqrt(sum);} 这个函数只是读取向量的元素,不会修改它。使用 const& 是完全合理的选择。 但是,这条铁律在一种场景下会完全失效——当函数的工作是转发参数的时候。 二、const& 毁掉一切的场景让我们来看一个看似人畜无害的包装类: 12345678910template <clas...
翰墨斋的品文人
一、满腹经纶的哑巴先生苏默之是翰墨斋最博学的人。 三岁识字,七岁通经,十五岁的时候已经把斋中八万卷藏书从头到尾读了三遍。你问他任何问题——从《禹贡》里大禹走的哪条水路,到前朝第三次北伐出动了多少匹战马——他都能在三次呼吸之内背出原文。一字不差。斋里的老教习们说,苏默之的脑子就是一座行走的藏经阁。 但他有一个毛病。 他答不出"简单"的问题。 不是不会答。是答得太奇怪了。 问他"明天会下雨吗",他背了半篇《月令》和十二段历代雨雪奏折,然后看着你——意思是"我都说了,你自己判断"。 问他"这封信怎么写才客气",他列出三百七十二种书信格式,从战国竹简到本朝奏折,末了补一句:"你自己挑,都可以写。" 翰墨斋的学子们私下管他叫"哑巴先生"——不是真哑,是说出来的话没人用得上。 老教习们围在一起商量了三次。有人提议给苏默之多加几门课——"他缺的是礼学,不懂待人接物。"有人说恰恰相反——"他读的已经太多了,再读就读傻了。"商量来商量去,谁...
设计模式真的很烂吗:读《Design Patterns Suck》有感
一、偶然读到一篇"离经叛道"的文章今天偶然看到一篇标题很刺眼的文章:"Design Patterns Suck"(设计模式很烂)。作为一个从 C++ 起步、曾经把《设计模式》奉为圭臬的程序员,我带着好奇和一丝抵触点了进去。 文章的观点非常激进: "设计模式被高估了、滥用了,而且常常是完全不必要的。" "设计模式不过是丑陋的变通方案,因为我们的编程语言不够强大、不够灵活,无法表达我们真正想要的东西。" 读完之后,我陷入了沉思。这些话虽然刺耳,但似乎又有点道理。让我从自己的经历出发,谈谈对这个话题的看法。 二、我的设计模式之旅2.1 C++时代的"模式实践"我最早接触设计模式是在大学学习 C++ 的时候。那时候,《设计模式》这本书几乎是每个 C++ 开发者的必备读物。工厂模式、单例模式、观察者模式、策略模式……这些名词像咒语一样被反复念叨。 记得当时做一个简单的学生管理系统,我非要往里塞各种设计模式: 1234567891011121314151617181920212223242...
阅经阁的寻书生
一、过目不忘的人开始记错了慧明是白马寺最年轻的阅经僧。 十四岁剃度,十六岁开始阅经,二十一岁那年把藏经阁里一万两千卷经文从头到尾背了一遍。不是读过——是背过。你随便翻开一卷、随便指一行,他可以闭着眼睛把前后三百字一字不差地诵出来。方丈了空禅师给他做过一次测试:从一万两千卷里随机抽了一百段,慧明背对了一百段。寺里没有人不服他。 远近的香客开始管白马寺叫"活经阁"——有佛经上的疑问,不翻书,找慧明。 这天来了一个云游僧,法号净源。他从五台山走了三个月下来,就为一个问题。 "《楞严经》里说'若能转物,则同如来'——这个'转'字,在《大智度论》和《中论》里分别是怎么讲的?三本经论对'转物'的解释有矛盾吗?" 慧明闭上了眼。 寺里的僧人已经习惯了——他闭上眼睛就是在"翻脑子里的经书"。翻得很快,一般三五次呼吸就能开口。 这回他闭了整整一刻钟。 "《大智度论》卷三十二,论'转身'——但实际讲的是转心,不是转物。《中论》里没有直接提'转物'——&...
推案台的慢判官
一、断案如神的人栽了跟头沈渐是顺天府最年轻的推官。 二十二岁及第,二十五岁外放知县,三十岁调回京城做了推官——专审刑部的疑难案子。同僚们都说他"断案如神":原告说完他就在心里判了,被告还没开口,惊堂木已经举起来了。 而且他大部分时候是对的。 当了三年推官,审了三百多件案子,翻案率不到半成。吏部的考评年年写上上。顺天府的匾额,他一个人扛了一半。 直到那桩案子找上了他。 案子本身不复杂。城东米铺的掌柜赵大,五十出头,前年娶了个比他小十五岁的继室。成亲不到一年,赵大暴毙。仵作验出砒霜。继室在赵大死前半个时辰给他端过一碗参汤——参汤碗沿上验出了砒霜的残留。 不止物证。继室的陪嫁丫鬟亲口作证:案发前三天,亲眼看见继室从一个走方郎中手里买了一包"灭鼠药"。动机也站得住——赵大死前一个月,刚把米铺的房契过户给了前妻的儿子。继室为这事大闹过一场。 人证、物证、动机,三样齐了。 沈渐升堂审了不到半个时辰。继室从头哭到尾,一句完整话都说不出来。丫鬟的证词滴水不漏——哪天买的、在哪个街角、花了几文钱,问什么答什么。参汤碗沿上的砒霜,铁证如山。 "押入大...

