## 全球不平等达到危机水平:摘要 一份新报告显示,全球极端不平等现象严重,不到6万名个人——占世界人口的0.001%——控制的财富是全球最贫困50%人口的三倍。最富有的10%人口收入超过了其余90%的人口,而最富有的10%人口拥有全球75%的财富,而最贫困的一半人口仅占2%。 这份由200名研究人员撰写的《世界不平等报告2026》记录了这种差距,自1995年以来情况不断恶化,最富有的人的财富增长几乎是全球最贫困50%人口的两倍。该报告强调了一种由教育支出巨大差异驱动的“机会地理”,欧洲/北美地区的教育支出比撒哈拉以南非洲地区高出40多倍。 除了公平问题外,作者(包括托马斯·皮凯蒂)认为,这种程度的不平等威胁着经济稳定、民主和环境可持续性。他们提出解决方案,例如对全球最富有的人征收3%的税款,以资助发展中国家的教育,并呼吁成立一个国际小组来监测不平等现象,类似于气候变化的IPCC。该报告还将财富与气候排放联系起来,指出最富有的10%人口应对与私人资本相关的77%的排放负责。
## Go 的内存管理与返回值
从 C/C++ 过来的程序员可能会对 Go 函数返回值的能力感到困惑,因为它避免了 C 中常见的栈/堆问题。在 C 中,返回指向局部变量的指针会导致悬挂指针和未定义行为。
然而,Go 在编译期间使用 **逃逸分析**。如果变量的生命周期超出了它所定义的函数范围(例如,当它被返回时),编译器会自动将其分配到 **堆** 上,而不是栈上。Go 的 **垃圾回收器** 然后管理这块堆内存,确保只要它被引用,它就保持有效。
重要的是,当在 Go 中返回一个切片时,你实际上是在返回切片头(包含指向底层数组、长度和容量的指针)的 *副本*。这个头指向堆分配的数组,该数组在不再被引用之前会持续存在。
这与 C 形成鲜明对比,在 C 中,返回指向栈变量的指针会导致内存立即失效。Go 的设计优先考虑安全性并简化了内存管理,从而实现更简洁的代码,而无需 C 的手动分配/释放复杂性。
## C 和 C++ 中的闭包:性能深度剖析
本文调查了在 C 和 C++ 中实现闭包(数据和指令的结合,泛化函数)的性能影响。虽然闭包在现代语言中很常见,但在 C 中实现高效的闭包面临挑战。核心问题在于需要在不依赖于有问题全局状态(如静态变量)的情况下,将额外数据传递给像 `qsort` 这样的函数。
存在几种方法:重新实现函数以接受用户数据、GNU 嵌套函数、Apple Blocks 和 C++ Lambdas。使用 Knuth 的“Man-or-Boy”测试(强调递归和数据引用)对这些方法进行基准测试,揭示了显著的性能差异。
**主要发现:**
* **C++ Lambdas(直接使用)最快**,受益于编译器在类型信息易于获取时的优化。
* **类型擦除(使用 `std::function`)会引入开销**,但仍然保持合理的效率。
* **Rosetta Code 风格的 Lambdas 令人惊讶地慢**,因为存在过多的数据复制。
* **GNU 嵌套函数目前性能较差**,这是由于与可执行堆栈相关的实现细节所致,从而阻碍了优化。新的基于堆的实现可能会改善这一点。
* **Apple Blocks 提供适度的性能**,受其运行时管理限制。
* **标准的 C 方法处于中等水平**,缺乏更高级技术的优化潜力。
分析强调了编译器优化和最小化数据复制的重要性。作者提倡为 C 提出“宽函数指针”提案,以实现高效的闭包实现并与其他语言互操作。最终目标是为 ISO C 设计一种高性能和标准化的闭包机制。