首頁(yè)>資訊 >
環(huán)球報(bào)道:奮戰(zhàn)開(kāi)源操作系統(tǒng)二十年:為什么編程語(yǔ)言是突破口? 2022-11-08 15:41:48  來(lái)源:36氪

編程語(yǔ)言之于操作系統(tǒng),意味著什么?本文作者飛漫軟件創(chuàng)始人魏永明經(jīng)過(guò)二十余年的操作系統(tǒng)開(kāi)發(fā)探索,明確提出編程語(yǔ)言是自主基礎(chǔ)軟件,尤其是操作系統(tǒng)的重要抓手。如果說(shuō)操作系統(tǒng)是基礎(chǔ)軟件生態(tài)里的皇冠,那編程語(yǔ)言就是王冠上的明珠。如果沒(méi)有自己的編程語(yǔ)言,那所謂的自主,就是海市蜃樓、空中樓閣。由此,他走上了開(kāi)源編程語(yǔ)言的探索與實(shí)踐之路。

01 從低迷的 Linux 桌面系統(tǒng)說(shuō)起

全世界范圍內(nèi)的開(kāi)源運(yùn)動(dòng)浩浩蕩蕩,滾滾向前。Linux 內(nèi)核作為開(kāi)源軟件中的杰出代表,在云計(jì)算、服務(wù)器端、 智能手機(jī)端、嵌入式系統(tǒng)中的成功舉世公認(rèn)。截止 2021 年底,Linux 在服務(wù)器領(lǐng)域占據(jù)了 96%的市場(chǎng)份額,在超級(jí)計(jì)算機(jī)領(lǐng)域幾乎占領(lǐng)了全部市場(chǎng),在云計(jì)算基礎(chǔ)設(shè)施領(lǐng)域占據(jù)了 90%的市場(chǎng)份額,在智能手機(jī)領(lǐng)域也占有 85%的市場(chǎng)份額。現(xiàn)今,在人們?nèi)粘5墓ぷ骱蜕钪校琇inux 內(nèi)核幾乎無(wú)處不在。但與此相反的,則是 Linux 桌面系統(tǒng)地位不斷下滑。據(jù)統(tǒng)計(jì),長(zhǎng)期以來(lái),Linux 桌面系統(tǒng)的市場(chǎng)份額徘徊在 2%左右,而原來(lái)被微軟 Windows 壓得喘不過(guò)氣來(lái)的 macOS 系統(tǒng),卻在近幾年取得了不小的進(jìn)步,獲得了超過(guò) 10%的市場(chǎng)份額。

自 2000 年以來(lái),全球有眾多公司如 Red Hat、SUSE 以及中國(guó)的若干企業(yè)一直在嘗試打造基于 Linux 內(nèi)核、GNU 工具以及 X Window、GNOME 或 KDE 的桌面系統(tǒng)。但二十年來(lái),我們并沒(méi)有得到一個(gè)可以媲美 Windows 或 macOS 的桌面系統(tǒng),這其中的教訓(xùn)值得深思。究其原因,大家都會(huì)指點(diǎn)一二。比如 Linux 桌面系統(tǒng)的模仿痕跡太重,技術(shù)上始終跟隨 Windows,也沒(méi)有自己的產(chǎn)品特色;缺乏 Office 這樣的關(guān)鍵應(yīng)用軟件;各種發(fā)行版滿天飛,造成嚴(yán)重的碎片化問(wèn)題,還導(dǎo)致應(yīng)用之間的互兼容性問(wèn)題等。


(相關(guān)資料圖)

為什么二十年來(lái),全世界有那么多企業(yè)和社區(qū)前赴后繼、努力打造的 Linux 桌面系統(tǒng),卻始終無(wú)法走向大眾市場(chǎng),而僅僅局限于少數(shù)狂熱的愛(ài)好者當(dāng)中?

