MoonBit负责人张宏波CSDN采访录
2023-09-23 09:44:01 阿炯

受访者 | 张宏波,IDEA 研究院基础软件中心负责人、MoonBit 团队负责人
作者 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

自 1945 年第一部电子计算机投入使用算起,人类进入信息时代已有 70 余年,而编程语言作为非常重要的必备基础设施,也在不断演变发展:从最初的机器语言,到后来的汇编语言,再到如今的高级语言——换言之,当今信息时代飞速发展的背后,离不开编程语言。

曾有人试问:既然如此重要,为何中国没能开发出一门优秀的编程语言?但其得到的回答,却多是消极否定。

国产编程语言的难点到底在哪里,是信念、投入、资金还是人才?我们又该如何打破国产编程语言发展的僵局?为了解答这些问题,2023年9月 CSDN 专访了 IDEA 研究院基础软件中心负责人张宏波。

他不仅是程序语言 OCaml 的前核心开发人员,更是国内首位有国际影响力的程序语言 ReScript 作者,他最近带队开发的 100% 自主研发的编程语言 MoonBit,更是在业内引起了不小的关注——不仅有著名前端框架工具 Vue.js 作者尤雨溪、WebAssembly 生态知名公司 Wasmedge 在试用后转发公告,全球诸多技术爱好者也被 MoonBit 的编译速度所惊艳,并对其抱有高度期待。


那么接下来,就让我们走近张宏波的程序人生,希望通过他所分享的编程语言开发之路,能为正在开发国产编程语言的开发者们带来裨益,助力国产编程语言“破局”。

1、转入清华电子系,对编程语言萌生兴趣

如果以学习成绩做参考的话,张宏波或许从小就是家长口中“别人家的孩子”:小学是校第一毕业,初中是市第一毕业,在高考“没发挥好”的情况下,还被调剂到了清华大学的电气工程及自动化系(本来报的是数理基科专业)。但电气工程及自动化并非张宏波的兴趣所在,于是刚上大学他便决心要转专业,并在咨询了学长建议后,将电子系设为目标:大一结束时,张宏波凭借全系第三的成绩,如愿转入了电子系——甚至,那一年还是清华大学“姚班”的第一届。

忆及大二初进清华电子系的场景,张宏波感慨“确实高手如云”,他的成绩排名也掉到了全系 20 名左右。好在经过了一年的适应和专注后,他的专业成绩在大三又回到了全系第一,并获得了国家最高奖学金。

“现在回想起来,这些成绩只能作茶余饭后的谈资。人生最大的难处是开卷的,找到自己的方向并且坚持下去才是最重要的。”正如张宏波所说,大三这一年对他而言不仅是学业顺利,更是他对编程语言萌生兴趣的关键节点。事实上,早在大一大二时他就开始接触 C/C++ 编程了,课余时间也阅读了许多编程书籍,还用 OpenCV 做了一些东西。虽然通过编程能快速实现想法,但张宏波坦言:当时的他认为编程本身并不快乐,因为调试的时间占比太多了,很少能一次编译通过。

直到大三,成绩优异的张宏波进入微软亚洲研究院(MSRA)实习,在那里接触到了函数式编程语言 F#,并由此被编程语言的理论之美所吸引:“我发现,使用 F# 编写程序基本上可以一次性完成,几乎不需要经过调试,即使是构建复杂的系统也很快,这使得编程本身变得快乐起来。”

2、读博期间,成为 OCaml 核心开发人员


在清华大学和微软亚洲研究院(MSRA)的联合培养项目中,张宏波有幸遇到了他的伯乐——他的博士导师、IDEA 研究院创院理事长、原微软全球执行副总裁沈向洋(Harry Shum):“我觉得人生之中,除了努力外,如果能遇到自己的伯乐是很幸运且可贵的一个事情。对我而言,Harry 就是那个可贵的伯乐。”

