---
title: Move Source Language 比 Move IR 更像正常编程语言
date: '2019-10-25 10:54:43'
draft: false
summary: Move 走出 IR 形态后，关键变化不是语法好看了，而是终于开始具备更正常的语言体验和生态入口。
slug: move-source-language-vs-move-ir
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/Id6y8saE3
tags:
- move
- libra
- smart-contract
- programming-language
topics:
- blockchain
type: post
---

`Libra` 的 `Move source language` 要出来时，我粗略和早期的 `Move IR` 对比了一下，最大的感受不是“语法终于顺眼了”，而是它开始更像一门正常可用的编程语言了。

早期 `Move IR` 给人的一个很强烈感受，是底层语义暴露得太直接。

比如变量使用前，经常要显式写 `move(x)` 或者 `copy(x)`。这种设计当然有它的理论意义，因为 `Move` 想把资源语义、线性约束这些关键性质明确放到语言表面。

但从开发者体验上说，这种负担太重了。它会让很多本来应该聚焦在业务抽象和接口设计上的注意力，被迫消耗在一层过于细碎的语义操作上。

`Move source language` 往前走的一大步，就是把这部分负担收回去，让语言自己承担更多静态分析和推断工作。

这带来的直接结果是：开发者终于可以更自然地写代码，而不是时刻像在和一门暴露中间表示的语言打交道。

另外一个重要变化，是静态方法如果第一个字段是某个 `struct`，它就可以更自然地表现成这个 `struct` 的实例方法。

这件事看起来像语法糖，但其实影响不小。因为一旦语言在组织方法和类型关系上更自然，就更容易往更高层的接口抽象走。

比如要表达类似 `ERC20` 这样的接口模式，或者更复杂的资源操作抽象，如果语言层没有把这些基本组织方式铺平，上层抽象会非常拧巴。

所以我会觉得，`Move source language` 的进步，本质上不是“把 IR 包装得更好看”，而是让语言从“暴露核心机制”往“支持真实开发抽象”迈出了一步。

这一步很关键。因为智能合约语言最终要服务的不只是虚拟机设计者，也要服务真正写业务逻辑、抽象接口、维护系统的人。

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

![](./weibo-4431234446714107-1.jpg)
<!-- WEIBO_MEDIA_END -->
