写点什么

搞编程语言是件能做一辈子的事儿 | 专访 ReScript 语言作者张宏波

  • 2021 年 10 月 27 日
  • 本文字数:11607 字

    阅读完需:约 38 分钟

搞编程语言是件能做一辈子的事儿 | 专访ReScript语言作者张宏波

伴随着云计算、大数据、5G 等数字技术的快速发展,软件定义一切的时代已经到来。而作为构建软件的最底层技术,编程语言的重要性不言而喻。世界上有很多编程语言,有的编程语言历史悠久,还有的刚刚崭露头角;有的编程语言名扬四海,而有的则默默无闻,关于哪种编程语言是最好的编程语言的争论从来就没有停止过。


不同的编程语言因其本身的特性和功能而拥有着固定的受众群体,且一旦该门语言的生态系统建立完善,那么它的地位几乎很难撼动,如谷歌公司在云计算领域推出的 Go 语言、苹果公司自行设计的 Swift 语言等等。编程语言层出不穷,但遗憾的是,这些被广泛使用的编程语言中,没有国产编程语言的身影。


曾定位于面向智能物联网和编程教育的国产编程语言“木兰”被曝出后迅速起来了开发者社区的广泛热议。但随之有人发现,下载的程序包解包后却是个 Python。


我们为什么没有一款高商业价值的国产编程语言?国产编程语言开发的难点是什么?是环境?资金?技术?社区?还是......


近日,ReScript 作者 & Facbook 软件工程师张宏波做客大咖说,与我们聊一聊如何能培育出一门具有商业价值的编程语言。


以下对话是根据视频采访整理而成。


InfoQ:我们先来聊一下您最近的工作?


张宏波:在 Facebook 之前,我在纽约的 Bloomberg 工作,在 Bloomberg 工作的时候,我制作了 ReScritp 的前身,叫 BuckleScript 编译器,它后来在 Facebook Messenger 里被用到。在 Bloomberg 工作了几年,2017 年决定回国的时候,Facebook 联系到我,因为他们在 Messenger 用到了这个程序语言。但 Facebook 本身在中国没有 Engineering Office,他们通过一些特殊的方法还是破例让我从 2017 年开始就一直在家办公。


InfoQ:编程语言一直都很热,对于哪种编程语言是最好的编程语言的争论从未停止,您最喜欢哪种编程语言?


张宏波:我们先谈谈编程语言的本质。编程语言的本质是把一种抽象的机制提供给程序员,让程序员选择用什么样的抽象的机制来表达自己的想法。另外一个非常重要的就是平台,让程序语言能够跑在上面,因此编程语言是由两部分组成的。


如果从抽象的机制来讲,我觉得有两种语言令我印象非常深刻——一个是Haskell,Haskell 是一门比较偏学术的语言,它是一些学者们用来怎样设计更好的抽象机制的语言,我在这门语言里面学到了很多关于类型系统的知识,它是一种非常好的抽象机制。


还有一门动态语言,它没有类型系统,叫Common Lisp,它能教你一些编程语言的能力。它能让你非常容易地去定义一门新的编程语言,你不需要宿主语言来给你定制什么样的抽象机制,你可以自己设计抽象机制,这两门语言给让我学到很多东西。


光是有抽象是不够的,因为如果要写程序,就不能没有库。所以在这个问题上,我觉得还有一种语言让我觉得非常有意思,就是 JavaScript。JavaScript 是一门社交属性很强的语言,我写完了代码,发个链接过去,我的朋友就能看到,它跟我们以前的语言不一样。比如你要用 Common Lisp 或者用 C++写,你要把它编译成一个二进制文件,它还不一定能在朋友的机器上跑因为朋友可能使用的是苹果电脑。但是我写 JavaScript,写完以后,我只要给我的用户发个链接,他就立马就可以跑,这带来了很多的社交属性,这两类语言,让我觉得非常有意思。


但它们也各有不好的地方,它们都不是完美的编程语言。就像 Haskell 或者 Common Lisp,它可以让我设计出很好的抽象机制,但是它为了实现一种很完美的 purity,它会舍弃很多东西。比如,在 Haskell 这门语言里,它表达一些可变的概念非常晦涩,相当于它为了一些功能而放弃了另外一部分功能,所以我觉得它不是很完美。像 JavaScript,它可以让我很容易地写我的代码,但是如果我想让我的代码可以部署到对方的机器上,我就要做一个长时间维护的代码库,这就很难,因为我可能今天写了 JavaScript 代码,我过一段时间忘了,再重新看那个代码,我已经不知道怎么去维护这个代码了,维护的问题没有解决好,所以我觉得编程语言没有特别完美的。有些编程语言它适合你的某些需求,有些编程语言它适合你的另外的一些需求,所以就没有完美的程序语言,将来应该也不会出现这样的一种完美的程序语言。