读博期间的张宏波接触到了程序语言研究领域,并被程序语言的优美所打动,故而想要继续深造下去,便向 Harry 表达了这个愿望。得知张宏波想法后的 Harry,不仅十分支持他,还帮他引荐了多位资深专家和高等院校的系主任,包括 Simon Jones(Haskell 语言主要贡献者)和 Jeannette M Wing(卡内基-梅隆大学计算机系主任,后担任哥伦比亚大学常务副校长)。

正是在 Harry 的推荐和邀请下,张宏波获得了前往美国宾夕法尼亚大学计算机系读博的机会。随后他出于兴趣,还深度参与 OCaml 语言开源项目,并成为了 OCaml 的核心开发人员。

幸运的事情接踵而来。当时 Bloomberg 收购了一家法国金融衍生品公司的衍生品定价软件,该软件恰好是用 OCaml 编写的,因此急需一个擅长该编程语言和编译器的人——于是,彼时身为 OCaml 核心开发人员的张宏波,在读博期间就被 Bloomberg 邀请以实习生的身份加入。后因其表现出色,Bloomberg 向张宏波提供了一个待遇可观的 Offer,他也就此成为了 Bloomberg 的一名正式员工,从事函数式语言编译器的开发工作。

3、“不务正业”开发的 ReScript,成功打入了工业界

或许在外界看来 Bloomberg 只是一个媒体平台,但事实并非如此。其主要盈利模式是销售 Bloomberg 终端软件,而软件的用户界面是用 JavaScript 渲染的。2014 年在 Bloomberg 工作的张宏波,不仅要面对上千万行的 JavaScript 代码,自己也要天天写 JavaScript,再加上当时的 JavaScript 远不如现在这样便利,维护难度颇高,不禁令他深感头疼:“我开始思考,是否有一种更稳健且易于维护的编程语言,可以用来编写 UI 的前端逻辑?”

在这种想法的推动下,张宏波开始“不务正业”:利用周末或下班后的业余时间,他大概花了 6、7 个周末做了一个 Demo,也是一个 Playground(左边是 OCaml,右边是 JavaScript),方便他一边写静态语言代码,一边实时地编译到 JavaScript。幸运的是,这个 Hobby Project 得到了 Bloomberg 老板的认可,认为其开发体验很好,并允许张宏波对此进行全职开发——而这个 Hobby Project,便是 ReScript 的雏形。可能谁也没想到,就是这样一个原始设计动机在于为自己打造个更顺手的工具的编程语言 ReScript,后来会成为首个由国人主创、具有全球影响力的通用编程语言。

在最初设计 ReScript 时,张宏波曾想过一个问题:“为什么明明 ML(meta-language)的作者拿了图灵奖,这个学院派语言最终却没有在工业界拓展开来?”思来想去,他认为关键在于执行力:学术界没有很好的执行力,无法将想法很好地带入工业界。

为了弥补这部分空缺,将学术界里一些更好的想法带到工业界来,ReScript 起源于学术界,包括最早期的 ML 和后来的 OCaml,是一门基于 OCaml 上衍生的一个 ML(meta-language)系的方言,能帮开发者去设计更好的抽象和支持大规模的程序开发。

在社区的帮助和用户的建议下,ReScript 不断优化并完善,渐渐地张宏波的期待成真了:源自学术界的 ReScript,如今真的成功打进了工业界。不仅游戏公司 Ubisoft、文本编辑器 Tinymce 等大型公司将 ReScript 应用至他们的项目上,韩国农业科技型公司 Greenlabs、欧洲的一些跨领域公司、为国家公共交通提供移动解决方案的公司(cca.io)都在用 ReScript,甚至印度最大的物流市场(Porter)应用 ReScript 也已经超过两年了。

更值得一提的是,由于 Meta(原 Facebook)在 Messager 项目中也使用了 ReScript,因此在 2017 年张宏波决定回国时,Meta 主动抛出了橄榄枝,并破例允许他成为了 Meta 当时唯一一位常驻国内的软件工程师。而对于这些成绩,张宏波强调了一点:从 POC 到 Product 之间的鸿沟还是很大的。

“一个语言如果只是从 Toy Language(玩具语言)这个层面去出发,可能只需要耗费 6 个周末的时间。但如果要将其真正落地到工业场景,使其成为能用且好用的工具,是需要经过很多个环节的考验的,是一个可以做一辈子的事情。”