再以本人的親身經(jīng)歷為例。筆者搞了二十多年嵌入式窗口和圖形系統(tǒng)——MiniGUI,最初模仿 Win32 提供 C 語(yǔ)言的應(yīng)用編程接口。在本世紀(jì)最初的十多年間,MiniGUI 在機(jī)頂盒、功能手機(jī)、數(shù)碼相框等產(chǎn)品中得到了大量的應(yīng)用。但自從 Google 開(kāi)源發(fā)布了 Android 操作系統(tǒng)之后,包括 MiniGUI 在內(nèi)的很多嵌入式基礎(chǔ)軟件,都遇到了前所未有的危機(jī),這其中也包括針對(duì)嵌入式系統(tǒng)的輸入法、字體、瀏覽器等多款軟件產(chǎn)品。為了應(yīng)對(duì)這一危機(jī),我們也曾做出過(guò)一些嘗試,比如提供類似 Visual Studio 一樣的界面設(shè)計(jì)器、類 iPhone 的 UI 特效、對(duì) Java J2SE 應(yīng)用框架的支持等。然而,這些嘗試和 Android 這種具有全新操作系統(tǒng)架構(gòu)和應(yīng)用框架的現(xiàn)代操作系統(tǒng)相比,實(shí)在不堪一擊。

這引得我不得不思考:嵌入式領(lǐng)域是本世紀(jì)初興起的產(chǎn)業(yè),當(dāng)時(shí),我們?cè)谶@個(gè)領(lǐng)域的基礎(chǔ)軟件水平和美國(guó)差不了多少,而且坐擁全球最大的消費(fèi)類電子產(chǎn)品市場(chǎng),但為什么在其后十多年的發(fā)展競(jìng)爭(zhēng)中,我們?nèi)匀宦鋽∮诿绹?guó)?

02編程語(yǔ)言是操作系統(tǒng)獲得突破的重要抓手

盡管我們可以將自身發(fā)展不力的原因歸咎于政府保護(hù)知識(shí)產(chǎn)權(quán)政策不完善等因素,但我們也不得不承認(rèn),在引領(lǐng)技術(shù)潮流方面,我們差的不是一星半點(diǎn):我們的基礎(chǔ)軟件行業(yè),和 Linux 桌面系統(tǒng)一樣,一直將自己定位為追隨者,始終沒(méi)有走出模仿的怪圈。要走出這個(gè)怪圈,我們首先要想清楚操作系統(tǒng)這類基礎(chǔ)軟件的第一用戶是誰(shuí),即我們首要服務(wù)于哪類用戶。

我的觀點(diǎn)是,類似操作系統(tǒng)這樣的基礎(chǔ)軟件,其首要用戶是開(kāi)發(fā)者。一個(gè)基礎(chǔ)軟件,不論是操作系統(tǒng)還是數(shù)據(jù)庫(kù),只有首先滿足了開(kāi)發(fā)者的需求,服務(wù)甚至取悅開(kāi)發(fā)者,才能建立起獲得進(jìn)一步成功的基礎(chǔ)。重視開(kāi)發(fā)者,優(yōu)先為開(kāi)發(fā)者服務(wù),是基礎(chǔ)軟件的生存之道。其道理不言而喻:一款基礎(chǔ)軟件要獲得大規(guī)模的應(yīng)用,就離不開(kāi)開(kāi)發(fā)者,而基礎(chǔ)軟件的作者本身,縱有七十二變,也不可能把全世界的應(yīng)用需求都給滿足了。

只有將開(kāi)發(fā)者定義為基礎(chǔ)軟件,尤其是操作系統(tǒng)的第一用戶,我們的思路才可能有一個(gè)重要的轉(zhuǎn)變。

如果我們簡(jiǎn)單回顧一下成功操作系統(tǒng)的發(fā)展,就可以得出這些操作系統(tǒng)一開(kāi)始就不遺余力地為服務(wù)開(kāi)發(fā)者而努力。比如微軟,從 Windows 3.0 開(kāi)始,就為降低 Windows 上的應(yīng)用開(kāi)發(fā)門檻在努力,這其中就包括 Visual C++、Visual Basic 以及后來(lái)的 Visual Studio、C#編程語(yǔ)言和.Net 應(yīng)用框架。蘋果和谷歌圍繞各自操作系統(tǒng)所走的道路也類似。發(fā)展到今天,我們可以看到幾乎所有成功的操作系統(tǒng)都有自己專屬的一種編程語(yǔ)言以及圍繞其打造的獨(dú)特的應(yīng)用框架。

作為反面案例,Linux 桌面系統(tǒng)上從未出現(xiàn)過(guò)任何專屬的編程語(yǔ)言、應(yīng)用框架以及開(kāi)發(fā)工具。在當(dāng)前市場(chǎng)趨勢(shì)下,面對(duì)跨平臺(tái)和融合終端應(yīng)用的開(kāi)發(fā)需求,Linux 桌面系統(tǒng)更是乏善可陳。GNOME、KDE 兩大陣營(yíng),一個(gè)基于 C 語(yǔ)言,一個(gè)基于 C++ 語(yǔ)言,圍繞這兩個(gè)編程語(yǔ)言的應(yīng)用框架,沿用的仍然是二十年前 Unix 工作站所使用的技術(shù)和框架。諷刺的是,Linux 桌面系統(tǒng)上使用最廣的開(kāi)發(fā)工具,是微軟開(kāi)發(fā)的 Visual Studio Code。

