---
title: 线性类型在区块链上的意义
date: '2021-04-12 21:05:29'
draft: false
summary: 在线性类型最早的设想里，“世界状态”更多只是程序内部的一种抽象；而区块链提供了连续状态和可验证持久化之后，这种抽象第一次更接近现实资产与对象的表达。
slug: linear-types-matter-more-on-blockchains
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/KaBh401Uo
tags:
- programming-language
- linear-types
- blockchain
- move
topics:
- blockchain
type: post
---

那天看到一篇很早的论文《Linear types can change the world!》。刚看到题目时，我还在想老技术人吹牛也挺猛，一个类型系统就想“改变世界”。再看才发现，这里的“世界”说的是编程语言里的世界状态。

函数式编程语言一直容易被人吐槽的一点，就是状态变更不够直觉。所以作者想借助线性类型的特性，也就是“变量只能被使用一次”，来表达一种更接近世界状态变化的机制。

不可被复制也不可被销毁的变量，听着好像有意思，但这个特性只在某个程序运行时构造的世界里能发挥作用，如果程序停止了，世界状态被销毁了，或者存到磁盘里了，这个特性就没啥用了。在计算机这个信息世界中，不存在不可被复制的数据。

但区块链出现之后，这件事突然多了一点现实感。

1. 区块链执行每笔交易时，都是在上一笔交易留下的世界状态基础上继续运行，所以运行时状态是连续的。
2. 共识机制又保证了持久化下来的状态不会被随意篡改。

这样一来，如果我在智能合约里 `new` 出一个 `Object`，并且它是一种不可复制、不可销毁的对象，那它就会持续存在于这个世界里。如果再给它定义特定销毁条件，比如它是一块木头，只有经过火炉才能“销毁”，那程序世界里就开始具备了一种更强的资源语义。

这样可以把现实世界通过新的方式映射到程序世界，扩展出许多新的编程模型以及应用场景。比如，映射各种资产，无论是 Token 还是 NFT。感觉开启了一个新的编程世界。

<!-- WEIBO_MEDIA_START -->
## 原微博中的媒体

![](./weibo-4625265660007340-1.jpg)

![](./weibo-4625265660007340-2.jpg)
<!-- WEIBO_MEDIA_END -->