4、100%完全自主研发的MoonBit!

在 Meta 度过 5 年时光后,2022 年张宏波加入了沈向洋院士创办的 IDEA 研究院,带队研发使用 WebAssembly(以下简称 Wasm)的云计算与边缘计算开发平台。

尽管 Wasm 是一个 2017 年才推出的新一代标准指令集,但其潜在优势和开发前景不可小觑。不过目前在 Wasm 平台上,主流的开发语言仍然是一些对程序员门槛要求相对较高的底层编程语言,如 C++ 和 Rust;而应用层的 Go 语言,虽然在 Wasm 上运行,但它生成的代码体积巨大。基于这些痛点问题,张宏波及其团队开始思考要如何充分发挥 Wasm 的优势:如果能有一个平台,能解决前面的问题,那不仅可以形成后发者优势,也能促进整个生态的发展!

于是乎,一款 100% 完全自主研发的编程语言 MoonBit(月兔)应运而生。

得益于开发 ReScript 的经验加持,在张宏波的主导下,其团队开发 MoonBit 仅用了不到 11 个月的时间,甚至在 8、9 个月的时候就推出了 IDE、构建系统和编译器。

MoonBit 在语言设计上受到 ReScript 的启发,主要体现在以下三个方面:

(1)将IDE优先级提高,早期就明确了 IDE、构建系统与编译器的同步协作模式,帮助团队拥有全局视野(如果在语言的后期阶段才进行这些方面的构想,将大幅增加开发成本)。其中,与许多知名语言如早期的 Rust 和 Flow/Hack 一样,MoonBit 的核心编译器也是基于 OCaml 进行开发的,而张宏波正是 OCaml 的前核心开发人员,因此团队经验较为丰富。

(2)在构建系统上,之前开发 ReScript 时张宏波也积累了宝贵经验,即为了最好的性能,将编译器与构建系统高度整合。在这个基础上,MoonBit 在速度与性能上表现更佳。

(3)在语言生态上,MoonBit 也会追求实现商业化的可持续发展。正如上文所说,ReScript 在商业方面有很多国际化的用户与商业需求,恰好可用作 MoonBit 借鉴的宝贵经验。张宏波表示:“商业化模式将为我们提供稳定的资金来源,从而构建健康的语言生态闭环。我相信好的东西应该得到广泛应用,而商业化将为 MoonBit 带来长期稳定的发展。”

凭借这些优势,尽管目前 Moonbit 仍在 Pre-Alpha 阶段,但它已在 IT 工业界引发热议,还登上了 Hacker News 的头版头条。此外截至目前,MoonBit 的代码库也已累计进行了 6000 次提交(commit),这绝对是一个相当庞大的工作量。

对于 MoonBit 的未来发展规划和长期愿景,张宏波透露团队将集中在三个核心领域:教育、AI 和云/边缘计算。

教育领域

在教育领域,相对于 Python 和 Java,拥有简洁语法及强大类型系统的 MoonBit,可能更适合作为编程教学语言:简洁的语法让学生容易入门,而 MoonBit 生态配套工具,比如在线 IDE 可以让学生无需搭建调试本地开发环境即可直接编写和调试程序;类型系统可以让学生在学习程序语言的过程中,从更高的维度思考怎么让程序更稳定以及更容易长期维护。

“教育也是基础软件生态很重要的一部分,培养底层软件人才将有助于推动下游生态系统的建设,并为企业输送优质人才,实现互惠双赢。”

AI 领域

在 AI 领域,随着大型语言模型的兴起,MoonBit 具备与时俱进的优势,可以更好地结合当下趋势。据了解,开发团队正在积极推进将开源大语言模型(LLM)整合到 MoonBit 中的计划,目前已经实现了编译器与 AI 的实时交互,即充分利用开源大模型,通过特定领域的 LLM 来辅助用户生成高效的代码,未来也将继续通过交互式静态分析,进一步提高生成代码的准确性。

