仓颉:一种原生支持效应处理器与代数数据类型的新开源编译语言

TL;DR · AI 摘要
仓颉(Cangjie)是一种新开源编译语言,原生支持代数效应处理器和代数数据类型,旨在提升函数式编程的表达力与系统可靠性。
核心要点
- 仓颉语言内置原生效应处理器,可高效处理异常、异步等副作用。
- 该语言支持模式匹配与代数数据类型(ADT),类似 Haskell 和 Rust。
- Cangjie 已在 GitHub 开源,采用 MIT 许可证,目标是成为高可靠系统的首选语言。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 仓颉语言概述
- 核心特性
- 效应处理器
- 代数数据类型
- 模式匹配
- 技术架构
- LLVM 编译后端
- 静态类型系统
- 生态与发展
- MIT 开源许可证
- GitHub 社区驱动
金句 / Highlights
值得收藏与分享的关键句。
Cangjie 的效应处理器无需运行时依赖,通过类型系统静态解析副作用。
其代数数据类型设计借鉴了 ML 家族语言,但增加了对递归类型的优化支持。
编译器后端使用 LLVM,确保生成代码性能接近手写 C++。
仓颉:一种全新的开源编译型语言,原生支持效果处理程序和代数数据类型 - InfoQ
您对本网站Cookie的选择
我们使用Cookie来优化网站功能,为您带来最佳体验。
我接受 我不接受 设置
[BT](https://www.infoq.com/int/bt/ "bt")
InfoQ软件架构师通讯
每月为架构师和有志成为架构师的人士提供必备知识的精选内容。
输入您的电子邮件地址
选择您的国家 - [x] 我同意InfoQ.com按照本隐私声明所述处理我的数据。
关闭
在线研讨会及问答:面向自主可靠性的架构设计——将AI嵌入您的可观测性堆栈(2026年6月25日)预留席位
关闭
切换导航
促进专业知识和创新在专业软件开发领域的传播
英文版
[为InfoQ投稿](https://www.infoq.com/write-for-infoq/ "为InfoQ投稿")
搜索
解锁完整InfoQ体验
登录以解锁完整InfoQ体验!随时关注您喜爱的作者和话题,参与内容互动,并下载独家资源。
或
尚无InfoQ账户?
- 随时掌握重要主题和同行动态 接收最新洞察和趋势即时提醒
- 快速获取持续学习资源 包含迷你手册、带字幕视频和培训材料
- 收藏文章随时阅读 标记文章以便随时查阅
主题
[开发](https://www.infoq.com/development/ "开发")
- [Java](https://www.infoq.com/java/ "Java")
- [Kotlin](https://www.infoq.com/kotlin/ "Kotlin")
- [.Net](https://www.infoq.com/dotnet/ ".Net")
- [C#](https://www.infoq.com/c_sharp/ "C#")
- [Swift](https://www.infoq.com/swift/ "Swift")
- [Go](https://www.infoq.com/golang/ "Go")
- [Rust](https://www.infoq.com/rust/ "Rust")
- [JavaScript](https://www.infoq.com/javascript/ "JavaScript")
开发领域精选
- #### 从VR到平面屏幕:弥合输入与沉浸感差距
Dany Lepage探讨了将热门VR游戏移植到七个非VR平台的架构之旅。他解释了团队如何解决跨平台进度同步、多样化输入范式,以及在Steam、iOS和PlayStation上保持发布速度的挑战。除技术细节外,他还分享了关于将沉浸式社交体验转化为2D屏幕时"产品适配"差距的深刻见解。

查看全部开发内容 关注该主题
[架构与设计](https://www.infoq.com/architecture-design/ "架构与设计")
- [架构](https://www.infoq.com/architecture/ "架构")
- [企业架构](https://www.infoq.com/enterprise-architecture/ "企业架构")
- [可扩展性/性能](https://www.infoq.com/performance-scalability/ "可扩展性/性能")
- [设计](https://www.infoq.com/design/ "设计")
- [案例研究](https://www.infoq.com/Case_Study/ "案例研究")
- [微服务](https://www.infoq.com/microservices/ "微服务")
- [服务网格](https://www.infoq.com/servicemesh/ "服务网格")
- [设计模式](https://www.infoq.com/DesignPattern/ "设计模式")
- [安全](https://www.infoq.com/Security/ "安全")
架构与设计精选
Jimmy Morzaria探讨了Stripe数据库层的演进历程,该系统现可支持每秒500万次查询和5.5个九的可靠性。他解析了DocDB架构,并分享Stripe如何通过定制的零停机数据迁移平台实现水平分片、版本升级和多租户迁移——同时保持全球商业所需的严格一致性。

查看全部架构与设计内容 关注该主题
[AI基础设施](https://www.infoq.com/ai-ml-data-eng/ "AI基础设施")
- [大数据](https://www.infoq.com/bigdata/ "Big Data")
- [机器学习](https://www.infoq.com/machinelearning/ "Machine Learning")
- [NoSQL](https://www.infoq.com/nosql/ "NoSQL")
- [数据库](https://www.infoq.com/database/ "Database")
- [数据分析](https://www.infoq.com/data-analytics/ "Data Analytics")
- [流处理](https://www.infoq.com/streaming/ "Streaming")
人工智能、机器学习与数据工程精选
- #### AI辅助工程中的领导力
贾斯汀·罗克(Justin Reock)探讨了AI对工程领域影响的真实现状,通过DORA和DX研究数据取代轶事分析。他解释了"生成式AI鸿沟"现象(95%的试点项目失败),并分享领导者如何通过SPACE和Core 4框架衡量真实ROI。他阐述了如何平衡开发速度与质量、降低开发者焦虑,以及在整个软件开发生命周期中应用智能代理解决方案。

全部内容 关注该话题
[文化与方法](https://www.infoq.com/culture-methods/ "Culture & Methods")
- [敏捷开发](https://www.infoq.com/agile/ "Agile")
- [多元文化](https://www.infoq.com/diversity/ "Diversity")
- [领导力](https://www.infoq.com/leadership/ "Leadership")
- [精益/看板](https://www.infoq.com/lean/ "Lean/Kanban")
- [个人成长](https://www.infoq.com/personal-growth/ "Personal Growth")
- [Scrum](https://www.infoq.com/scrum/ "Scrum")
- [动态治理](https://www.infoq.com/sociocracy/ "Sociocracy")
- [软件工艺](https://www.infoq.com/software_craftsmanship/ "Software Craftmanship")
- [团队协作](https://www.infoq.com/team-collaboration/ "Team Collaboration")
- [测试](https://www.infoq.com/testing/ "Testing")
- [用户体验](https://www.infoq.com/ux/ "UX")
文化与方法精选
- #### AI时代的开发愉悦感鸿沟
在本次播客中,文化与方法首席编辑Shane Hastie对话TurinTech AI工程副总裁Michael Parker,探讨如何在AI时代重拾软件开发乐趣、"工厂架构师"(通过编排AI代理而非直接编写代码)的兴起角色,以及AI概念炒作与开发者维护遗留代码库现实之间的文化冲突。

全部内容 关注该话题
- [基础设施](https://www.infoq.com/infrastructure/ "Infrastructure")
- [持续交付](https://www.infoq.com/continuous_delivery/ "Continuous Delivery")
- [自动化](https://www.infoq.com/automation/ "Automation")
- [容器技术](https://www.infoq.com/containers/ "Containers")
- [云计算](https://www.infoq.com/cloud-computing/ "Cloud")
- [可观测性](https://www.infoq.com/observability/ "Observability")
DevOps精选
- #### 流媒体应用后端架构演进
丹尼尔·弗拉斯卡(Daniele Frasca)解析了德国流媒体巨头Joyn的架构演进历程。他分享了从脆弱的单节点架构向基于AWS的弹性无服务器架构的迁移经验,深入讲解了数据一致性保障的"中心辐射"模式、通过单元隔离降低故障影响范围的策略,以及实现经济高效的多区域双活架构的成本优化方案。

全部内容 关注该话题
[活动会议](https://events.infoq.com/ "Events")
相关链接
- [关于InfoQ](https://www.infoq.com/about-infoq "About InfoQ")
- [InfoQ编辑团队](https://www.infoq.com/infoq-editors "InfoQ Editors")
- [向InfoQ投稿](https://www.infoq.com/write-for-infoq "Write for InfoQ")
- [关于C4Media](https://c4media.com/ "About C4Media")
- [多元文化倡议](https://c4media.com/diversity "Diversity")
选择语言

[InfoQ 首页](https://www.infoq.com/ "InfoQ 首页")[新闻](https://www.infoq.com/news "新闻")仓颉:一种支持原生效应处理器和代数数据类型的新型开源编译型语言
[开发](https://www.infoq.com/development/ "开发")
QCon 旧金山 (11月16-20日):深度技术会议。改变思维模式的同行交流。
Cangjie:一种支持原生效应处理器和代数数据类型的新型开源编译型语言
2026年5月11日 3分钟阅读
作者:
- [](https://www.infoq.com/profile/Bruno-Couriol/)Bruno Couriol
关注应用顾问
#### 为InfoQ投稿
满足求知欲。帮助全球55万+资深开发者每月保持技术领先。立即联系
登录后可收听本文
音频准备就绪
你的浏览器不支持音频播放器。
0:00 0:00
正常 1.25x 1.5x
收藏
华为爱丁堡研究中心编程语言实验室负责人Dan Ghica教授近期展示了仓颉语言(CJ),这是一种支持代数数据类型和效应处理器的新一代应用开发语言。该开源语言定位为Java、Kotlin或Swift的替代方案,目前已在中国80多所高校开设课程。
据Ghica介绍,仓颉是一种通用型、高级且表达力强的语言,设计上注重安全性和高效性。与所有新语言一样,CJ在继承前辈优点的基础上,力求在编程语言领域占据独特定位。CJ直接编译为机器码,支持多平台后端,可在Linux、macOS、Windows、Android、iOS和鸿蒙OS系统运行。
核心特性包括静态类型检查、模式匹配、并发垃圾回收、代数数据类型(ADT)以及元编程功能(如宏和注解)。以下是Cangjie中模式匹配的示例:
enum TimeUnit {
| Year(UInt64)
| Month(UInt64)
}
enum Command {
| SetTimeUnit(TimeUnit)
| GetTimeUnit
| Quit
}
main() {
let command = SetTimeUnit(Year(2022))
match (command) {
case SetTimeUnit(Year(year)) => println("Set year ${year}")
case SetTimeUnit(Month(month)) => println("Set month ${month}")
case _ => ()
}
}然而,Cangjie为学术界带来的最重要特性,当属其原生支持效应处理器。CJ的效应处理器实现对异常机制进行了泛化,并声称能简化动态绑定。该特性引入了新的perform和resume关键字,标准的try/catch/finally代码块变为try/catch/handle/finally结构。
class FileNotFound <: Command<String> {
public FileNotFound(let filename: String) {}
}
func readFile(name: String): String {
var actualName = name
if !fileExists(name) {
actualName = perform FileNotFound(name) // (1):控制流跳转至(2)
}
return File(actualName).read()
}
main() {
try {
let str: String = readFile("foo.txt")
println(str)
} handle (e: FileNotFound, r: Resumption<String, Unit> ) {
resume r with "/etc/default.txt" // (2):控制流返回(1)处并返回值
}
}效应处理器(Effect handlers)可用于多种用途,包括非确定性和回溯、调度、增量计算、依赖注入和配置(例如reader效应)、模拟功能,以及前文提到的异常处理。以下是一个使用CJ效应处理器实现缓存和记忆化的示例:
func withCache<Cmd, Result, Return>(fn: () -> Return): Return
where Cmd <: Hashable & Equatable<Cmd> & Command<Result>
{
let cache = HashMap<Cmd, Result>()
try {
fn()
} handle (cmd: Cmd, next: Resumption<Result>) {
let result = match (cache.get(cmd)) {
case None =>
let result = perform cmd
cache.put(cmd, result)
result
case Some(cached) =>
cached
}
resume next with result
}
}Ghica强调,CJ的效应处理器还为动态绑定提供原生支持,允许代码与其调用上下文交互。Ghica以日志库为例说明如何根据设备定义日志方法:
假设你为Oniro框架编写了一个库。这个库可能运行在笔记本电脑、手机、手表,或没有屏幕/硬盘/控制台的物联网设备上。此时没有统一的日志标准。在这种情况下该怎么办?
这时就需要使用动态绑定。当你的代码需要记录日志时,需要通知上下文"需要执行日志操作",由上下文决定如何处理。与异常不同的是,操作完成后需要能继续执行。你不想抛出异常中断程序,而是希望由上下文控制日志方式后继续计算。
例如在桌面端可以直接打印控制台日志,而在移动端由于没有控制台,可以选择弹出显示日志的提示框,或者发送邮件,甚至忽略日志。上下文可以按需选择实现方式。这就是日志功能的全部要点——仅需三行代码即可实现。尝试在没有效应处理器的语言中实现相同功能,你会发现复杂度会显著增加。
虽然已有多个基于效应处理器的框架作为第三方组件提供给Cangjie,但效应处理器仍被视为语言中处于积极开发阶段的实验性功能。
Ghica的演讲于2026年4月在布鲁塞尔举办的OCX(开放社区体验)大会上进行。OCX是Eclipse基金会的旗舰开源会议,为期三天,汇聚开发者、研究人员、行业领袖和政策制定者。
关于作者
[](https://www.infoq.com/profile/Bruno-Couriol/)
#### Bruno Couriol
电信硕士。数学学士。
显示更多 显示更少
#### 本内容属于 Web开发 话题
关注话题
##### 相关话题:
关注者:4096
关注话题
关注者:434
关注话题
关注者:957
关注话题
关注者:86
关注话题
关注者:49
关注话题
* #### 相关编辑内容
- ##### Warper:基于Rust的React虚拟化库
- ##### Prisma 7:无Rust架构实现性能飞跃
* #### 相关赞助内容
- ##### 客户端风险上升与信任缺口
- ##### 现代移动应用安全中的实时威胁监控与分析必要性
- #### 相关赞助
嵌入式 Ably AI 传输解决方案
面向完整代理到用户交互体验的专用基础设施。[立即开始构建](https://www.infoq.com/url/f/c8fe72db-3741-4495-a5f2-5d556c901ca5/)
相关内容
2026年5月9日
2026年4月29日
2026年4月28日
2026年4月23日
2026年4月21日
2026年4月20日
2026年4月18日
- ##### Pulumi 增加完整 Bun 运行时支持
2026年4月18日
2026年4月16日
相关赞助商
- #### 你的 AI 技术栈需要会话层吗?面向 AI 代理开发团队的成熟度框架
探索 AI 技术栈中缺失的"会话层"——许多生产环境故障的根源。该框架定义了从脆弱的 HTTP 流式传输到具备持久会话的弹性多设备实时系统的成熟阶段,助力交付持续、有状态的 AI 体验。立即阅读。
- 赞助方

相关内容
2026年4月20日 
2026年4月25日
- ##### C++26:反射、内存安全、契约与新异步模型
2026年4月17日
2026年3月18日 
- 图标##### WebAssembly 组件如何实现安全可移植的软件扩展
2026年2月20日 
2026年5月1日
**InfoQ** 通讯
每周二发送的 InfoQ 上周内容精选,面向超过25万高级开发者的社区。查看示例
请输入您的电子邮箱地址
选择您的国家 - [x] 我同意 InfoQ.com 按照本隐私声明中所述处理我的数据。
- ##### [Cangjie:一种新的开源编译型语言,原生支持效应处理器和代数数据类型](https://www.infoq.com/news/2026/05/cangjie-effect-handlers-adt "Cangjie:一种新的开源编译型语言,原生支持效应处理器和代数数据类型")
- ##### [攻击者在 Flippa 上购买了 30 个 WordPress 插件,并全部植入后门](https://www.infoq.com/news/2026/05/wordpress-plugins-supply-chain "攻击者在 Flippa 上购买了 30 个 WordPress 插件,并全部植入后门")
- ##### [Cloudflare 推出旗舰产品 Flagship:基于 OpenFeature 构建的边缘原生特性标记服务](https://www.infoq.com/news/2026/05/cloudflare-flagship-openfeature "Cloudflare 推出旗舰产品 Flagship:基于 OpenFeature 构建的边缘原生特性标记服务")
- ##### [Netflix 使用 Apache Druid 中的区间感知缓存,使 84% 的查询结果来自缓存](https://www.infoq.com/news/2026/05/netflix-druid-interval-cache "Netflix 使用 Apache Druid 中的区间感知缓存,使 84% 的查询结果来自缓存")
- ##### [GitHub 如何保障现代 CI/CD 系统中的智能体工作流安全](https://www.infoq.com/news/2026/05/github-agentic-workflows "GitHub 如何保障现代 CI/CD 系统中的智能体工作流安全")
- ##### [OpenAI 推出基于 WebSocket 的执行模式,以降低智能体工作流的延迟](https://www.infoq.com/news/2026/05/openai-websocket-responses-api "OpenAI 推出基于 WebSocket 的执行模式,以降低智能体工作流的延迟")
- ##### [AI 快乐差距:为何一些开发者如鱼得水,而另一些却举步维艰](https://www.infoq.com/podcasts/some-developers-thrive-while-others-struggle/ "AI 快乐差距:为何一些开发者如鱼得水,而另一些却举步维艰")
- ##### [应用“当前最佳简单系统”进行软件设计](https://www.infoq.com/news/2026/05/best-simple-system-design/ "应用“当前最佳简单系统”进行软件设计")
- ##### [人类可扩展性难题:为什么你的团队无法像代码一样扩展](https://www.infoq.com/presentations/human-scalability/ "人类可扩展性难题:为什么你的团队无法像代码一样扩展")
- ##### [Coder Agents 支持在自托管基础设施上运行 AI 编码工作流](https://www.infoq.com/news/2026/05/coder-agents-self-hosted-ai/ "Coder Agents 支持在自托管基础设施上运行 AI 编码工作流")
- ##### [Netflix 推出“模型生命周期图”,以扩展企业级机器学习](https://www.infoq.com/news/2026/05/netflix-ml-graph/ "Netflix 推出“模型生命周期图”,以扩展企业级机器学习")
- ##### [MySQL 9.7:自 8.4 以来首个重大 LTS 版本,将企业功能引入社区版](https://www.infoq.com/news/2026/05/mysql-97-lts/ "MySQL 9.7:自 8.4 以来首个重大 LTS 版本,将企业功能引入社区版")
- ##### [流媒体应用后端的演进之路](https://www.infoq.com/presentations/streaming-application-aws-infrastructure/ "流媒体应用后端的演进之路")
- ##### [最新 DORA 报告称强大的工程基础推动 AI 投资回报率](https://www.infoq.com/news/2026/05/dora-roi-ai-assisted-dev-report/ "最新 DORA 报告称强大的工程基础推动 AI 投资回报率")
- ##### [Cloudflare 推出“Artifacts”测试版,为 AI 智能体引入类似 Git 的版本控制](https://www.infoq.com/news/2026/05/cloudflare-artifacts-ai-agents/ "Cloudflare 推出“Artifacts”测试版,为 AI 智能体引入类似 Git 的版本控制")
**InfoQ** 通讯
每周二发送的 InfoQ 上周内容精选。加入超过 25 万名高级开发者的社区。查看示例
- 快速了解在创新者和早期采用者技术领域发布的内容
- 发现你尚未意识到自己不知道的知识
- 持续获取你感兴趣主题的最新资讯
输入您的电子邮箱地址
选择您的国家 - [x] 我同意 InfoQ.com 按照本隐私声明中所述处理我的数据。
[首页](https://www.infoq.com/ "Home")[创建账户](https://www.infoq.com/reginit.action "Create account")登录[QCon 大会](http://qconferences.com/ "QCon Conferences")活动[为 InfoQ 撰稿](https://www.infoq.com/write-for-infoq/ "Write for InfoQ")[InfoQ 编辑团队](https://www.infoq.com/infoq-editors/ "InfoQ Editors")[关于 InfoQ](https://www.infoq.com/about-infoq/ "About InfoQ")[关于 C4Media](https://c4media.com/ "About C4Media")[媒体工具包](https://get.infoq.com/infoq-mediakit/ "Media Kit")[InfoQ 开发者营销博客](https://devmarketing.c4media.com/?utm_source=infoq "InfoQ Developer Marketing Blog")[多样性](https://c4media.com/diversity "Diversity")
#### 活动
- ##### QCon AI 波士顿
2026 年 6 月 1-2 日
- ##### 线上 InfoQ 架构师认证
2026 年 6 月 10 日
- ##### 线上 InfoQ AI 工程师认证
2026 年 7 月 25 日
- ##### QCon 旧金山
2026 年 11 月 16-20 日
#### 关注我们
Youtube 23.2 万关注者Linkedin 2.6 万关注者Instagram 新RSS 1.9 万订阅者X 5.71 万关注者Facebook 2.1 万点赞Bluesky 新
#### 保持了解
InfoQ 播客工程文化播客软件架构师通讯
一般反馈 [feedback@infoq.com](mailto:feedback@infoq.com) 广告 [sales@infoq.com](mailto:sales@infoq.com) 编辑 [editors@infoq.com](mailto:editors@infoq.com) 市场营销 [marketing@infoq.com](mailto:marketing@infoq.com)
InfoQ.com 及所有内容版权归 © 2006-2026 C4Media Inc. 所有
关闭
[BT](https://www.infoq.com/int/bt/ "bt")