Lobsters | 📄 原文链接 | 2026-11-05 收录

把箭头变成箭头,把范畴变成查询:一门编译到 SQL 的语言

来源:reasonablypolymorphic.com — 2025-10-14

📋 概述

作者写了一个玩具语言 catlang,编译目标不是机器码而是一条巨大的 SELECT 语句——在 Postgres 里跑这条查询就等于运行程序。源语言支持类似 Haskell 的 arrow 记法,desugar 之后变成由 id、△、⨟、prj、dist、▽、cochoice 等组合子构成的中间语言,每个符号都有明确的范畴论语义。正因为语义如此简单,把这种中间表示翻译到别的目标就变得机械:换一套映射,同一个程序就能编到另一个地方。文章用一个带 while 循环的 count 函数走完全程,最后展示那段「不像人类写的」SQL。

🔑 核心要点

💡 金句

给这种范畴式的中间语言写一个到其它领域的变换,编译到各种奇怪的目标就变得轻而易举。
← 返回 Lobsters 首页