此前,我曾幾度闡述過(guò)編程語(yǔ)言對(duì)一個(gè)操作系統(tǒng)的重要性。簡(jiǎn)而言之,編程語(yǔ)言之所以重要,是因?yàn)榫幊陶Z(yǔ)言是確定一個(gè)系統(tǒng)長(zhǎng)相的重要基因。就比如 C 語(yǔ)言,它適合開(kāi)發(fā)貼近硬件的程序,而 C++,適合用于開(kāi)發(fā)中間件。國(guó)外還有很多專注特定領(lǐng)域的編程語(yǔ)言,比如 Go 語(yǔ)言適合開(kāi)發(fā)服務(wù)器軟件,因?yàn)樗焐鸀椴l(fā)編程設(shè)計(jì)。編程語(yǔ)言可以確定一個(gè)系統(tǒng)的長(zhǎng)相,也決定了這個(gè)系統(tǒng)的軟件棧,及其配套的開(kāi)發(fā)工具,還可以成為解決一些頑疾的靈丹妙藥。因此,編程語(yǔ)言是自主基礎(chǔ)軟件,尤其是操作系統(tǒng)的重要抓手。如果沒(méi)有我們自己的編程語(yǔ)言,那所謂的自主操作系統(tǒng),就是海市蜃樓、空中樓閣。

因此,如果我們要發(fā)展自主的操作系統(tǒng),就必須走出模仿的怪圈,而若想成為技術(shù)上的引領(lǐng)者,就要嘗試為自己的操作系統(tǒng)設(shè)計(jì)一款全新的編程語(yǔ)言。沒(méi)有自主的編程語(yǔ)言以及圍繞其上的自主應(yīng)用框架,對(duì)操作系統(tǒng)而言,就如同缺失了靈魂一樣,便無(wú)法勝任技術(shù)引領(lǐng)者的角色。

目前,在中國(guó)信創(chuàng)領(lǐng)域,中國(guó)政府正在推廣基于 Linux 的桌面系統(tǒng)以及嵌入式系統(tǒng),在政府意志的推動(dòng)之下,相關(guān)的技術(shù)積累和市場(chǎng)推廣正在穩(wěn)步推進(jìn),曾經(jīng)困擾業(yè)界多年的關(guān)鍵應(yīng)用,如辦公套件、輸入法等,通過(guò)中國(guó)本土的商業(yè)軟件產(chǎn)品得到了有效解決。根據(jù)統(tǒng)計(jì),單單中國(guó)政府的桌面系統(tǒng),存量市場(chǎng)就超過(guò)了億套,每年的新增安裝量近五百萬(wàn)套,如果再加上一些關(guān)鍵行業(yè)和要害部門(如能源、交通等),足以支撐全球 10% 的桌面系統(tǒng)市場(chǎng)份額。這將給基于 Linux 的桌面系統(tǒng)和嵌入式系統(tǒng)帶來(lái)前所未有的巨大市場(chǎng)機(jī)遇。然而,如果我們僅僅止步于跑馬圈地,而無(wú)視發(fā)展自主編程語(yǔ)言的重要性,到頭來(lái)也將竹籃打水一場(chǎng)空。

03下一代操作系統(tǒng)需要什么樣的編程語(yǔ)言?

隨著云計(jì)算和物聯(lián)網(wǎng)技術(shù)的普及,現(xiàn)在的應(yīng)用跟二十年前大不一樣了,最大的特點(diǎn)是需要聯(lián)網(wǎng)、跨平臺(tái),而且可能要運(yùn)行在不同類型的設(shè)備上,我們暫且稱之為 “融合終端”應(yīng)用。在滿足融合終端類應(yīng)用需求這一方面,主流的操作系統(tǒng)廠商在做全新的嘗試,比如蘋果為 macOS、iOS、padOS、watchOS 開(kāi)發(fā) Swift 編程語(yǔ)言,谷歌的 Flutter 使用 Dart 編程語(yǔ)言,微軟也正在為 Universal App 做技術(shù)上的準(zhǔn)備等等。

