搞編程語言是件能做一輩子的事兒 | 專訪ReScript語言作者張宏波

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"伴隨着雲計算、大數據、5G等數字技術的快速發展,軟件定義一切的時代已經到來。而作爲構建軟件的最底層技術,編程語言的重要性不言而喻。世界上有很多編程語言,有的編程語言歷史悠久,還有的剛剛嶄露頭角;有的編程語言名揚四海,而有的則默默無聞,關於哪種編程語言是最好的編程語言的爭論從來就沒有停止過。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不同的編程語言因其本身的特性和功能而擁有着固定的受衆羣體,且一旦該門語言的生態系統建立完善,那麼它的地位幾乎很難撼動,如"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MjM5MDE0Mjc4MA==&mid=2651024089&idx=5&sn=9f6ae4b16dabb5701d6fc40e94461529&chksm=bdbe928a8ac91b9ceb0e07c0ebb5b41d9cc062f94ee7cb32d2cb315d06e1fdae1d281686f948&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"谷歌公司在雲計算領域"}]},{"type":"text","text":"推出的Go語言、蘋果公司自行設計的Swift語言等等。編程語言層出不窮,但遺憾的是,這些被廣泛使用的編程語言中,沒有國產編程語言的身影。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"曾定位於面向智能物聯網和編程教育的"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzU1NDA4NjU2MA==&mid=2247499981&idx=1&sn=5ed620ada97562e7e91a60f32ee54604&chksm=fbea7902cc9df014d982bd71916d2b2f50afad8f5b0c79b654510dea6e31dec9cda82956c487&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"國產編程語言“木蘭”"}]},{"type":"text","text":"被曝出後迅速起來了開發者社區的廣泛熱議。但隨之有人發現,下載的程序包解包後卻是個 Python。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們爲什麼沒有一款高商業價值的國產編程語言?國產編程語言開發的難點是什麼?是環境?資金?技術?社區?還是......"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"近日,ReScript 作者 & Facbook軟件工程師"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/video\/yKON8gNtsPBViEr6OXro","title":"xxx","type":null},"content":[{"type":"text","text":"張宏波做客大咖說"}]},{"type":"text","text":",與我們聊一聊如何能培育出一門具有商業價值的編程語言。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"strong"}],"text":"以下對話是根據視頻採訪整理而成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我們先來聊一下您最近的工作?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"在Facebook之前,我在紐約的Bloomberg工作,在Bloomberg工作的時候,我製作了ReScritp的前身,叫BuckleScript編譯器,它後來在Facebook Messenger裏被用到。在Bloomberg工作了幾年,2017年決定回國的時候,Facebook聯繫到我,因爲他們在Messenger用到了這個程序語言。但Facebook本身在中國沒有Engineering Office,他們通過一些特殊的方法還是破例讓我從2017年開始就一直在家辦公。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:編程語言一直都很熱,對於哪種編程語言是最好的編程語言的爭論從未停止,您最喜歡哪種編程語言?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我們先談談編程語言的本質。編程語言的本質是把一種抽象的機制提供給程序員,讓程序員選擇用什麼樣的抽象的機制來表達自己的想法。另外一個非常重要的就是平臺,讓程序語言能夠跑在上面,因此編程語言是由兩部分組成的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果從抽象的機制來講,我覺得有兩種語言令我印象非常深刻——一個是"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/Q3RcPlfkTrEZYHHKdCCy","title":"xxx","type":null},"content":[{"type":"text","text":"Haskell"}]},{"type":"text","text":",Haskell是一門比較偏學術的語言,它是一些學者們用來怎樣設計更好的抽象機制的語言,我在這門語言裏面學到了很多關於類型系統的知識,它是一種非常好的抽象機制。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還有一門動態語言,它沒有類型系統,叫"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/DFsapO_9T268Re4pEzFm","title":"xxx","type":null},"content":[{"type":"text","text":"Common Lisp"}]},{"type":"text","text":",它能教你一些編程語言的能力。它能讓你非常容易地去定義一門新的編程語言,你不需要宿主語言來給你定製什麼樣的抽象機制,你可以自己設計抽象機制,這兩門語言給讓我學到很多東西。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"光是有抽象是不夠的,因爲如果要寫程序,就不能沒有庫。所以在這個問題上,我覺得還有一種語言讓我覺得非常有意思,就是JavaScript。JavaScript是一門社交屬性很強的語言,我寫完了代碼,發個鏈接過去,我的朋友就能看到,它跟我們以前的語言不一樣。比如你要用Common Lisp或者用C++寫,你要把它編譯成一個二進制文件,它還不一定能在朋友的機器上跑因爲朋友可能使用的是蘋果電腦。但是我寫JavaScript,寫完以後,我只要給我的用戶發個鏈接,他就立馬就可以跑,這帶來了很多的社交屬性,這兩類語言,讓我覺得非常有意思。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但它們也各有不好的地方,它們都不是完美的編程語言。就像Haskell或者Common Lisp,它可以讓我設計出很好的抽象機制,但是它爲了實現一種很完美的purity,它會捨棄很多東西。比如,在Haskell這門語言裏,它表達一些可變的概念非常晦澀,相當於它爲了一些功能而放棄了另外一部分功能,所以我覺得它不是很完美。像JavaScript,它可以讓我很容易地寫我的代碼,但是如果我想讓我的代碼可以部署到對方的機器上,我就要做一個長時間維護的代碼庫,這就很難,因爲我可能今天寫了JavaScript代碼,我過一段時間忘了,再重新看那個代碼,我已經不知道怎麼去維護這個代碼了,維護的問題沒有解決好,所以我覺得編程語言沒有特別完美的。有些編程語言它適合你的某些需求,有些編程語言它適合你的另外的一些需求,所以就沒有完美的程序語言,將來應該也不會出現這樣的一種完美的程序語言。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“ReScript的設計是爲了讓代碼更好維護”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:國外的很多編程語言,像Java,他們的作者設計語言的初衷都是服務於己的,您做ReScript的初衷是什麼?服務於人更多還是服務於己更多?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我的初衷也是服務於自己的。我最初做ReScript其實是想讓自己有一個順手的工具。爲什麼我會有這樣一個需求?因爲我當時14年在Bloomberg工作,外界以爲Bloomberg是一個媒體平臺,其實不是的。我們內部叫Data company,是一個數據公司,他們賣的是金融數據,他的主要盈利模式是賣Bloomberg終端軟件,軟件UI是JavaScript渲染的。14年的時候,我們有上千萬行的JavaScript代碼,我們主要的工作語言,一個是C++,一個是JavaScript。當時我所在的組比較獨特,就是我們有一部分金融衍生品定價的,是用OCaml寫的,我們公司有一部分是函數式語言,我自己要天天寫JavaScript,但JavaScript當時還不像現在這樣便利,特別不好維護,所以我們就在想怎麼能讓我們有一個讓自己的舒服的語言去寫UI的前端,另外當時還有一個大背景,就是TypeScript還沒有現在這麼流行,TypeScript應該還沒有出來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一個是TypeScript還沒有出來,另外一個是JavaScript已經足夠快了,我們已經看到一些編譯器本身可以用JavaScript自舉,在瀏覽器上跑這個軟件,在"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzU1NDA4NjU2MA==&mid=2247538062&idx=3&sn=19ae0759102910f1d8ff1ef890aab415&chksm=fbeaec41cc9d65576772ac6c4ecdbc8040bd6498e6b6d8d3bcb931f0ba949f0f475c09d74722&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"JavaScript"}]},{"type":"text","text":"上已經可以做很多有意思的事情。在週末或下班的時候,我就自己去研究了一下。剛開始是下班的時間自己做了一個原型,給我老闆看了一下,老闆也覺得非常好。我當時好像是花了六個週末就做了一個原型,那個Demo非常酷,我那時候把編譯器本身也編譯到瀏覽器身上,你一邊寫靜態語言代碼,實時地編譯到JavaScript,老闆一下就意識到了這個東西的價值,一開始是同意我花一半的時間在做這個事情,後來就慢慢全職做這個事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是回過頭來看,這是一個巨大的坑,我一直在填坑。做編程語言這個東西,它是一個你可以做一輩子的事,到現在這件事我也沒有做完。我一直在給別人設計工具,讓它更好用,我自己反而還沒有時間去真正地用這個語言去設計大型的程序,這是比較遺憾的事,我將來可能也需要去爭取這樣一個體驗,希望自己有機會也用這個語言去做一些我想做的事。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:您說一開始的時候只是始於興趣,然後慢慢做成了全職?跟我們講講這其中的故事吧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"因爲我老闆比較好,有時候碰到伯樂是很重要,當時我老闆是個法國人,他覺得這個東西未來對公司肯定會有用,他就一直支持我。我們公司在美國算挺大的,也有三千多個程序員,他支持我去給CTO做彙報,而我當時還只是剛剛加入Bloomberg。後來它成爲了一個非常受歡迎的開源項目。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:離開Bloomberg後您加入了Facebook,那您在Facebook是全職還是外包形式的?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"Facebook在國內沒有Engineering office,一開始有一個折中的方案,先做爲contractor,後來經過了差不多一兩年的過渡以後,終於把我的工作模式敲定了(手續辦下來花了一年多的時間),經過兩個VP簽字,現在我是Facebook的全職員工。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:全職Base在國內了?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波"},{"type":"text","text":":是的,一直在家辦公了。因爲"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzU1NDA4NjU2MA==&mid=2247543894&idx=2&sn=2008ac75dae9897869f1edef83e85821&chksm=fbea9599cc9d1c8ff893c4c5fd74caa2dea4307c371e30d9294656cf5ecfd5e650ff9b73d46f&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"Facebook"}]},{"type":"text","text":"不像微軟或者谷歌在國內有Engineering Office,我們在國內沒有Engineering office,我在國內辦公就是一個特例。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"編程語言不是爲了盈利,是爲了傳播更好的編程理念"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:您現在已經在Facebook做全職,是不是做編程語言沒讓您賺到錢?我其實挺想知道做編程語言到底賺不賺錢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"基礎軟件都存在一個盈利模式的問題,編程語言作爲一種基礎軟件如果談到它的Business Model,目前還沒有特別成功的案例。但是這個東西就像高鐵一樣,高鐵它本身不賺錢,但確實我們給國家帶來很大的經濟效益。從個人來講,無論你在任何領域,如果你做到這個領域的最好的,那你個人的衣食肯定沒有問題,但它作爲一個Business Model,目前還是沒有特別明顯的收益。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:您覺得ReScript它的賣點是什麼?就相比於同類型的語言它的競爭優勢在哪裏?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"ReScript是一個對標TypeScript的語言,它主要是用來解決TypeScript的痛點的。我覺得TypeScript主要有兩大痛點:一個是它叫any-script,就是說你可以把任何類型變成any,它的類型系統是不可依賴的,它能幫助你做代碼的智能補全,但是並不能給你提供可依賴的那些信息,而ReScript的信息是可以依賴的,我的編譯器是可以基於那些信息進行優化,甚至能提供更高效的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,TypeScript它有個性能問題,TypeScript編譯器本身是用TypeScript寫的,所以編譯一些大文件,它自己的內存可能就直接就跑不了了,它是JavaScript寫的編譯器,它的內存是個問題。還有現在JavaScript社區有個趨勢,他們在把一些基礎工具搬移到Native,然後發現這個性能不只是十倍、二十倍的提升,有可能是一百倍的提升。我們編譯的性能和TypeScript也差很多,可能會有一百倍的性能優勢,這是ReScript相對於TypeScript的兩大優勢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外一個很重要的點就是ReScript是一種更先進的編程理念,這也是驅使我去做這個事情的原動力。因爲ReScript它是起源於學術界的,最早是一個ML(meta-language),後來有一個OCaml,我們是基於"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzU1NDA4NjU2MA==&mid=2247502517&idx=3&sn=fc83209e4ae9f0c28d4d6678e47778af&chksm=fbea737acc9dfa6c4a729a61c1895d503c8ae601f1caeecd8b4131d1b782cfdb7e455ac3861d&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"OCaml"}]},{"type":"text","text":"上衍生的一個ML系的方言,它幫你去設計更好的抽象和做大規模的程序開發。ML的作者是拿了圖靈獎的,爲什麼這個學院派的語言它最後沒有在工業界拓展開來?我覺得是有很多原因的,其中一個原因是學術界沒有很好的執行力,有了更好的想法,怎麼讓編譯器能夠生成更好的代碼,這個方面它沒有做下去。我希望把這部分空缺給填補上,就是把學術界裏面一些更好的想法帶到工業界來,這是我做編程語言最大的一個動力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:一門新的語言,它落地後也要去做一些推廣吧,ReScript是如何做推廣的,不能光有情懷吧?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我們這方面做得並不夠。我們也做過一些推廣,開過幾次用戶開發者大會,我們在維也納開過兩次,在疫情之前我們也開過兩次,大概是幾百人那種技術交流會。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:線上的?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"線下。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:在疫情期間嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"在疫情之前,17、18年那時開過兩次技術大會,我們在芝加哥也組織過一次,也是全球的ReScript用戶會議。因爲我們之前更多的是在國外宣傳,在Twitter上面做過一些宣傳,有一些大V用戶,也幫我們做了一些推廣。但我覺得更關鍵的是我們確實有一些商業用戶在用。最近有一個案例,TinyMCE做商業文本編譯器做得比較好,他們從19年下半年開始把他們下一代的RTC組件用ReScript重寫了,一旦有商業軟件和商業公司進入的話,他們肯定會希望平臺越做越好,所以他們就會幫你去做一些推廣,寫一些博客之類的,如果運氣好,能夠在一些媒體上討論一下,可能就會增加曝光度。這一點上,我們還需要努力,希望得到多多的宣傳,因爲真正好東西可能並不是大家都知道的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:的確,好東西並不是大家都知道,需要發出更多的聲音讓大家知道。接下來,您對ReScript未來的發展是怎麼樣規劃的?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我雖然17年回國了,但大部分時間和我打交道的還是一些外國朋友。接下來我希望在不放棄海外市場的前提下,把它做成一個讓國內用戶也能夠使用起來更方便的語言。而且我做這個事情有一種很強的動力,不是出於商業目的或個人信仰的問題,而是我認爲有三個點:首先ReScript本身是個非常有價值的東西,就像我剛纔說的,它代表了一種更好的編程理念,如果有更多人去接觸它,對社會是更有益的。我們可以讓程序員去接收一些更好的東西,寫出更好的軟件,這是一種非常樸實的價值觀,所以這是驅使我的原動力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外一點就是ReScript的編譯器我們已經開發了很久了,它本身的完成度已經很高了,它的一些最具有挑戰性的東西,我們已經做得差不多了,可能剩下的這些,比如工具鏈的完善、生態系統的搭建、讓更多用戶知道我們這個事情,需要靠更多人來做,人多力量大,越多人蔘與進來,在國內反而會有更好的一個前景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第三點就是我個人追逐的一些東西變了,可能剛開始工作的時候,你覺得我要掙很多錢,買車買房,但接下來可能我追逐的下一階段的目標就不再是以就掙更多的錢爲目標,而是我想做一件覺得自己個人有意義的事情,對國家、對社會有意義的事情,如果我們能借助中國的社區的力量,能夠做一門世界流行的語言,不只是在中文圈子裏流行,而是立足中國,面向世界的一門非常流行的語言,是一件非常值得自豪的事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我們又聊到了國產編程語言這個話題上,我們國內也有一些做得比較好的編程語言,像易語言、習語言這樣的,這些在業內比較知名的中文的編程語言,但它們沒有像Java、C、Python這樣就是被廣泛應用,您覺得出現這種現象的原因是什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"據我所知,易語言用戶還是非常多的,很多遊戲外掛用的就是易語言。但是易語言是不開源的。習語言我沒有聽說過,我知道易語言還是有很多用戶的,但如果一個技術軟件它的編譯器沒有開源,是很難生存下去的,如果它的編譯器不開源,很難評價它的工作。我想說的是,國產語言和中國語言還是差別很大的。當然,現在JavaScript它本身已經支持unicode了,你可以給變量賦名中文,是沒有問題的,國產語言和中文語言它不能劃等號。還有另外一點就是我們推廣一個語言是因爲語言有它自身的價值,而不是爲了國產而國產。但是從情感上來講,國產語言它有沒有必要呢?我覺得從情感來講,國產語言是很有必要的,因爲如果一門語言它的作者是中國人,你跟他交流的機會就會多一些,如果你跟他很熟,比如你覺得這門語言缺一些Feature,你跟他去討論,因爲都是中國人,討論起來就會有一些感情上的紐帶,我們討論一些東西就比較容易一點,我們想加一些東西進去就會容易一點。如果是開源軟件,開源軟件維護起來工作量還是很大的,如果你跟它沒有什麼情感的紐帶,我要加一個東西,別人沒有義務去給你維護,從情感上來講,這是國產語言一個有利的條件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我看到目前的市場上,國產語言的受衆還不是特別多,用的人少,生態就搞不起來,生態搞不起來就更沒人用,就像惡性循環一樣,您覺得該怎麼打破這個惡性循環?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我覺得要有信心,還要有耐心,國產語言肯定會在一個合適的時間點出現的,剛纔我們講了,程序語言它提供了一種抽象機制,然後有個平臺,爲什麼之前國產語言比較少?實際它沒有國產的平臺,像蘋果它做了一個手機,就要讓用戶在它的平臺上開發程序,肯定他就有這個需求。比如最近的鴻蒙,它可能就是一個新語言的契機,我也聽說他們在搞這個事情,因爲他們推出了自己的平臺,那就有這個需求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一個,我覺得在體制方面,還是有機會的。因爲程序語言的設計不是一個未解的東西,這個行業雖然它很難,但是它的所有的東西都是公開的,都可以查詢到,如果領導者有足夠的視野,他能選擇一個正確的戰略,那麼下面人執行起來還是很快的。如果領導能夠高屋建瓴地把這個事情規劃好,我覺得是很有可能成功的,國產語言可能在將來的十年內就會出現一個非常流行的程序語言,我們要樂觀看待這個問題。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“要給人才更多的自由發揮的空間”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我們非常樂觀地看待這個問題,但是依然存在一些開發的難點是不是?比如環境、資金、或者是社區,是不是還會有一些阻礙的因素?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"張宏波:我覺得不光是國產的編程語言,就是任何一門編程語言,如果要成爲一個現象級的編程語言真的是很難,不比做一個獨角獸,或者做一個大公司要容易,畢竟要出來做一個現象級的語言真的是要天時、地利、人和,很多因素缺一不可。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從我們國家角度來說,我覺得可能最根本的就是我們在文化上要對人才有一個發自內心的尊重,就給予人才一定的自由度,讓他們除了解決一些商業上的需求以外,還能有一些自己的發揮空間。比如說我當時在Bloomberg的時候,工作非常輕鬆,有很多時間,我就會去想一些有意思的事情。再有就是我們要有一個新的平臺,像我剛纔說的那個鴻蒙,在自己的或者同樣的平臺上,有自己的技術閃光點。比如ReScript,ReScript的平臺就是JavaScript平臺,但是我在技術上有一些自己獨特的價值,我也能存活下去。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外一點就是,我們過去在社區經營上沒有做得很好。社區真的很重要,可能你做了一個非常好的東西,但社區沒管理好,同樣用的人也不是很多。碼農的思維都不太一樣,它需要一個非常的專業的團隊來運作這個事情,也是一個非常消耗心智的過程。所以說,我覺得我們要有自己的平臺、有需求,然後技術上有自己的突破,維護好社區,這樣的話,有可能會出現一個非常流行的語言。我覺得我們國產語言的出發點是從中國走向世界,而不是說我們自己在一箇中文圈子裏說這是一個國產語言,那就沒什麼意義了,一定是一個立足於中國面向世界的過程。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:是不是觀念上也有一些阻礙?比如一些業內的大佬,他們很熱衷於開發這種中文的編程語言,或者是國產編程語言,但是也有一些聲音認爲,我們沒有一個廣泛應用的編程語言,是因爲編程語言並不是特別關鍵的技術,沒有必要堅持國產,對於這個問題您怎麼看?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"這個觀點肯定非常值得商榷的,因爲編程語言它是基礎軟件,如果你要做一些底層上的創新,你是繞不開編程語言的。就相當於我們前段時間談論得很火的芯片,如果想自己做個芯片,光有芯片肯定是不行的,我必然要寫一個編譯器,或者把這些已有的編程語言移植到這個平臺上,編程語言是繞不開的。如果我們只是做一些商業模式上的創新,當然不需要去考慮這些,但如果要做一些技術上的創新,肯定是繞不開的。我再舉個例子,像國外搞這個叫形式化編譯器,也是很有意思,現在一些需要高度可依賴軟件的領域,像航空航天,他們用的編譯器不是我們傳統的工業上的編譯器,他們用的是一種經過形式化驗證的編譯器。保證經過這個編譯器編譯出來的程序能夠符合某些特定需求,這東西需要在編程語言上進行一些投入纔會有產出的,是需要一個長期的投入,而不是說把它當作一個黑盒,或者就用國外的東西就可以的。我覺得如果我們有更高的追求,這個東西是繞不開的,肯定是要做一些投入的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:消息區有提問,ReScript什麼時候會有一個Native的後端?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我們技術上已經是可以支持了,兩三個週末就能做出來。但因爲我們的語言是一個從OCaml衍生出來的,是可以做Native後端的。但光做一個後端是不夠的,你得提供Debug tools,你得幫助用戶去調試,你還得支持各種客戶端,如果你生成後端代碼系統就會有很多核,就不只是平臺和後端,在我們當前的這種資源限制情況下,我們就只關注在JavaScript。而如果我們能夠把這個盤子做大,是完全可以就加入更多的後端的,這是一個資源的問題,也希望能夠獲得更多的朋友的幫助,一起把這個事情做大。技術上是完全可行的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:還有消息提問,ReScript是基於OCaml的,還有另外一個類似的基於Haskell的語言叫PureScript,您怎麼看這兩種語言的對比?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"這兩種語言我都比較熟悉,還是我之前說的,PureScript這是個學院派的語言,它能提供給你很多抽象。但是ReScript的立足點,是把一些想法用在工業界上,我們關注東西是不一樣的。像Haskell,它是讓用戶去做一些非常高階的抽象,但ReScript是讓用戶寫出非常高效的代碼。所以你如果比較兩個編譯器就會發現,ReScript它的生成代碼是非常高效的,PureScript它生成的代碼,可能慢於ReScript十倍,二十倍,性能上會有很大的問題。從另外一個角度上講,ReScript是允許用戶去修改內存變量的,像PureScript,看它名字就知道PureScript是很純的,它不允許你去修改的。但是我覺得在生活中,我們需要做很多一些世俗的工作,還是需要修改的,我們在這方面是允許的修改的。我們這樣講,PureScript更多的是一個學院派的語言,我們ReScript是一個面向工業界的語言,我們實現強度也是工業級的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:作爲ReScript的作者,在您從0到1設計ReScript的過程中,一定會沉澱出來一些方法論吧,能跟我們分享一下如何能做出一門具有商業價值的編程語言嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"我的個人體會是,人要做一些事情,還是看機遇的。要做出一個編程語言不是那麼困難,但是你要做出一個有人用的、有公司願意用的編程語言是非常困難的。我自己在研究生的時候,有做過一個語言叫fan語言,它用來支持用戶做一些元編程,你可以用這個語言去設計一些其他的語言,聽上去很Fashion,很酷。但是這個語言,畢業完了就沒有維護了。因爲沒有人用,我們沒有需求去做這個事情。我覺得做東西是需要機遇的,不要爲了去做一個編程語言而做編程語言,剛好碰到了這樣一個機會,你覺得有意思,纔要去做,這是我第一點體會。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第二點體會就是,人一輩子能做出一件事情就很難,大部分人一輩子就這樣過去了。所以如果你剛好碰到一個自己覺得有意義的事情就要堅持下去,如果希望把這個事情做到最好,就要讓自己紮根下去。過幾年我朋友一直在問,你還在做ReScript?是的,我一直在做。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就是這樣,做編程語言要沉下心去做,如果要做得很好,真的就是十年起步。不是說不是你做這不像做一個產品,可能幾個月就上線了,然後一代代去迭代。做一門編程語言,至少是十年起步,最近流行的GO語言它也有十多年的歷史了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:國外的環境和國內的環境肯定是不一樣的,您在國外做ReScript和在國內做ReScript,它們的區別是什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波"},{"type":"text","text":":因爲我個人是比較自由的,Facebook給我的很好自由度,我的工作時間跟國外是差不多的,工作強度跟國外也差不多。目前還相當於在國外的工作環境,我可能還沒有真正地融入國內的工作環境。但是我期望將來能夠有機會真正地跟國內工作的同事進行交流,目前還不是很瞭解國內同事的工作強度和他們的工作節奏。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我看很多網友比較關心ReScript在國內具體的推廣,您有一些具體的推廣的計劃嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"有,就是我剛纔說的,這就是我接下來幾年的工作重點。首先我們需要做一些中文文檔,出版一些關於ReScript方面的書籍,希望把ReScript在大學課堂裏面進行推廣一下,ReScript之前已經在美國的布朗大學教授了,這個是個非常有使命感的事情。像美國的名校,哈佛大學,康奈爾大學, 賓夕法尼亞大學,還有伯克利,他們入門語言都是ML系的,都是OCaml這種語言,不是Java或者C++,它選這個語言是有理由的,他讓你接受一些更好的抽象方式,在學校學習更有意義的一種編程模型,即使你將來用不到,但是你能學到更好的一種思維方式。但ReScript不一樣,ReScript不光使你能學到更好的思維方式,你還可以用它來切實地做一些產品,做一些有用的東西,從這方面來講,把ReScript在大學裏去教可能會更有意義一點,學生不會覺得很枯燥,因爲學這個東西真的是可以用來做一些事情,能學到更好的一種思維方式。明年可能會在線下組織一些活動,一些用戶會議,可能明年會着力在國內多花點時間進行推廣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:您是自己來做這個事情,還是有一個團隊來做推廣,還是會有什麼打算?方便透露一下嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"這個可能目前還不能確定,但是你可以期待,未來可期。我覺得這是個機會,我們不能錯過,因爲我們確實做了一個很有意義的東西,我希望做出一個讓中國人自豪的編程語言的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:留言區網友提問,能說說ReScript和asm.js直接關係嗎?編譯出的JS和asm.js差不多嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"不是的,ReScript最大的賣點,就是它可以和JavaScript無縫兼容,它生成的代碼是一種高效的、同時可讀的JavaScript。因爲我們之前在編程一種說法叫worse is better,就是更差的就是更好的,它是什麼意思?因爲像Python這種的語言它設計的很糟糕,但是它的門檻低,所有人都能玩兒,就會有個非常大的生態系統,大家就越來越多的人把錢砸進去,可能他做得不好,但能慢慢修復。但是ReScript有個很好的一點就是它生成的代碼是非常好的,好讀的JavaScript,你可能只是一個業餘的玩家,你可以寫JavaScript,但是你可以直接調用專業人士寫的ReScript代碼,無縫兼容,而且我們有一個工具叫genType,你可以生成TypeScript的代碼,TypeScript用戶可以直接調用ReScript,這樣專業的人做專業的事情,我們互相不妨礙。像我最近看到韓國的一個用戶,他就把一個TypeScript一小部分代碼用ReScript重寫,能有兩到五倍的性能提升,允許用戶直接調用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:ReScript與底層的哪些語言能結合使用?Rust可以嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"因爲我們目前主要關注的平臺是JavaScript,但是如果我們有更多的資源,我們也可以支持生成原生平臺,目前加進來還比較困難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:還有消息提問說,我們之前說過ReScript它有一個非常好的編程理念,能具體聊一聊這個理念好在哪裏嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"首先它有一個非常好的模塊化系統,定義的接口,只要你的接口不變,用戶不用去關心它的實現,這個模塊化系統,它是支持大規模編程的一個重要的基石。另外,Rescript支持面向數據的編程——你定義好它的類型,就可以做一些模式匹配。因爲我們程序員的日常工作中有相當大一部分都是把數據從A變到數據B,這個是ReScript最擅長的,你只要寫一個函數,通過模式匹配把數據A變成數據B,是個非常自然的一個過程,它雖然是基於ML系統,但它是一個優化過的、超線性的系統。Rescript做重構非常方便,而且它類型系統本身是安全的,你可以做一些非常快速的重構,我看到ReScript用戶經常說他一天就改了一兩萬行的改動,沒有任何的regression,很少有Bug是因爲重構而引入 -- 這是它的幾大優點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我們聊了這麼多編程語言,相信是這一門好的編程語言一定會有一些特質,您覺得一門好的編程語言需要具備哪些特徵?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"這個是一個非常主觀的問題。編程語言是用來解決用戶的需求的,如果你能夠解決用戶的需求,它就是一門還不錯的語言,但是對程序員來說,切換編程語言代價是很高的,這不像學一門編程語言那麼容易。因爲你切換的是整個生態系統,切換編程語言的門檻是很高,作爲程序員來說,你要選擇一門語言,它的優勢要足夠大,你才能去切換。我給你舉個簡單的例子,在TypeScript還沒有出來之前,有一門語言叫CoffeeScript,CoffeeScript也是很火的,但它本身沒有帶來足夠的價值,很快就消亡掉了。"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzU1NDA4NjU2MA==&mid=2247542089&idx=2&sn=518ade002320b33a891472af1326c0e8&chksm=fbea9c86cc9d1590c5bf801f88f1395c1e4590b8fcdd831d5771793ba1f98b7c1fd5d2d7c543&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"TypeScript"}]},{"type":"text","text":"火起來以後,CoffeeScript很快就消亡掉了,因爲它只是給你提供了一些語法層,沒有給你帶來一些本質的東西,所以這門語言消亡是很快的。我希望我們去做一門語言,要帶來足夠多的價值,不要去停留在怎麼去修改這個語法的問題,因爲語法不是一個很本質的東西。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:那您能不能給我們預測一下,未來哪些編程語言是大勢所趨?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"這是個很大的問題。就像我說的編程語言就是在某個特定的平臺上提供抽象機制,這個平臺如果欣欣向榮,那它就一定會出現一個很有意思的語言,讓用戶來去操作它。我覺得像最近比較火的一個硬件就是GPU這一塊,如果一門語言它能讓你更方便地操作GPU,它就一定會很有潛力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最近的WebGPU在Chrome上已經進入了一個alpha版本了,將來肯定會有一些針對WebGPU的這個新的標準更好的編程語言。然後就是平臺的問題,有好的平臺必然會出現一些新的語言,然後從編程語言抽象的這個角度來說,我覺得分佈式還是一個很好的切入點,要弄清楚如何讓你的異步做得更好。從系統角度,Rust現在很火,但是Rust還有進步的空間,我覺得Rust不會停留在這,將來還會有一些改進,因爲Rust是爲了保證安全性帶來了巨大的複雜性,它將來還會有一些創新讓這個複雜度降下來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:現在ReSript開始慢慢轉向國內的市場了嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"不是轉向,是立足國內,但我們不會放棄海外,紮根、立足中國,面向世界。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:您說立足中國,面向中國的用戶我們會做哪些升級?有沒有這方面規劃?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"說起來慚愧,我們之前對中文的支持不是很好,但現在我們在最新的版本,可能接下來要發佈的版本就會支持中文了,之前用中文很彆扭,你要打兩個backtik才能寫中文。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外一個就是我們會提供一些官方的中文文檔,然後多開展一些活動。還有一個我想做的事情,就是讓更多用戶在ReScript這個編譯器上來貢獻,因爲這就可以讓更多的用戶學習怎麼去做一個工業級的編譯器,這是個很好的機會,這樣會帶動一幫人去了解去怎麼設計編譯系統,做編譯器,這樣會讓價值的傳播更有意義。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:現在ReScript在網上有文檔嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波"},{"type":"text","text":":有,但是英文的。像海外,我發現ReScript在韓國用得比較多,他們把它翻譯成了韓語文檔。ReScript在巴西的流行度很高,我也不知道爲什麼,很多巴西的社區,他們也做了一些葡萄牙語的翻譯,巴西甚至還開設了培訓班,教用戶去學習ReScript。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:我相信很多網友對ReScript還是很感興趣的,我也替網友問一句,網上大約什麼時候能有中文的文檔,您有這個規劃嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"明年。我們時間點是明年,明年會在國內做大規模的推廣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:最後一個問題,作爲ReScript語言的作者,給一些想學這個編程語言的程序員們有什麼好的建議?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張宏波:"},{"type":"text","text":"如果你學ReScript,ReScrit我們有個官方論壇叫forum.rescript-lang.org,這個論壇還是比較活躍的,如果你有什麼問題可以在那個上面去問,每天都會有人去回答你的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"藉此機會,我們希望如果國內大廠有機會看到這個,如果有願意的,可以跟我私下聊聊,因爲ReScript的強項,在大規模的代碼庫裏面它的優勢纔會比較明顯,我們可以看看能不能把它用在一些大的代碼庫裏面。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"嘉賓簡介:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"張宏波:ReScrit語言作者,Facebook高級工程師。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章