陳徐毅
計算機編程語言作為計算機科學領域一門“古老”的學問一直以來發(fā)展緩慢,由于承擔著人與機器的對話中介,深受終端的形態(tài)固化制約;同時這門學問的使用者——開發(fā)者是一個特殊的群體,其行為、習慣種種也影響著編程語言的技術進程。
在去年10月華為開發(fā)者大會上,華為方面表示將發(fā)布自研編程語言倉頡,為HarmonyOS生態(tài)基礎設施補上最后一環(huán)。消息一出旋即引起業(yè)界熱議,編程語言在國內的設計雖有先例但實屬小眾,由大公司主導的深程度的開發(fā)或尚屬首例。
由于“倉頡”一詞源于華夏文化“倉頡造字”,故而外界對之第一反應是倉頡為中文編程與否。計算機高級語言中任何標識都可使用中文字、詞、句的語言文法,又有與中文相匹配的語法規(guī)則可稱為漢語編程語言,使用這種語言編寫程序的過程就是中文編程。
中文編程在國內的呼聲由來已久,對其嘗試與探索也行之有年。比如上世紀80年代的中文cobol、2000年的易語言以及之后的類文言文編程語言等等。不得不說,中文編程對國內編程語言技術的發(fā)展,特別是代碼編譯技術的發(fā)展有不小的貢獻。
倉頡語言是否有可能為中文編程,華為方面目前暫無回應。今年3月,華為編程語言實驗室面向部分開發(fā)者發(fā)布了華為新語言的試用報名問卷,據悉從中遴選部分開發(fā)者參與倉頡語言內測。有測試人員初步透露,倉頡語言目前并非中文編程,但也有觀點認為倉頡未來可能會設計中文編程版本。事實上倉頡的起步是不是中文編程并不重要,這也是大多數開發(fā)者所認可的觀點,重要的是一個編程語言的設計是否具備編程思想的邏輯創(chuàng)新,而不是重復造輪子。
現代意義上的編程語言,區(qū)別于機器語言與匯編語言,作為計算機語言中的高級語言,其發(fā)展至今已形成了龐大的技術格局。現代編程語言講求語法精煉、執(zhí)行高效、語言特性標準友好、環(huán)境IDE配套齊全、有大的底層軟件或是系統(tǒng)作載體,此外框架延展豐富、使用文檔規(guī)范、有方便的各種庫等等。
歷史上各類編程語言的起源不一而足,但主要是為開發(fā)某一軟件/系統(tǒng)而生,或是為解決某個問題而生。譬如C語言起初為開發(fā)Unix系統(tǒng)而被創(chuàng)造,后因使用日漸廣泛而逐漸標準化,發(fā)展成為通用型過程式高級編程語言,其設計也影響了后來的眾多編程語言;當下風靡一時的Python當時為解決新的腳本解釋編程問題而生,如今支持多種編程范型,包括函數式、指令式、反射式、結構化和面向對象,也成為了一款通用型高級語言。
自研編程語言用今天的話來說,其有著相當明確的目的和依附性,即為了某一大平臺、大生態(tài)而生,否則其高成本(人力、時間、資金)會淹沒自研的價值。這方面顯著的先例比如蘋果的Swift,為解決之前Objective-C長期致力于桌面開發(fā)的固化缺陷問題而取代之,現為iOS/Mac OS生態(tài)服務;再比如微軟的C#,由C和C++派生出來的面向對象編程語言,以.NET框架類庫作為基礎,為Win平臺而生。
因HarmonyOS而生的倉頡將引入什么樣的編程思想,追求什么樣的編程風格,未來會不會有中文關鍵字,目前都尚不可知。有開發(fā)者推測,倉頡可能會定位于類似Swift、Kotlin和Dart的應用層開發(fā),或許走的是帶GC的路線,而非Rust/C++的系統(tǒng)級編程??梢妵鴥鹊拈_發(fā)者們對這樣一種自研編程語言的誕生是飽含了期待的。
業(yè)界曾有人預言:編程語言的未來有兩個選擇,其一是成為一門偉大的編程語言;其二則作為任一操作系統(tǒng)、軟件系列精耕細作的工具而發(fā)揚光大。二者都是非常好的結果。
編程語言的現狀經過歷史演進已不再像上世紀80年代那么單一純粹,這方面的影響包括了商業(yè)需求、市場變數、科技巨頭的壟斷以及開發(fā)者習慣等等??偟亩?,C語言依然是這個文明的底層基礎。不久前有國外開發(fā)者撰寫的一篇文章《C不再是一種編程語言》在技術社區(qū)引起熱議,文中表達C被上升到了一個具備相當聲望和權威的角色,這是這種偉大編程語言所帶來的歷史包袱。
當然并非所有計算機語言都能成為所謂的“偉大的編程語言”,但是它們在技術的歷史進程中都能夠做好自己的事,比如py的膠水特性、js的前端流行性依賴等等。自研編程語言則更多為解決特定問題,致力于平臺開發(fā)者生態(tài),提高應用程序質量而設計。因而對自研編程語言來說,使用的開發(fā)者數量和在開發(fā)者群體中的流行程度是至關重要的,讓問題曝光在足夠多的眼睛之下,這對于PL本身的迭代有著巨大影響。
另一個啟示在于軟件工程方法論帶來的開發(fā)者環(huán)境的劇變。當前軟件行業(yè)無論是人(開發(fā)者)還是物(工具)的因素,都是“唯快不破”的,這是敏捷時代對抗需求膨脹形成的結果,以至DevOps思想大行其道。當Docker、Kubernetes這類流水線式的工具大量運用于軟件工程領域之后,敏捷就成了一把雙刃劍,它給出了迭代效率,也能惰化開發(fā)者思想。因而一種新的編程語言能為現狀做些什么,也值得深思。