操作系統(tǒng)巨頭技術(shù)生態(tài)布局(圖源:《新程序員》)

顯然,要在這場(chǎng)競(jìng)爭(zhēng)中獲勝,需要我們?cè)O(shè)計(jì)新的、云計(jì)算和物聯(lián)網(wǎng)友好的編程語(yǔ)言和開(kāi)發(fā)工具。一方面,可用來(lái)滿足融合終端類應(yīng)用的需求,另一方面還可用于提高應(yīng)用的開(kāi)發(fā)效率,同時(shí),還可以成為操作系統(tǒng)生態(tài)的護(hù)城河。

那么什么樣的編程語(yǔ)言是符合未來(lái)趨勢(shì)的?對(duì)此,目前階段很難準(zhǔn)確描述。但我們可以嘗試從宏觀上描述適應(yīng)上述全新需求的編程語(yǔ)言可能的主要技術(shù)特征:

描述式語(yǔ)言,易讀且容易理解,甚至可支持開(kāi)發(fā)者使用母語(yǔ)編程,從而讓非職業(yè)程序員也能編寫出滿足需求的程序。 具有更高抽象層次的編程語(yǔ)言,開(kāi)發(fā)者可以使用更少的代碼實(shí)現(xiàn)更多的工作,且無(wú)需過(guò)多關(guān)心技術(shù)細(xì)節(jié)。 提供抽象的跨平臺(tái)可移植接口。通過(guò)全新的接口設(shè)計(jì)來(lái)屏蔽底層操作系統(tǒng)或者平臺(tái)的差異,這是跨平臺(tái)的必然選擇。 支持現(xiàn)代編程技術(shù),如動(dòng)態(tài)特性,對(duì)協(xié)程、并發(fā)、閉包等的支持。 良好的可擴(kuò)展性和伸縮性,既可以用來(lái)開(kāi)發(fā)腳本程序,也可以支持大型分布式應(yīng)用的開(kāi)發(fā)。 功能和性能的良好平衡,使之可用于嵌入式系統(tǒng),甚至物聯(lián)網(wǎng)設(shè)備端。

一旦我們?yōu)槲磥?lái)的融合終端應(yīng)用設(shè)計(jì)了自己的編程語(yǔ)言,尤其是讓編程模式都發(fā)生巨大變化的語(yǔ)言,那就可以自頂向下去設(shè)計(jì)一個(gè)新的操作系統(tǒng)。這個(gè)操作系統(tǒng)甚至可以涵蓋云端、客戶端、嵌入式系統(tǒng)和物聯(lián)網(wǎng)。而內(nèi)核、工具鏈、窗口系統(tǒng)、界面構(gòu)件庫(kù)、包管理系統(tǒng),所有這些底層的技術(shù)將成為“汽車引擎蓋”下面的東西,一般的應(yīng)用開(kāi)發(fā)者無(wú)需關(guān)心這些技術(shù)。如此,便有了服務(wù)開(kāi)發(fā)者的基礎(chǔ)。在此之上,我們利用或者圍繞新的編程語(yǔ)言開(kāi)發(fā) IDE(集成開(kāi)發(fā)環(huán)境)、自動(dòng)化測(cè)試和部署框架、關(guān)鍵應(yīng)用軟件、應(yīng)用商店、特定應(yīng)用領(lǐng)域內(nèi)的第三方運(yùn)行時(shí)函數(shù)庫(kù)等等,而這一切,合起來(lái)便是操作系統(tǒng)的生態(tài)。

04自主開(kāi)源編程語(yǔ)言設(shè)計(jì)與開(kāi)發(fā)之路

為了踐行上述所講的理論,我提出并開(kāi)發(fā)了全新的編程語(yǔ)言 HVML(Hybrid Virtual Markup Language,中文名為呼嚕貓)。這是一款通用、易學(xué)的開(kāi)源編程語(yǔ)言,從 2020 年 7 月提出并公開(kāi)第一份規(guī)范草案,到 2021 年 7 月成立攻堅(jiān)團(tuán)隊(duì)著手 HVML 解釋器(PurC)的開(kāi)發(fā),2022 年 7 月 31 日,在 GitHub 上開(kāi)放了 HVML 相關(guān)的六大源代碼倉(cāng)庫(kù)(或源代碼包),這標(biāo)志著 HVML 1.0 正式發(fā)布,這其間已經(jīng)走過(guò)了兩年的時(shí)光。

