一个高中生的疑问
在知乎闲逛时,发现了一个很有价值的老问题:数学究竟是自然界本就存在的某种联系,还是我们人类的创造?。 这么好的问题,居然4年后我才看到。题主现在应该已经上大学了,估计也有了自己的答案,但我还是忍不住想试着参与下回答,就姑且帮我自己整理下思路吧。 乘法源于人们求土地面积的经验,那么,为什么这种丈量土地的经验能够运用在包括行星轨道在内的那么多领域?丈量土地与行星公转间存在着某种联系吗?宇宙间其它的文明认为这两者之间存在着规律吗? 一个最基本的观点是,这个世界的信息,本身是混沌的,人类需要用自己的大脑来理解世界,那么必然需要建立一种语言,来描述这复杂的世界信息,形式化的描述有利于思考,也...
Chapter.116
告诉你的孩子,十八岁前,不会让他们因为钱而感到窘迫,这是为了塑造自信的性格,但十八岁后,会让他们因为钱而感到烦恼,这是为了培养独立的金钱观。 封面图片是由豆包 AI 生成的图片,一只望向星空的小狗。 转载自我自己的微信公众号,欢迎关注。
编译器视角下的未定义行为
前段时间,公司内有过一次关于未定义行为的讨论,我认为很有价值,也从中学到了东西,整理成文。 我简单介绍下几个相关的概念,并着重探讨一些未定义行为的程序用法。 什么是未定义行为未定义行为,Undefined Behavior(UB),并不是一个软件工程行业专有的话题,而是在各个领域都存在的普遍概念。 比如,开挖掘机可以挖沙子,也可以用来捞鱼,甚至,用它来挖鼻孔也可以,只要驾驶员有足够的能力驾驭它。而挖掘机说明书中,大概率不会提到用它捞鱼或挖鼻孔,虽然理论上有操作的可能性。 这些行为就可以称为使用挖掘机的未定义行为,又或者用手机捣蒜、用验尿机验茶水,都是 UB 行为。 未定义行为发生时,无法...
Chapter.57
网络世界的信息失准
计算机体系结构模拟器简述
在芯片尚未流片,硬件还停留在前端设计时,芯片公司里那些软件开发工程师,已经在一个虚拟的环境上运行起了程序和算法。这个神奇的虚拟环境,就是计算机体系结构模拟器。 前几年,苹果公司在着手开发自研 M 系列处理器时,他们的软件工程师们,并不需要等到自家的芯片从工厂生产出来寄到公司,就能够让新的 MacOS 系统在新硬件上运行起来;而 Intel 的工程师们,他们在针对不同硬件上设计缓存算法时,并不需要机房里运行各种型号的处理器。 这就是计算机体系结构模拟器的魅力。它是一个桥梁,连接着软件设计和硬件设计,使得芯片公司可以让软件团队和硬件团队一起开始在新项目上发力,也可以让架构师们在构想的硬件...
Chapter.1071
理性看待中医和西医的关系
桃花源记
晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之。复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田美池桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。...
Effective Modern C++:微调
这一章有两个对更具体话题的讨论,虽然不适于普适的应用场景,但通过阅读学习,也能一定程度上加深对 C++ 编程语言的理解。作者发挥了他一贯的先假设再否定的行文风格,如果先验知识不足,很可能跟不上思路。 条款 41:对于可以复制的形参,在移动成本低并且一定会被复制的前提下,可以考虑按值传递条款标题很长,因为这个条款的前置条件很多,只有在这些前置条件都满足的情况下,才可以考虑将一个形参按值来传递。 阅读下文之前,需要已经明确搞清楚以下几个概念: 移动和复制 复制构造和复制赋值 左值和右值 左值引用和右值引用 和前边一样,我不会按原文的行文顺序去复述,而是按我理解地最容易被读者接受的顺序来介...
Effective Modern C++:并发 API
C++11 中,提供了强大的并发特性,使得我们在编写并发程序时,不需要再去调用操作系统提供的并发接口(如 pthread 和 Windows 线程库)。Modern C++ 的程序员,必须熟练掌握并发 API 的用法,本章节会展开讨论几个使用 C++ 并发 API 时需要考虑和注意的问题。 条款 35:优先选用 std::async 替代 std::thread如果想要以异步运行的方式启动一个程序,有两种 API 可供使用: 1234567int doSomeAsyncWork(); // 直接启动一个线程 std::thread t(doSomeAsyncWork); // 启动一个任...
Effective Modern C++:lambda 表达式
lambda 表达式是 C++ 中一个极具颠覆性的语言特性,它主要用于创建匿名函数,从而可以更便捷地在一些场合下,快速生成函数对象后传递给需要的位置。这一章中,会陈述几个和 lambda 表达式相关的问题。 首先,需要明确几个概念。lambda 表达式是一种语法,它是静态的,编译器处理 lambda 表达式时,会利用它生成一个闭包类,然后在利用 lambda 表达式定义对象时,利用这个闭包类生成一个闭包对象。闭包对象是动态行为。 虽然我们无法方便地知道 lambda 表达式生成地闭包对象是什么类型,但好在可以用 auto 类型来让编译器自己推导。也由于闭包对象和其他对象没有什么大的不同,...