“ReScript 的设计是为了让代码更好维护”


InfoQ:国外的很多编程语言,像 Java,他们的作者设计语言的初衷都是服务于己的,您做 ReScript 的初衷是什么?服务于人更多还是服务于己更多?


张宏波:我的初衷也是服务于自己的。我最初做 ReScript 其实是想让自己有一个顺手的工具。为什么我会有这样一个需求?因为我当时 14 年在 Bloomberg 工作,外界以为 Bloomberg 是一个媒体平台,其实不是的。我们内部叫 Data company,是一个数据公司,他们卖的是金融数据,他的主要盈利模式是卖 Bloomberg 终端软件,软件 UI 是 JavaScript 渲染的。14 年的时候,我们有上千万行的 JavaScript 代码,我们主要的工作语言,一个是 C++,一个是 JavaScript。当时我所在的组比较独特,就是我们有一部分金融衍生品定价的,是用 OCaml 写的,我们公司有一部分是函数式语言,我自己要天天写 JavaScript,但 JavaScript 当时还不像现在这样便利,特别不好维护,所以我们就在想怎么能让我们有一个让自己的舒服的语言去写 UI 的前端,另外当时还有一个大背景,就是 TypeScript 还没有现在这么流行,TypeScript 应该还没有出来。


一个是 TypeScript 还没有出来,另外一个是 JavaScript 已经足够快了,我们已经看到一些编译器本身可以用 JavaScript 自举,在浏览器上跑这个软件,在JavaScript上已经可以做很多有意思的事情。在周末或下班的时候,我就自己去研究了一下。刚开始是下班的时间自己做了一个原型,给我老板看了一下,老板也觉得非常好。我当时好像是花了六个周末就做了一个原型,那个 Demo 非常酷,我那时候把编译器本身也编译到浏览器身上,你一边写静态语言代码,实时地编译到 JavaScript,老板一下就意识到了这个东西的价值,一开始是同意我花一半的时间在做这个事情,后来就慢慢全职做这个事情。


但是回过头来看,这是一个巨大的坑,我一直在填坑。做编程语言这个东西,它是一个你可以做一辈子的事,到现在这件事我也没有做完。我一直在给别人设计工具,让它更好用,我自己反而还没有时间去真正地用这个语言去设计大型的程序,这是比较遗憾的事,我将来可能也需要去争取这样一个体验,希望自己有机会也用这个语言去做一些我想做的事。


InfoQ:您说一开始的时候只是始于兴趣,然后慢慢做成了全职?跟我们讲讲这其中的故事吧。


张宏波:因为我老板比较好,有时候碰到伯乐是很重要,当时我老板是个法国人,他觉得这个东西未来对公司肯定会有用,他就一直支持我。我们公司在美国算挺大的,也有三千多个程序员,他支持我去给 CTO 做汇报,而我当时还只是刚刚加入 Bloomberg。后来它成为了一个非常受欢迎的开源项目。


InfoQ:离开 Bloomberg 后您加入了 Facebook,那您在 Facebook 是全职还是外包形式的?


张宏波:Facebook 在国内没有 Engineering office,一开始有一个折中的方案,先做为 contractor,后来经过了差不多一两年的过渡以后,终于把我的工作模式敲定了(手续办下来花了一年多的时间),经过两个 VP 签字,现在我是 Facebook 的全职员工。


InfoQ:全职 Base 在国内了?


张宏波:是的,一直在家办公了。因为Facebook不像微软或者谷歌在国内有 Engineering Office,我们在国内没有 Engineering office,我在国内办公就是一个特例。

编程语言不是为了盈利,是为了传播更好的编程理念


InfoQ:您现在已经在 Facebook 做全职,是不是做编程语言没让您赚到钱?我其实挺想知道做编程语言到底赚不赚钱?