而在過(guò)去整整一年的開(kāi)發(fā)過(guò)程中,筆者帶領(lǐng)團(tuán)隊(duì)實(shí)現(xiàn)了所有的設(shè)想以及絕大多數(shù)的功能。作為設(shè)計(jì)者,筆者將 HVML 定義為一種全新的編程語(yǔ)言:可編程標(biāo)記語(yǔ)言(Programmable Markup Language)。并為 HVML 賦予了全新的設(shè)計(jì)理念,使之基本滿足前文所說(shuō)的全新編程語(yǔ)言的技術(shù)特征:

使用標(biāo)記來(lái)定義程序的結(jié)構(gòu)和控制流,大大提高了程序的可讀性,同時(shí)大幅降低了學(xué)習(xí)難度。 使用具有動(dòng)態(tài)功能的擴(kuò)展 JSON 來(lái)定義數(shù)據(jù),隱藏了底層系統(tǒng),而且使其成為粘合不同系統(tǒng)組件的理想膠水。 引入了數(shù)據(jù)驅(qū)動(dòng)的編程模型,這讓開(kāi)發(fā)人員更多地關(guān)注數(shù)據(jù)的生成和處理,而不是程序的控制流。 HVML 是動(dòng)態(tài)的,開(kāi)發(fā)人員不僅可以從遠(yuǎn)程數(shù)據(jù)源獲取數(shù)據(jù)、模板和程序片段,還能刪除已有的變量。 使用獨(dú)有的方式來(lái)支持協(xié)程、線程、閉包等現(xiàn)代編程語(yǔ)言必備的特性。 具有極強(qiáng)的靈活性,開(kāi)發(fā)人員可使用 HVML 編寫簡(jiǎn)單的腳本工具,也可以使用它來(lái)開(kāi)發(fā)復(fù)雜的 GUI 應(yīng)用程序,甚至是開(kāi)發(fā)服務(wù)器軟件。 運(yùn)行飛快,HVML 解釋器使用簡(jiǎn)單高效的棧式虛擬機(jī),不使用任何垃圾收集器。 通過(guò)預(yù)定義變量重新定義了系統(tǒng)底層的模塊和接口,從而屏蔽了不同操作系統(tǒng)或軟件平臺(tái)之間的差異。 相比常見(jiàn)的腳本語(yǔ)言,HVML 具有更高的抽象級(jí)別;使用 HVML,開(kāi)發(fā)者可以用更少的代碼完成更多的工作。

初衷和設(shè)計(jì)思想

之所以決定設(shè)計(jì)和開(kāi)發(fā) HVML,除了以上的思考之外,還跟我的經(jīng)歷有關(guān)。

在我所開(kāi)發(fā)的 MiniGUI(開(kāi)源 Linux 圖形用戶界面支持系統(tǒng))生意受到 Android 沖擊之后,我?guī)ьI(lǐng)團(tuán)隊(duì)轉(zhuǎn)戰(zhàn)移動(dòng)互聯(lián)網(wǎng)以及智能硬件,開(kāi)發(fā)過(guò)很多網(wǎng)站和智能手機(jī)應(yīng)用。幾年前,隨著美國(guó)打壓中國(guó)高科技產(chǎn)業(yè)愈演愈烈,國(guó)家又開(kāi)始重視基礎(chǔ)軟件的自主可控,MiniGUI 的生意又回來(lái)了,我們也幫著一些客戶開(kāi)發(fā)了基于 MiniGUI 的解決方案。但由奢入儉難,習(xí)慣了網(wǎng)頁(yè)前端開(kāi)發(fā)技術(shù)的便利性,作為開(kāi)發(fā)者,我們自己都難以接受使用 C/C++這樣的編程語(yǔ)言來(lái)編寫帶有圖形用戶界面的應(yīng)用程序——我發(fā)現(xiàn)使用 C/C++這類編程語(yǔ)言開(kāi)發(fā)帶 GUI 的應(yīng)用,跟用牛刀殺雞并無(wú)二致;就算有可視化的界面設(shè)計(jì)器幫助開(kāi)發(fā)者,其開(kāi)發(fā)效率也很難和 Web 前端技術(shù)相比。

