## 使用双向类型检查揭秘类型检查器 类型检查器虽然复杂,但可以通过一种概念上简单的“双向类型检查”方法来理解。与Hindley-Milner系统不同,这种方法利用一些类型注解——通常在函数定义处——同时仍然允许使用未注解的表达式等灵活的代码。 核心思想围绕两个方向:**推断**类型和**检查**类型是否符合预期。可以使用抽象语法树(AST)来表示代码,并使用`Context`(一个映射)来跟踪变量类型,从而构建一个小型函数式类型检查器(约100行代码)。 这个过程涉及递归地遍历AST,为字面量推断类型,并查找变量的类型。当遇到操作(如加法)时,会根据定义的规则检查和推断类型。`infer`和`check`调用的交织使用,可以实现一个令人惊讶的强大且可扩展的系统。 虽然这个基本实现缺乏详细的类型修饰等功能,但它为构建更复杂的类型检查器提供了坚实的基础。作者通过TypeScript子集的概念验证,展示了如何通过扩展`infer`和`check`函数轻松添加功能。最终,双向类型检查为理解类型系统的核心原理提供了一条实用且易于理解的途径。
## 心灵的空间:人工智能 vs. 动物智能
安德烈·卡帕西认为,人工智能,特别是大型语言模型(LLM),代表了人类与一种根本上*非动物*智能的“首次接触”。虽然两者都源于优化,但驱动它们发展的压力却大相径庭。
动物智能通过自然选择进化而来,优先考虑生存——力量、地位、社会动态以及在危险的物理世界中磨练的本能。这创造了一种广泛的“通用”智能,能够处理多样化、高风险的任务。
然而,LLM是由*商业*进化优化的。它们的核心行为是对人类文本的统计模仿,并通过用户参与(“点赞”)等奖励进一步改进。这导致了一种专注于预测和取悦的“变形”智能,但当面对超出其训练分布的任务时,可能会变得脆弱——失败并非生存危机。
不同的计算基础和学习方法是次要的,核心区别在于优化压力。理解这种区别对于准确地建模和预测人工智能的未来发展至关重要,避免将其简单地视为更高级的动物。