张宏波:基础软件都存在一个盈利模式的问题,编程语言作为一种基础软件如果谈到它的 Business Model,目前还没有特别成功的案例。但是这个东西就像高铁一样,高铁它本身不赚钱,但确实我们给国家带来很大的经济效益。从个人来讲,无论你在任何领域,如果你做到这个领域的最好的,那你个人的衣食肯定没有问题,但它作为一个 Business Model,目前还是没有特别明显的收益。


InfoQ:您觉得 ReScript 它的卖点是什么?就相比于同类型的语言它的竞争优势在哪里?


张宏波:ReScript 是一个对标 TypeScript 的语言,它主要是用来解决 TypeScript 的痛点的。我觉得 TypeScript 主要有两大痛点:一个是它叫 any-script,就是说你可以把任何类型变成 any,它的类型系统是不可依赖的,它能帮助你做代码的智能补全,但是并不能给你提供可依赖的那些信息,而 ReScript 的信息是可以依赖的,我的编译器是可以基于那些信息进行优化,甚至能提供更高效的代码。


此外,TypeScript 它有个性能问题,TypeScript 编译器本身是用 TypeScript 写的,所以编译一些大文件,它自己的内存可能就直接就跑不了了,它是 JavaScript 写的编译器,它的内存是个问题。还有现在 JavaScript 社区有个趋势,他们在把一些基础工具搬移到 Native,然后发现这个性能不只是十倍、二十倍的提升,有可能是一百倍的提升。我们编译的性能和 TypeScript 也差很多,可能会有一百倍的性能优势,这是 ReScript 相对于 TypeScript 的两大优势。


另外一个很重要的点就是 ReScript 是一种更先进的编程理念,这也是驱使我去做这个事情的原动力。因为 ReScript 它是起源于学术界的,最早是一个 ML(meta-language),后来有一个 OCaml,我们是基于OCaml上衍生的一个 ML 系的方言,它帮你去设计更好的抽象和做大规模的程序开发。ML 的作者是拿了图灵奖的,为什么这个学院派的语言它最后没有在工业界拓展开来?我觉得是有很多原因的,其中一个原因是学术界没有很好的执行力,有了更好的想法,怎么让编译器能够生成更好的代码,这个方面它没有做下去。我希望把这部分空缺给填补上,就是把学术界里面一些更好的想法带到工业界来,这是我做编程语言最大的一个动力。


InfoQ:一门新的语言,它落地后也要去做一些推广吧,ReScript 是如何做推广的,不能光有情怀吧?


张宏波:我们这方面做得并不够。我们也做过一些推广,开过几次用户开发者大会,我们在维也纳开过两次,在疫情之前我们也开过两次,大概是几百人那种技术交流会。


InfoQ:线上的?


张宏波:线下。


InfoQ:在疫情期间吗?


张宏波:在疫情之前,17、18 年那时开过两次技术大会,我们在芝加哥也组织过一次,也是全球的 ReScript 用户会议。因为我们之前更多的是在国外宣传,在 Twitter 上面做过一些宣传,有一些大 V 用户,也帮我们做了一些推广。但我觉得更关键的是我们确实有一些商业用户在用。最近有一个案例,TinyMCE 做商业文本编译器做得比较好,他们从 19 年下半年开始把他们下一代的 RTC 组件用 ReScript 重写了,一旦有商业软件和商业公司进入的话,他们肯定会希望平台越做越好,所以他们就会帮你去做一些推广,写一些博客之类的,如果运气好,能够在一些媒体上讨论一下,可能就会增加曝光度。这一点上,我们还需要努力,希望得到多多的宣传,因为真正好东西可能并不是大家都知道的。


InfoQ:的确,好东西并不是大家都知道,需要发出更多的声音让大家知道。接下来,您对 ReScript 未来的发展是怎么样规划的?


张宏波:我虽然 17 年回国了,但大部分时间和我打交道的还是一些外国朋友。接下来我希望在不放弃海外市场的前提下,把它做成一个让国内用户也能够使用起来更方便的语言。而且我做这个事情有一种很强的动力,不是出于商业目的或个人信仰的问题,而是我认为有三个点:首先 ReScript 本身是个非常有价值的东西,就像我刚才说的,它代表了一种更好的编程理念,如果有更多人去接触它,对社会是更有益的。我们可以让程序员去接收一些更好的东西,写出更好的软件,这是一种非常朴实的价值观,所以这是驱使我的原动力。


