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