“我想强调的是,MoonBit 不仅是一个语言,也是一个端到端的解决方案。相信我们在 AI 垂直领域打造独有的语言生态,可以大幅提升程序员的开发效率。”

云/边缘计算领域

在云/边缘计算领域,MoonBit 的发展主要取决于 Wasm 的生态系统发展,而它的潜能还有很多可以释放的地方。例如,随着智能化的快速发展,对于车载驾驶领域而言,传统分布式电子架构已经无法满足智能化变革需求,因此一些汽车厂商已经开始将视野扩展到 Wasm 上了,积极寻求新一代电子架构来搭建底层硬件集中式平台,并通过软件 OTA 的方式来实现功能的快速迭代——此时,Wasm 架构上的安全、高性能、体积轻巧,使其成为边缘计算领域的首要选择。

在云计算领域,随着 AWS Lambda 等 Serverless 技术的广泛流行,业界也在寻找下一个比当代 Serverless 技术更安全,启动速度更快的方案。对此,张宏波认为:“Wasm 的超快冷启动速度以及安全性,也会是这个领域非常有力的竞争者。”

当 MoonBit 登上 Hacker News 热榜时,张宏波曾说,MoonBit 将是他退休前的最后一个项目——这句话的背后,无疑承载着他对 MoonBit 的极大投入和承诺:对他而言,MoonBit 不仅仅是一个项目,更是一项他将全身心投入的事业、一个他将长期奋斗的愿景。

我也希望把多年的开发和编程经验与 MoonBit 项目相结合,倾注全部心血。我认为,如果我们有机会在基础软件这个领域成为世界第一,那么这可能是我唯一一次的机会,之后可能再也没有精力和机遇去投入到这样的事情当中。

5、国产基础软件,一定能闯出来!


CSDN:圈内有不少人在坚持开发国产编程语言,但其中也有不少声音说“中国并非必须要有自己的编程语言”,对于这个问题您的看法是?

张宏波:这个观点是值得商榷的,因为编程语言它是基础软件,如果你要做一些底层上的创新,你是绕不开编程语言的。对于一个国家,拥有自己的编程语言是一项重要的战略性举措。尽管中国在学术论文发表方面已经居于世界最前列,但在大部分科技领域尤其是基础软件领域中依然处于大而不强的状态,其中很大的难点在于国内缺乏自己的开发平台。

在基础软件领域,特别是在程序语言方面也是类似的情况,业界比较流行的编程语言的社区主要集中在欧洲,比如 Haskell 社区基本都围绕英国的 GHC 中,法国和瑞士的 PL 在业界公认一流,也是因为像法国 INRIA 这样研究机构主导了 OCaml、Coq 的开发,瑞士的 EPFL 拥有自己的研究平台 Scala。

这让我想到《加强基础研究 实现高水平科技自立自强》中提到的一段话:
我们国家要建设基础研究高水平支撑平台。在过去很长一段时间,我国基础研究存在题目从国外学术期刊上找、仪器设备从国外进口、取得成果后再花钱到国外期刊和平台上发表的“两头在外”问题。近年来,我国着力打造世界一流科技期刊、建成一批大国重器,基础研究支撑平台建设取得长足进步,但是从根本上破解“两头在外”问题还任重道远。

拿 Matlab 做例子,国内的研究人员可能会发一些数值算法或者机器学习很好的论文,论文的成果可能最终转换成 Matlab 的工具箱的某个函数而不能沉淀在自己的生态里面,最后可能给其他国家的平台做嫁衣。

如果我们有自己的编程语言,我们可以进行更多的研究,发表关于静态分析等方面的论文,然后将这些研究成果应用在自己的平台上,最终实现整个生态系统的繁荣。这将使研究成果真正落地并造福于中国。

开发 MoonBit 平台是一个“道阻且长,行则将至”的过程,开发编程语言工具链以及培养自己的生态系统需要投入大量的时间和精力,但如果能让国内的基础软件学者和工业界开发者能够在自己的平台上沉淀积累,这将在工程和学术的角度都具有重要意义。