另外一点就是 ReScript 的编译器我们已经开发了很久了,它本身的完成度已经很高了,它的一些最具有挑战性的东西,我们已经做得差不多了,可能剩下的这些,比如工具链的完善、生态系统的搭建、让更多用户知道我们这个事情,需要靠更多人来做,人多力量大,越多人参与进来,在国内反而会有更好的一个前景。


第三点就是我个人追逐的一些东西变了,可能刚开始工作的时候,你觉得我要挣很多钱,买车买房,但接下来可能我追逐的下一阶段的目标就不再是以就挣更多的钱为目标,而是我想做一件觉得自己个人有意义的事情,对国家、对社会有意义的事情,如果我们能借助中国的社区的力量,能够做一门世界流行的语言,不只是在中文圈子里流行,而是立足中国,面向世界的一门非常流行的语言,是一件非常值得自豪的事情。


InfoQ:我们又聊到了国产编程语言这个话题上,我们国内也有一些做得比较好的编程语言,像易语言、习语言这样的,这些在业内比较知名的中文的编程语言,但它们没有像 Java、C、Python 这样就是被广泛应用,您觉得出现这种现象的原因是什么?


张宏波:据我所知,易语言用户还是非常多的,很多游戏外挂用的就是易语言。但是易语言是不开源的。习语言我没有听说过,我知道易语言还是有很多用户的,但如果一个技术软件它的编译器没有开源,是很难生存下去的,如果它的编译器不开源,很难评价它的工作。我想说的是,国产语言和中国语言还是差别很大的。当然,现在 JavaScript 它本身已经支持 unicode 了,你可以给变量赋名中文,是没有问题的,国产语言和中文语言它不能划等号。还有另外一点就是我们推广一个语言是因为语言有它自身的价值,而不是为了国产而国产。但是从情感上来讲,国产语言它有没有必要呢?我觉得从情感来讲,国产语言是很有必要的,因为如果一门语言它的作者是中国人,你跟他交流的机会就会多一些,如果你跟他很熟,比如你觉得这门语言缺一些 Feature,你跟他去讨论,因为都是中国人,讨论起来就会有一些感情上的纽带,我们讨论一些东西就比较容易一点,我们想加一些东西进去就会容易一点。如果是开源软件,开源软件维护起来工作量还是很大的,如果你跟它没有什么情感的纽带,我要加一个东西,别人没有义务去给你维护,从情感上来讲,这是国产语言一个有利的条件。


InfoQ:我看到目前的市场上,国产语言的受众还不是特别多,用的人少,生态就搞不起来,生态搞不起来就更没人用,就像恶性循环一样,您觉得该怎么打破这个恶性循环?


张宏波:我觉得要有信心,还要有耐心,国产语言肯定会在一个合适的时间点出现的,刚才我们讲了,程序语言它提供了一种抽象机制,然后有个平台,为什么之前国产语言比较少?实际它没有国产的平台,像苹果它做了一个手机,就要让用户在它的平台上开发程序,肯定他就有这个需求。比如最近的鸿蒙,它可能就是一个新语言的契机,我也听说他们在搞这个事情,因为他们推出了自己的平台,那就有这个需求。


另一个,我觉得在体制方面,还是有机会的。因为程序语言的设计不是一个未解的东西,这个行业虽然它很难,但是它的所有的东西都是公开的,都可以查询到,如果领导者有足够的视野,他能选择一个正确的战略,那么下面人执行起来还是很快的。如果领导能够高屋建瓴地把这个事情规划好,我觉得是很有可能成功的,国产语言可能在将来的十年内就会出现一个非常流行的程序语言,我们要乐观看待这个问题。

“要给人才更多的自由发挥的空间”


InfoQ:我们非常乐观地看待这个问题,但是依然存在一些开发的难点是不是?比如环境、资金、或者是社区,是不是还会有一些阻碍的因素?


张宏波:我觉得不光是国产的编程语言,就是任何一门编程语言,如果要成为一个现象级的编程语言真的是很难,不比做一个独角兽,或者做一个大公司要容易,毕竟要出来做一个现象级的语言真的是要天时、地利、人和,很多因素缺一不可。