有了這樣的認(rèn)知,我開(kāi)始思考為正在開(kāi)發(fā)中的 HybridOS(合璧操作系統(tǒng))設(shè)計(jì)一款專門的編程語(yǔ)言。最初,我們的目標(biāo)是讓熟悉 C/C++或其他編程語(yǔ)言的開(kāi)發(fā)人員可以通過(guò) HVML 使用 Web 前端技術(shù)(如 HTML/SVG/ MathML 和 CSS)輕松開(kāi)發(fā) GUI 應(yīng)用程序,而不是在 Web 瀏覽器或 Node.js 中使用 JavaScript 編程語(yǔ)言做繞轉(zhuǎn)。最后,我們不光實(shí)現(xiàn)了這一目標(biāo),而且還將 HVML 實(shí)現(xiàn)為一種通用的編程語(yǔ)言。

為了將 Web 前端技術(shù)引入到通用的 GUI 應(yīng)用的開(kāi)發(fā)中, 開(kāi)源社區(qū)也做了大量的探索性工作,比如 Electron 開(kāi)源項(xiàng)目,就嘗試用 Chromium+Node.js 來(lái)搞定一切。但這個(gè)項(xiàng)目存在一些問(wèn)題,究其原因,跟 Web 前端技術(shù)本身的局限性有關(guān):所有的一切都離不開(kāi)瀏覽器,尤其是 JavaScript 編程語(yǔ)言。

后來(lái),我們?cè)陂_(kāi)源的瀏覽器引擎 WebKit 中,嘗試引入了一些具有動(dòng)態(tài)能力的標(biāo)簽,可以用來(lái)實(shí)現(xiàn)循環(huán)迭代、分支控制等功能。有了這個(gè)基礎(chǔ),我提出了一個(gè)大膽設(shè)想:何不干脆設(shè)計(jì)一種全新的標(biāo)記語(yǔ)言?于是,就有了 HVML。

簡(jiǎn)單來(lái)講,HVML 嘗試用一種新的思路來(lái)解決前面的那個(gè)問(wèn)題:

第一,將 Web 前端技術(shù)(主要是 DOM、CSS 等)引入到其他編程語(yǔ)言中,而不是用 JavaScript 替代其他編程語(yǔ)言。

第二,采用類似 HTML 的描述式語(yǔ)言來(lái)操控 Web 頁(yè)面中的元素、屬性和樣式,而非 JavaScript。

在設(shè)計(jì) HVML 的過(guò)程中,我有意使用了數(shù)據(jù)驅(qū)動(dòng)的概念,使得 HVML 可以非常方便地和其他編程語(yǔ)言以及各種網(wǎng)絡(luò)連接協(xié)議,如數(shù)據(jù)總線、消息協(xié)議等結(jié)合在一起。這樣,開(kāi)發(fā)者熟悉哪種編程語(yǔ)言,就使用這種編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用的非 GUI 部分,而所有操控 GUI 的功能,交給 HVML 來(lái)完成,它們之間,通過(guò)模塊間流轉(zhuǎn)的數(shù)據(jù)來(lái)驅(qū)動(dòng),而 HVML 提供了對(duì)數(shù)據(jù)流轉(zhuǎn)過(guò)程的抽象處理能力。

這樣,圍繞 HVML 形成的應(yīng)用框架,和傳統(tǒng)的 GUI 應(yīng)用框架以及 Web 前端技術(shù)都有顯著的不同。傳統(tǒng)的 GUI 應(yīng)用,代碼設(shè)計(jì)模式無(wú)外乎直接調(diào)用 C/C++或其他編程語(yǔ)言提供的接口,在一個(gè)事件循環(huán)中完成創(chuàng)建界面元素、響應(yīng)用戶交互的工作。Web 前端技術(shù)和傳統(tǒng) GUI 應(yīng)用的最大區(qū)別在于描述式的 HTML 和 CSS 語(yǔ)言,但程序的框架在本質(zhì)上是一樣的——事件循環(huán),而且必須使用 JavaScript 語(yǔ)言。

但 HVML 提供了一個(gè)完全不一樣的應(yīng)用框架。在完整的基于 HVML 的應(yīng)用框架中,包含一個(gè)獨(dú)立運(yùn)行的圖形用戶界面渲染引擎,開(kāi)發(fā)者通過(guò)編寫 HVML 程序來(lái)操控渲染引擎,而 HVML 程序在 HVML 解釋器中運(yùn)行,并可以和其他已有的編程語(yǔ)言的運(yùn)行時(shí)環(huán)境結(jié)合在一起,接收由其他編程語(yǔ)言程序生成的數(shù)據(jù),并按照 HVML 程序的指令,將其轉(zhuǎn)換為圖形用戶界面的描述信息或者變更信息。通過(guò)這樣的設(shè)計(jì),我們將所有涉及到圖形用戶界面的應(yīng)用程序分開(kāi)成兩個(gè)松散的模塊:

第一,一個(gè)和 GUI 無(wú)關(guān)的數(shù)據(jù)處理模塊,開(kāi)發(fā)者可以使用任何其熟悉的編程語(yǔ)言和開(kāi)發(fā)工具開(kāi)發(fā)這個(gè)模塊。比如,涉及到人工智能處理時(shí),開(kāi)發(fā)者選擇 C++;在 C++代碼中,除了裝載 HVML 程序之外,開(kāi)發(fā)者無(wú)需考慮任何和界面渲染及交互相關(guān)的東西,比如創(chuàng)建一個(gè)按鈕或者點(diǎn)擊一個(gè)菜單后完成某項(xiàng)操作等的這類工作,開(kāi)發(fā)者只需要在 C++ 代碼中準(zhǔn)備好渲染界面所需要的數(shù)據(jù)即可。

第二,一個(gè)或者多個(gè)使用 HVML 語(yǔ)言編寫的程序(HVML 程序),用來(lái)完成對(duì)用戶界面的操控。HVML 程序根據(jù)數(shù)據(jù)處理模塊提供的數(shù)據(jù)生成用戶界面的描 述信息,并根據(jù)用戶的交互或者從數(shù)據(jù)處理模塊中獲得的計(jì)算結(jié)果來(lái)更新用戶界面,或者根據(jù)用戶的交互驅(qū)動(dòng)數(shù)據(jù)處理模塊完成某些工作。

通過(guò)這樣的設(shè)計(jì),HVML 應(yīng)用框架將操控界面元素的代碼從原先調(diào)用 C、C++ 等接口的設(shè)計(jì)模式中解放了出來(lái),轉(zhuǎn)而使用 HVML 代碼來(lái)處理。而 HVML 使用類似 HTML 的描述式語(yǔ)言來(lái)操控 GUI 元素,通過(guò)隱藏大量細(xì)節(jié),降低了直接使用低級(jí)編程語(yǔ)言操控界面元素帶來(lái)的程序復(fù)雜度。

在 HVML 應(yīng)用框架中,有一個(gè)獨(dú)立運(yùn)行的圖形用戶界面渲染器。我們將這個(gè)渲染器設(shè)計(jì)為類似字符控制臺(tái)的啞設(shè)備,這樣,可以將 HVML 程序和應(yīng)用的其他模塊從控制界面元素展現(xiàn)行為的細(xì)節(jié)中解放出來(lái)。舉個(gè)例子,我們?cè)谧址K端程序的開(kāi)發(fā)中,可以使用一些轉(zhuǎn)義控制指令來(lái)設(shè)置字符的顏色、是否閃爍等,而字符終端程序無(wú)需包含任何處理字符顏色以及閃爍的代碼——因?yàn)檫@些細(xì)節(jié)字符控制臺(tái)(可能是硬件,也可能是一個(gè)偽終端程序)幫我們默默處理了。HVML 的界面渲染器也遵循同樣的設(shè)計(jì)思路,HVML 程序創(chuàng)建好一個(gè)按鈕,至于這個(gè)按鈕顯示出來(lái)是什么樣子的,用戶如何跟它交互,這些統(tǒng)統(tǒng)無(wú)需 HVML 程序來(lái)操心——一切由渲染器在給定的描述式語(yǔ)言(如 HTML、CSS)的控制下運(yùn)轉(zhuǎn)。這帶來(lái)另一個(gè)好處,由于在界面渲染器中不包含任何的應(yīng)用運(yùn)行邏輯代碼和敏感的數(shù)據(jù),從某種程度上講,提高了安全性。

有了這樣的應(yīng)用框架設(shè)計(jì),HVML 可以讓幾乎所有的編程語(yǔ)言,不論是 C/C++這類傳統(tǒng)編程語(yǔ)言,還是 Python 這類腳本語(yǔ)言,都可以使用統(tǒng)一的模式來(lái)開(kāi)發(fā) GUI 應(yīng)用。而在此之前,不同的編程語(yǔ)言有不同的 Toolkit 庫(kù),這些 Toolkit 庫(kù)的能力不同,接口不同,渲染效果參差不齊。而 HVML 可以將這些交互類應(yīng)用的統(tǒng)一起來(lái),甚至也包括那些傳統(tǒng)的字符界面應(yīng)用程序。我們還可以將 HVML 程序運(yùn)行在另外一臺(tái)遠(yuǎn)程設(shè)備上(或云端),而渲染器運(yùn)行在和用戶交互的設(shè)備上,從而形成一個(gè)新的遠(yuǎn)程應(yīng)用(或云應(yīng)用)解決方案。