CSDN:多数国产编程语言的使用者并不多,因此其生态难以发展,导致使用体验不佳从而更“劝退”用户,这也是当前国产编程语言发展的主要难点之一。您认为要如何打破这一僵局,有哪些阻碍因素需要克服?

张宏波:这个问题确实值得深入探讨,因为不仅是国产编程语言,任何一门编程语言想要成为一个现象级的编程语言都非常困难,不比做一个独角兽,或者做一个大公司要容易。一个现象级的语言要天时、地利、人和,很多因素缺一不可。

天时:国家在政策上很支持基础软件的发展,基础软件的发展已不单单是一个行业的发展,更关乎着国家产业结构转型。我觉得基础软件是支撑信息产业升级的一个“根技术”,国家的重视以及政策利好都有利于基础软件产业的发展。

地利:我们所处的地域是深圳,这是一个充满活力的城市。同时我们所在的 IDEA 研究院背靠粤港澳大湾区(河套地区),最近国务院最新宣发的文件中提到了要重点发展河套地区,鼓励企业在科技创新领域发展,这也为创新科技企业提供了很好的平台。

人和:优秀人才的加入也给 MoonBit 提供了“新鲜血液”,我认为未来是属于年轻人的,重视人才培养很重要。“授人以鱼不如授人以渔”这个道理在这里是很适用的,科研和编程教育是 MoonBit 一直关注的场景。

我认为中国编程语言的出发点应该是走向世界,属于世界的,我们有很多机会去把这个语言做成,我们应该有信心和耐心。总之,只要有好的人才、对的方向、加以耐心和信心,国产基础软件一定能闯出来——关键在于敢创新,而非一直追随。我们要乐观地看待这个问题。


关于Moonbit

MoonBit是一个用于云计算和边缘计算的WebAssembly端到端编程语言工具链。系《盘点由中国人开发的编程语言》中的一种。

主要优势
生成与现有解决方案相比显著更小的WASM文件。
更高的运行时性能。
先进的编译时性能。
简单但实用的数据导向语言设计。

表达式包括:
值字面量(例如布尔值、数字、字符、字符串、数组、元组、结构体)
算术、逻辑或比较操作
访问数组元素(例如a[0])或结构体字段(例如r.x)或元组组成部分(例如t.0)
变量和(大写字母开头的)枚举构造器
匿名局部函数定义
match和if表达式

语句包括:
命名局部函数定义
局部变量绑定
赋值
While循环和相关的控制流结构(break和continue)
return语句
返回类型为unit的任何表达式

函数接受参数并产生结果。 在MoonBit中,函数是一等公民,这意味着函数可以作为其他函数的参数或返回值。

内置数据结构:元组、数组

元组是一个有限值的集合,使用圆括号()构造,其中元素由逗号,分隔。 元素的顺序很重要,例如(1, true)和(true, 1)是不同的类型。
数组是由方括号[]构造的有限值序列,其中元素由逗号,分隔。

变量可以使用关键字var或let分别声明为可变或不可变。 可变变量可以重新赋值,不可变变量则不能。

数据类型

创建新数据类型的方法有两种:struct(结构)和enum(枚举)。

在MoonBit中,结构与元组类似,但是它们的字段由字段名索引。 结构体可以使用结构体字面量构造,结构体字面量由一组带有标签的值组成,并用花括号括起来。 如果结构体字面量的字段完全匹配类型定义,则其类型可以被自动推断。

枚举类型和函数式语言中的代数数据类型类似。 枚举可以有一组情况,并且每个情况和元组类似,可以指定不同类型的关联值。 每个情况的标签必须大写,称为数据构造函数。 可以通过调用带有指定类型参数的数据构造函数来构造枚举。 枚举的构造必须使用标明类型。 可以通过模式匹配来解构枚举,并且可以将关联值绑定到每个模式中指定的变量。

可以在顶层的函数和数据结构定义中使用泛型。支持重载内置运算符。与运算符<op>相对应的方法名称是op_<op>。字符串插值是MoonBit的一个强大特性,它允许您在插值字符串中替换变量。这个特性通过直接将变量值嵌入文本中,简化了构造动态字符串的过程。