从我们国家角度来说,我觉得可能最根本的就是我们在文化上要对人才有一个发自内心的尊重,就给予人才一定的自由度,让他们除了解决一些商业上的需求以外,还能有一些自己的发挥空间。比如说我当时在 Bloomberg 的时候,工作非常轻松,有很多时间,我就会去想一些有意思的事情。再有就是我们要有一个新的平台,像我刚才说的那个鸿蒙,在自己的或者同样的平台上,有自己的技术闪光点。比如 ReScript,ReScript 的平台就是 JavaScript 平台,但是我在技术上有一些自己独特的价值,我也能存活下去。


另外一点就是,我们过去在社区经营上没有做得很好。社区真的很重要,可能你做了一个非常好的东西,但社区没管理好,同样用的人也不是很多。码农的思维都不太一样,它需要一个非常的专业的团队来运作这个事情,也是一个非常消耗心智的过程。所以说,我觉得我们要有自己的平台、有需求,然后技术上有自己的突破,维护好社区,这样的话,有可能会出现一个非常流行的语言。我觉得我们国产语言的出发点是从中国走向世界,而不是说我们自己在一个中文圈子里说这是一个国产语言,那就没什么意义了,一定是一个立足于中国面向世界的过程。


InfoQ:是不是观念上也有一些阻碍?比如一些业内的大佬,他们很热衷于开发这种中文的编程语言,或者是国产编程语言,但是也有一些声音认为,我们没有一个广泛应用的编程语言,是因为编程语言并不是特别关键的技术,没有必要坚持国产,对于这个问题您怎么看?


张宏波:这个观点肯定非常值得商榷的,因为编程语言它是基础软件,如果你要做一些底层上的创新,你是绕不开编程语言的。就相当于我们前段时间谈论得很火的芯片,如果想自己做个芯片,光有芯片肯定是不行的,我必然要写一个编译器,或者把这些已有的编程语言移植到这个平台上,编程语言是绕不开的。如果我们只是做一些商业模式上的创新,当然不需要去考虑这些,但如果要做一些技术上的创新,肯定是绕不开的。我再举个例子,像国外搞这个叫形式化编译器,也是很有意思,现在一些需要高度可依赖软件的领域,像航空航天,他们用的编译器不是我们传统的工业上的编译器,他们用的是一种经过形式化验证的编译器。保证经过这个编译器编译出来的程序能够符合某些特定需求,这东西需要在编程语言上进行一些投入才会有产出的,是需要一个长期的投入,而不是说把它当作一个黑盒,或者就用国外的东西就可以的。我觉得如果我们有更高的追求,这个东西是绕不开的,肯定是要做一些投入的。


InfoQ:消息区有提问,ReScript 什么时候会有一个 Native 的后端?


张宏波:我们技术上已经是可以支持了,两三个周末就能做出来。但因为我们的语言是一个从 OCaml 衍生出来的,是可以做 Native 后端的。但光做一个后端是不够的,你得提供 Debug tools,你得帮助用户去调试,你还得支持各种客户端,如果你生成后端代码系统就会有很多核,就不只是平台和后端,在我们当前的这种资源限制情况下,我们就只关注在 JavaScript。而如果我们能够把这个盘子做大,是完全可以就加入更多的后端的,这是一个资源的问题,也希望能够获得更多的朋友的帮助,一起把这个事情做大。技术上是完全可行的。


InfoQ:还有消息提问,ReScript 是基于 OCaml 的,还有另外一个类似的基于 Haskell 的语言叫 PureScript,您怎么看这两种语言的对比?


张宏波:这两种语言我都比较熟悉,还是我之前说的,PureScript 这是个学院派的语言,它能提供给你很多抽象。但是 ReScript 的立足点,是把一些想法用在工业界上,我们关注东西是不一样的。像 Haskell,它是让用户去做一些非常高阶的抽象,但 ReScript 是让用户写出非常高效的代码。所以你如果比较两个编译器就会发现,ReScript 它的生成代码是非常高效的,PureScript 它生成的代码,可能慢于 ReScript 十倍,二十倍,性能上会有很大的问题。从另外一个角度上讲,ReScript 是允许用户去修改内存变量的,像 PureScript,看它名字就知道 PureScript 是很纯的,它不允许你去修改的。但是我觉得在生活中,我们需要做很多一些世俗的工作,还是需要修改的,我们在这方面是允许的修改的。我们这样讲,PureScript 更多的是一个学院派的语言,我们 ReScript 是一个面向工业界的语言,我们实现强度也是工业级的。


InfoQ:作为 ReScript 的作者,在您从 0 到 1 设计 ReScript 的过程中,一定会沉淀出来一些方法论吧,能跟我们分享一下如何能做出一门具有商业价值的编程语言吗?