盡管 HVML 最初是為了解決 GUI 應(yīng)用的開(kāi)發(fā)而設(shè)計(jì),但隨著開(kāi)發(fā)的深入,我們引入了一個(gè)全新的棧式虛擬機(jī)作為 HVML 程序的假象運(yùn)行機(jī)器。有了棧式虛擬機(jī)這一堅(jiān)實(shí)的理論基礎(chǔ),我們?yōu)?HVML 賦予了通用計(jì)算的能力。也就說(shuō),HVML 不僅僅可以作為交互式應(yīng)用的膠水語(yǔ)言,還可以當(dāng)做通用的腳本語(yǔ)言使用。同時(shí),由于我們?yōu)?HVML 提供了協(xié)程、并發(fā)執(zhí)行等的現(xiàn)代編程機(jī)制,因此,HVML 還可以用于高并發(fā)的服務(wù)器軟件的開(kāi)發(fā)。

05任重道遠(yuǎn),開(kāi)源協(xié)作是正道

完成了最初的設(shè)計(jì)與開(kāi)發(fā)后,HVML 已經(jīng)進(jìn)入到了開(kāi)源協(xié)作的新階段,開(kāi)發(fā)團(tuán)隊(duì)和社區(qū)還有很多工作要做。首要目的,便是實(shí)現(xiàn) HVML 規(guī)范 1.0 定義的所有特性和接口。這項(xiàng)工作將在 2022 年內(nèi)完成。另外,作為 HVML 技術(shù)棧的一部分,針對(duì)嵌入式系統(tǒng)的渲染器也已提上日程,將在年底隨合璧操作系統(tǒng)的新版本一并發(fā)布。

當(dāng)然,一個(gè)編程語(yǔ)言走向成熟并獲得廣泛應(yīng)用將是一個(gè)漫長(zhǎng)的過(guò)程。這需要構(gòu)建一個(gè)強(qiáng)有力的開(kāi)源協(xié)作社區(qū),而成功的社區(qū)運(yùn)營(yíng),又需要資金、人才等各方面的支持。這在國(guó)內(nèi)尚無(wú)成功先例,更是一個(gè)需要長(zhǎng)期實(shí)踐的課題。

目前 HVML 社區(qū)非?;钴S,很多小伙伴幫助我們開(kāi)發(fā)了各個(gè) Linux 發(fā)行版的打包腳本,還有小伙伴制作了教學(xué)視頻。作為社區(qū)領(lǐng)導(dǎo)者,我目前最希望的便是能夠獲得足夠數(shù)量的贊助資金,用這些資金來(lái)激勵(lì) HVML 社區(qū)的小伙伴們,使得社區(qū)可以盡快進(jìn)入到良性循環(huán)當(dāng)中。另外,也希望有更多的基礎(chǔ)軟件企業(yè)加入到 HVML 的開(kāi)發(fā)當(dāng)中,助力 HVML 盡快走向成熟。

關(guān)于未來(lái),如果 HVML 技術(shù)得到大量開(kāi)發(fā)者的認(rèn)同,我相信找到合適的商業(yè)模式,也只是時(shí)間的問(wèn)題。另外,圍繞 HVML 創(chuàng)立一個(gè)適當(dāng)規(guī)模的基礎(chǔ)軟件企業(yè),也不一定非要由我去做。假如有更加擅長(zhǎng)企業(yè)經(jīng)營(yíng)的人圍繞 HVML 開(kāi)發(fā)了新的產(chǎn)品,找到了一套行之有效的商業(yè)模式,成功融資甚至上市,我本人也會(huì)非常高興。我想,這是成熟生態(tài)的一部分。

未來(lái)無(wú)需假設(shè),投身其中,讓自己的設(shè)想變成現(xiàn)實(shí),才有可能書寫歷史。

關(guān)鍵詞: 編程語(yǔ)言 操作系統(tǒng) 嵌入式系統(tǒng)

相關(guān)閱讀:
熱點(diǎn)
圖片 圖片