The Unreasonable Effectiveness of Constructive Data Modeling
摘要
本文通过将类型视为构造新值的正空间而非限制值的负空间,结合积类型和和类型,可以精确建模数据的不变量,避免与类型检查器的斗争。建议使用简单类型组合而不是复杂类型系统特性。
<p><a href="https://lobste.rs/s/vptzoz/unreasonable_effectiveness">Comments</a></p>
查看缓存全文
缓存时间: 2026/07/27 21:49
TL;DR: 通过将类型视为构造新值的正空间而非限制已有值的负空间,并合理使用积类型和和类型,可以在不需要复杂类型系统特性的情况下精确建模数据的不变量,从而避免与类型检查器的斗争。
## 从静态类型的黑暗时代到复兴
演讲者最初在 Haskell 编译器上工作,后来在 August Health 用 Scala 为养老院开发护理软件。软件涉及药物管理,错误可能导致严重后果,因此团队非常重视正确性,大量使用测试和静态类型。
早期静态类型的主流语言是 Java 和 C++。Java 保守、限制性强,与面向对象紧密绑定;C++ 复杂且不关注安全。这导致许多程序员认为静态类型过时,转而拥抱 JavaScript 和 Ruby 等动态语言。近年来,Rust 和 TypeScript 带来了静态类型的复兴——Rust 强调安全,TypeScript 为 JavaScript 添加类型。这些都让静态类型重新变得“酷”。
## 类型系统复杂度的两难
然而,演讲者并不满意现状。类型系统的复杂度增长过快,多数 TypeScript 程序员不理解其工作原理,常与类型检查器“斗争”。Java 因过于限制而令人沮丧,TypeScript 因过于复杂而令人沮丧。许多人以为必须使用花哨的特性(如依赖类型)才能解决问题。但演讲者认为,通过一个视角转换,使用简单的积类型和和类型就能有效捕捉不变量,且适用于多数支持这些特性的语言。
## 核心思想:类型是构造而不是限制
### 负空间 vs 正空间
通常人们认为类型是限制:在 `unknown` 宇宙中画小圆圈,排除不想要的值。但 Java 的类定义不仅限制已有值,还引入新的一类运行时值(如 `Point` 结构体)。因此,类型可以看作是从无到有地构造正空间。
以自然数为例:如果只能用有符号整数表示非负整数,你会希望限制值集,但细化类型很难实现。如果先定义只包含所需值的无符号整数类型(正空间),然后向上扩展就简单了。
### 非空列表与偶数列表
- **非空列表**:由“一个元素”和“零个或多个元素”组成。用元组表示即可,无需复杂类型特性。
- **偶数个元素的列表**:元素成对出现,可表示为 `pair 的列表`。虽然对列表的操作需要适配,但只要解耦数据的表示与解释,就能灵活建模。
### 用户示例:邮箱或电话至少有一个
假设数据库中有用户结构体,含有邮箱和电话字段,至少有一个必须设置。容易想到需要依赖类型(“邮箱”的类型依赖于“电话”的值)。但通过引入额外的枚举类型明确所有可能状态,问题迎刃而解:
```plaintext
type ContactMethod =
| Email(string)
| Phone(string)
| Both(email: string, phone: string)
```
这样类型系统就能强制至少有一个联系方式。如果未来需要增加新状态(如无联系方式),只需添加新的变体。
## 总结与视角转换
关键是从“类型即限制”转向“类型即构造”。多数语言提供积类型(记录、元组)和和类型(枚举、联合、代数数据类型),配合穷尽模式匹配,就能精确建模数据的不变量。不必追求过于复杂的类型系统特性,而是思考如何用简单的组合构造出所需的正空间。这种做法能让程序员重新掌控类型系统,减少与检查器的斗争。
---
Source: [YouTube: The Unreasonable Effectiveness of Constructive Data Modeling](https://www.youtube.com/watch?v=0BXuYlNrUmE)
相似文章
表格数据上的类型化决策模型
该论文研究了在表格数据上使用“类型化决策模型”(返回每个固定选项的概率而非生成文本的语言模型),并在行分类、事实验证和异常检测任务上将其与三个大语言模型进行对比:决策模型成本更低,且在21种等义改写下更鲁棒,但所有模型对表格组织方式的改变都不鲁棒。
揭秘类型(及一些悖论的解惑)
类型理论为编程语言基础增加了不必要的复杂性,并提出基于关系成员的更简单观点。
U-Space:揭示语言模型中不确定性何时及为何产生
该论文提出U-Space,一种低维子空间方法,通过将"怀疑"与"确定"语义锚点映射到残差空间,实现对语言模型逐token的可解释不确定性量化,无需标签、重复采样或额外训练,并在推理基准上优于现有基线。
通过模拟实现合成:利用可扩展的智能体-系统交互生成连贯的企业数据
提出了一种名为 Synthesis Through Simulation (STS) 的无模式数据合成范式,通过让 LLM 智能体在模拟企业环境中调用策略强制 API 来生成结构上天然有效的数据,其 Generalist Populator 智能体在十个环境中达到 0.88 的平均分布保真度和 100% 的约束满足率,且无需访问数据库 schema。
@NoraX2026: https://x.com/NoraX2026/status/2066499278449897564
本文探讨了抽象建模能力如何帮助人们在不同领域间快速迁移,通过提炼变量、关系和约束来抓住核心结构,而非记忆具体内容。