张宏波:我的个人体会是,人要做一些事情,还是看机遇的。要做出一个编程语言不是那么困难,但是你要做出一个有人用的、有公司愿意用的编程语言是非常困难的。我自己在研究生的时候,有做过一个语言叫 fan 语言,它用来支持用户做一些元编程,你可以用这个语言去设计一些其他的语言,听上去很 Fashion,很酷。但是这个语言,毕业完了就没有维护了。因为没有人用,我们没有需求去做这个事情。我觉得做东西是需要机遇的,不要为了去做一个编程语言而做编程语言,刚好碰到了这样一个机会,你觉得有意思,才要去做,这是我第一点体会。


第二点体会就是,人一辈子能做出一件事情就很难,大部分人一辈子就这样过去了。所以如果你刚好碰到一个自己觉得有意义的事情就要坚持下去,如果希望把这个事情做到最好,就要让自己扎根下去。过几年我朋友一直在问,你还在做 ReScript?是的,我一直在做。


就是这样,做编程语言要沉下心去做,如果要做得很好,真的就是十年起步。不是说不是你做这不像做一个产品,可能几个月就上线了,然后一代代去迭代。做一门编程语言,至少是十年起步,最近流行的 GO 语言它也有十多年的历史了。


InfoQ:国外的环境和国内的环境肯定是不一样的,您在国外做 ReScript 和在国内做 ReScript,它们的区别是什么?


张宏波:因为我个人是比较自由的,Facebook 给我的很好自由度,我的工作时间跟国外是差不多的,工作强度跟国外也差不多。目前还相当于在国外的工作环境,我可能还没有真正地融入国内的工作环境。但是我期望将来能够有机会真正地跟国内工作的同事进行交流,目前还不是很了解国内同事的工作强度和他们的工作节奏。


InfoQ:我看很多网友比较关心 ReScript 在国内具体的推广,您有一些具体的推广的计划吗?


张宏波:有,就是我刚才说的,这就是我接下来几年的工作重点。首先我们需要做一些中文文档,出版一些关于 ReScript 方面的书籍,希望把 ReScript 在大学课堂里面进行推广一下,ReScript 之前已经在美国的布朗大学教授了,这个是个非常有使命感的事情。像美国的名校,哈佛大学,康奈尔大学, 宾夕法尼亚大学,还有伯克利,他们入门语言都是 ML 系的,都是 OCaml 这种语言,不是 Java 或者 C++,它选这个语言是有理由的,他让你接受一些更好的抽象方式,在学校学习更有意义的一种编程模型,即使你将来用不到,但是你能学到更好的一种思维方式。但 ReScript 不一样,ReScript 不光使你能学到更好的思维方式,你还可以用它来切实地做一些产品,做一些有用的东西,从这方面来讲,把 ReScript 在大学里去教可能会更有意义一点,学生不会觉得很枯燥,因为学这个东西真的是可以用来做一些事情,能学到更好的一种思维方式。明年可能会在线下组织一些活动,一些用户会议,可能明年会着力在国内多花点时间进行推广。


InfoQ:您是自己来做这个事情,还是有一个团队来做推广,还是会有什么打算?方便透露一下吗?


张宏波:这个可能目前还不能确定,但是你可以期待,未来可期。我觉得这是个机会,我们不能错过,因为我们确实做了一个很有意义的东西,我希望做出一个让中国人自豪的编程语言的。


InfoQ:留言区网友提问,能说说 ReScript 和 asm.js 直接关系吗?编译出的 JS 和 asm.js 差不多吗?


张宏波:不是的,ReScript 最大的卖点,就是它可以和 JavaScript 无缝兼容,它生成的代码是一种高效的、同时可读的 JavaScript。因为我们之前在编程一种说法叫 worse is better,就是更差的就是更好的,它是什么意思?因为像 Python 这种的语言它设计的很糟糕,但是它的门槛低,所有人都能玩儿,就会有个非常大的生态系统,大家就越来越多的人把钱砸进去,可能他做得不好,但能慢慢修复。但是 ReScript 有个很好的一点就是它生成的代码是非常好的,好读的 JavaScript,你可能只是一个业余的玩家,你可以写 JavaScript,但是你可以直接调用专业人士写的 ReScript 代码,无缝兼容,而且我们有一个工具叫 genType,你可以生成 TypeScript 的代码,TypeScript 用户可以直接调用 ReScript,这样专业的人做专业的事情,我们互相不妨碍。像我最近看到韩国的一个用户,他就把一个 TypeScript 一小部分代码用 ReScript 重写,能有两到五倍的性能提升,允许用户直接调用。


InfoQ:ReScript 与底层的哪些语言能结合使用?Rust 可以吗?


张宏波:因为我们目前主要关注的平台是 JavaScript,但是如果我们有更多的资源,我们也可以支持生成原生平台,目前加进来还比较困难。


InfoQ:还有消息提问说,我们之前说过 ReScript 它有一个非常好的编程理念,能具体聊一聊这个理念好在哪里吗?


张宏波:首先它有一个非常好的模块化系统,定义的接口,只要你的接口不变,用户不用去关心它的实现,这个模块化系统,它是支持大规模编程的一个重要的基石。另外,Rescript 支持面向数据的编程——你定义好它的类型,就可以做一些模式匹配。因为我们程序员的日常工作中有相当大一部分都是把数据从 A 变到数据 B,这个是 ReScript 最擅长的,你只要写一个函数,通过模式匹配把数据 A 变成数据 B,是个非常自然的一个过程,它虽然是基于 ML 系统,但它是一个优化过的、超线性的系统。Rescript 做重构非常方便,而且它类型系统本身是安全的,你可以做一些非常快速的重构,我看到 ReScript 用户经常说他一天就改了一两万行的改动,没有任何的 regression,很少有 Bug 是因为重构而引入 -- 这是它的几大优点。


InfoQ:我们聊了这么多编程语言,相信是这一门好的编程语言一定会有一些特质,您觉得一门好的编程语言需要具备哪些特征?


张宏波:这个是一个非常主观的问题。编程语言是用来解决用户的需求的,如果你能够解决用户的需求,它就是一门还不错的语言,但是对程序员来说,切换编程语言代价是很高的,这不像学一门编程语言那么容易。因为你切换的是整个生态系统,切换编程语言的门槛是很高,作为程序员来说,你要选择一门语言,它的优势要足够大,你才能去切换。我给你举个简单的例子,在 TypeScript 还没有出来之前,有一门语言叫 CoffeeScript,CoffeeScript 也是很火的,但它本身没有带来足够的价值,很快就消亡掉了。TypeScript火起来以后,CoffeeScript 很快就消亡掉了,因为它只是给你提供了一些语法层,没有给你带来一些本质的东西,所以这门语言消亡是很快的。我希望我们去做一门语言,要带来足够多的价值,不要去停留在怎么去修改这个语法的问题,因为语法不是一个很本质的东西。


InfoQ:那您能不能给我们预测一下,未来哪些编程语言是大势所趋?


张宏波:这是个很大的问题。就像我说的编程语言就是在某个特定的平台上提供抽象机制,这个平台如果欣欣向荣,那它就一定会出现一个很有意思的语言,让用户来去操作它。我觉得像最近比较火的一个硬件就是 GPU 这一块,如果一门语言它能让你更方便地操作 GPU,它就一定会很有潜力。


最近的 WebGPU 在 Chrome 上已经进入了一个 alpha 版本了,将来肯定会有一些针对 WebGPU 的这个新的标准更好的编程语言。然后就是平台的问题,有好的平台必然会出现一些新的语言,然后从编程语言抽象的这个角度来说,我觉得分布式还是一个很好的切入点,要弄清楚如何让你的异步做得更好。从系统角度,Rust 现在很火,但是 Rust 还有进步的空间,我觉得 Rust 不会停留在这,将来还会有一些改进,因为 Rust 是为了保证安全性带来了巨大的复杂性,它将来还会有一些创新让这个复杂度降下来。


InfoQ:现在 ReSript 开始慢慢转向国内的市场了吗?


张宏波:不是转向,是立足国内,但我们不会放弃海外,扎根、立足中国,面向世界。


InfoQ:您说立足中国,面向中国的用户我们会做哪些升级?有没有这方面规划?


张宏波:说起来惭愧,我们之前对中文的支持不是很好,但现在我们在最新的版本,可能接下来要发布的版本就会支持中文了,之前用中文很别扭,你要打两个 backtik 才能写中文。


另外一个就是我们会提供一些官方的中文文档,然后多开展一些活动。还有一个我想做的事情,就是让更多用户在 ReScript 这个编译器上来贡献,因为这就可以让更多的用户学习怎么去做一个工业级的编译器,这是个很好的机会,这样会带动一帮人去了解去怎么设计编译系统,做编译器,这样会让价值的传播更有意义。


InfoQ:现在 ReScript 在网上有文档吗?


张宏波:有,但是英文的。像海外,我发现 ReScript 在韩国用得比较多,他们把它翻译成了韩语文档。ReScript 在巴西的流行度很高,我也不知道为什么,很多巴西的社区,他们也做了一些葡萄牙语的翻译,巴西甚至还开设了培训班,教用户去学习 ReScript。


InfoQ:我相信很多网友对 ReScript 还是很感兴趣的,我也替网友问一句,网上大约什么时候能有中文的文档,您有这个规划吗?


张宏波:明年。我们时间点是明年,明年会在国内做大规模的推广。


InfoQ:最后一个问题,作为 ReScript 语言的作者,给一些想学这个编程语言的程序员们有什么好的建议?


张宏波:如果你学 ReScript,ReScrit 我们有个官方论坛叫 forum.rescript-lang.org,这个论坛还是比较活跃的,如果你有什么问题可以在那个上面去问,每天都会有人去回答你的问题。


借此机会,我们希望如果国内大厂有机会看到这个,如果有愿意的,可以跟我私下聊聊,因为 ReScript 的强项,在大规模的代码库里面它的优势才会比较明显,我们可以看看能不能把它用在一些大的代码库里面。


嘉宾简介:


张宏波:ReScrit 语言作者,Facebook 高级工程师。

2021 年 10 月 27 日 16:391997
用户头像

发布了 309 篇内容, 共 88.5 次阅读, 收获喜欢 417 次。

关注

评论 1 条评论

发布
用户头像
支持!
2021 年 10 月 28 日 07:55
回复
没有更多了
发现更多内容

C++

IT蜗壳-Tango

10 月日更

代码简洁之道:一行Python代码解决问题是时尚还是玄学

博文视点Broadview

040022-week1-design

InfoQ_70156470130f

左手 CloudWeGo,右手 Kratos ,如何选?

baiyutang

golang 10月日更

模块一

Vue进阶(幺伍叁):Vue-highlight 实现代码高亮

No Silver Bullet

Vue 10 月日更 highlight.js

架构实战营 - 第三期 - 模块一作业

白小黑

架构实战营

Prometheus HTTP API 查询(一) 接口格式

耳东@Erdong

Prometheus PromQL 10 月日更 HTTP API

B格被拉满了....

Jackpop

网易云信被纳入 Gartner 2021年《CPaaS 市场指南》研究报告

网易云信

云通信 Gartner 音视频开发

第一周学习

乐知

「架构实战营」

架构实战营 模块一作业 微信业务架构图 & 学生管理系统

dog_brother

「架构实战营」

第一周作业

赵先生

架构实战营

模块一作业

Geek_1d37ea

架构实战营模块 1 作业

VegetableBird

架构实战营 #架构实战营 「架构实战营」

模块一作业

美好心情

「架构实战营」

Java 有关 Integer 一个好玩的包装类

HoneyMoose

架构训练实战营第一周作业

赵岩

如何实现CNN特征层可视化?终于懂了....

Jackpop

Python小白福音!Github开源了一款神器....

Jackpop

模块一作业及总结

Thomas

架构实战营

游戏数字资产复用——有哪些是你需要知道的?

龙智—DevOps解决方案

游戏开发 游戏引擎 perforce

敏捷QA需要编写测试用例吗?

BY林子

测试用例 敏捷测试

数仓无损压缩算法:gzip算法

华为云开发者社区

算法 deflate 无损 gzip 压缩数据

学习总结(第一周)

Geek_1d37ea

架构实战营

OKR与影响地图,别再傻傻分不清

华为云开发者社区

OKR 敏捷 影响地图 规划 目标

BASE 柔性事务学习笔记

风翱

Base 10 月日更

微信业务架构图

宥君

架构实战营

架构训练营 - 第一周作业

二手攻城师

「架构实战营」

学生管理系统架构

宥君

架构实战营

Java 包装类和基本类型

HoneyMoose

Flutter 自动化测试

Flutter 自动化测试

搞编程语言是件能做一辈子的事儿 | 专访ReScript语言作者张宏波-InfoQ