節日最后一天,沒什么事情,想聊聊我對中國計算機技術發展的一個遺憾,為什么我們沒有開發出自己的編程語言
1.華為推“智慧養豬”,或許暗示方向有變
近日,華為機器視覺總裁在微頭條爆料稱,華為機器視覺推出了智慧養豬方案。養殖業的發展方向是數字化、智能化和無人化。此前任正非接受媒體采訪時也曾提及養豬,他說:“如果我考不上大學,養豬可能也是養豬狀元”。
由於眾所周知的原因,因為美國制裁華為無芯片可用,導致華為無手機可賣,在這種情況下,企業靠情懷是留不住人的,最主要的還是活下來。
華為養豬可以說是華為要生存下來的無奈之舉,用時間換空間。你可以說華為的智慧養豬采用了全新的5G,AI等先進技術,但是那畢竟對技術要求不高。
這就像自動駕駛,雖然有人說自動駕駛應該先用在農業耕地上面,等成熟了再推廣到城市道路上,但是毫無疑問,農業對無人駕駛要求遠遠比城市的低很多。沒有太大參考意義。
2.方舟編譯器暗淡,中國推自己的編程語言前途渺茫
方舟編譯器是華為推出的首個完全自主研發的編譯器平台,於2019年8上線。他包含編譯器、工具鏈、運行時等關鍵部件。
在發布方舟之前,方舟說自己編譯的App比Google的快。
也許多少有點宣傳的噱頭,導致知乎上有很多人討論方舟編譯器。
贊揚支持者有之,冷嘲熱諷者有之
總之,方舟編譯器轟動一時。
在我看來,方舟編譯器的重要性不亞於鴻蒙操作系統的推出。
編譯器有了,如果華為想推出自己的編程語言,就會水到渠成。
射人先射馬,擒賊先擒王。如果沒有自己的編譯器,想做自己的操作系統無異於水中月,鏡中花。
但是,隨着華為出售榮耀手機,華為推智慧養豬。。。
這些都讓方舟編譯器前途暗淡,讓中國推自己的編程語言前途渺茫。
3.再論編譯器的重要性
編譯器,簡單的說,就是打通高級語言和硬件芯片的橋梁。這里引用知乎上“養貓的哈士奇”的一段話來說明編譯器。
編譯器是很基礎的軟件,不過已經很多年沒有冒出新的編譯器了,技術也很成熟了,華為為什么要搞一個方舟編譯器呢?當然是為了編譯程序使之更好的運行了。多數人都知道JAVA是一個跨平台的編程語言,為什么JAVA可以跨平台呢?這就是JAVA虛擬機(JVM)的功勞,JAVA語言其實是通過JVM來運行的,JVM與各個平台之間做了適配,其實跨平台的是JVM,Android的ART虛擬機是一個特別的JVM。
在計算機領域沒有什么問題是不能通過增加一個間接的中間層來解決的,JVM就是這樣的中間層。很多人會問Android 的APP需要跨平台運行嗎?現在來看不需要,那Google為什么選JAVA作為開發語言呢?可能有很多因素的考量,但是誰也沒有想到SUN居然被著名的專利流氓ORACLE收購了,即便Google把JVM改寫了好幾遍也依然沒躲過這個專利官司,
真正的大公司還是要有自己能完全控制的編程語言呀。
也正是因為此,微軟推NET/TypeScript語言,谷歌推Go/Kotin語言,蘋果推Object-C/Swift語言也就在情之中了。
一句話:卧榻之側豈容他人鼾睡,最重要的核心技術必須自己掌握
4.現代流行編程語言的比較
我們摘錄了runoob網站上列出的幾中編程語言,做一個比較。在下表里,列出了當前最流行的14種開發語言。
注意:像VB基本上被淘汰所以不再加入,而像Django太小眾了,所以也忽略了。
可以發現,這些開發語言,美國占10份,日本1份,新西蘭1份,加拿大1分,荷蘭1分。
事實上,Ruby也不怎么流行了,R語言主要用於教學,受眾小。再去掉他們2個 。
最終的結論是:流行的12種開發語言,美國占了10份,新西蘭1份,加拿大1分,中國的是0。
5.開源了,還需要推出自己的編程語言嗎?
一個常見的問題是:現在編程語言甚至編譯器都開源了,還需要開發自己的開發語言嗎?
例如現在的Go語言,Swfit,Kotin,以及微軟的.NET,也都早已經公開了自己的源代碼,還有必要在乎這個語言是自己的還是別人的嗎?
我們常說:一流的企業賣標准,二流的企業賣品牌,三流的企業賣產品,四流的企業賣苦力;還是要開源的 (這就像TikTok,TikTok數據存美國,使用人是美國,雇佣的人也是美國,但是美國還是不放心,要求出售他)
1)開源是手段,不是目的
我們認為,現在的開源是手段而不是目的。也就是開源是為了占用市場率,吸引更多開發者,而不是真的為了開源而開源。
如果說的更直白些,我不認為微軟真想開源NET,谷歌想開源Kotin,蘋果想開源Kotin。
畢竟那些代碼都是自己的工程師辛辛苦苦寫的,干嘛要無私奉獻開源出來?企業又不是慈善機構。
心里不願意但是身體很誠實,不開源會讓使用者擔心代碼后沒有留有后門,有沒有BUG等等,
而開源了,還可以廣納天下人才為我所用,有漏洞也能及時解決,何樂而不為。
2)有些最核心技術未必真的開源
很多開源確實是為了共享,但是有時候最核心的未必公開。例如視覺圖片處理開源軟件OpenCV,公開了很多代碼,但是對於一些最核心
的代碼,他是不開源的。
3)免費的未必是最便宜的
我們都喜歡免費,一個常見的營銷是手機,想要0元就可以拿到XX手機,心動了嗎?心動就來那吧,可是當你買時才發現,0元手機的前提是每個月至少消費200元,
而且至少要簽訂24個月。所以,免費的背后有時候是更大的消費。
4)開源協議受限
開源了免費的,不代表可以無限制使用。最直接的例子是芯片的RISC-V是一個基於精簡指令集(RISC), 對指令集使用,RISC-V基金會不收取高額的授權費。開源采用寬松的BSD協議,
企業完全自由免費使用,同時也容許企業添加自有指令集拓展而不必開放共享以實現差異化發展。
但是,當美國制裁華為時,你就會發現,此時就算是開源的可能你也無權使用。
6.中國為什么產不出自己的開發語言?
1.中國市場足夠大
每年的雨水季節,非洲草原植物生長茂盛,食草動物大量繁殖,這時食物充沛。因為食物太多了,獅子對走過身邊的羚羊已經沒有興趣。
這可以簡單解釋為什么中國產不出自己的開發語言。
中國市場太大了,做底層開發(例如開發語言編譯器,設計一套編程語言)太辛苦,吃力不討好,還是做App賺錢快。
不管是拼多多還是美團餓了么,甚至包括阿里騰訊,不用太為錢發愁。
例如中國14億人,一人給你一元錢,看起來沒多少,但是合起來就是14億。
這么大的市場可以讓中國的巨頭活的很好。
但是,美國就不一樣了,美國才3億多人口,而且美國的巨頭比中國的大很多,那里養活不了這么多巨頭,
因此一方面對外進行全球擴張,一方面對內互相攻入對方的地盤。
2.政旨與語言因素
中國的互聯網確實阻斷了很多國外優秀的技術網站,使得在中國發布的新的技術很難推廣的全球。
難易引起國外開發者的注意。
可能語言也算一個,畢竟英語是全球通用語言。在上面的流行語言里,除了日本的,基本上都是說英語的國家。
7.補充問一個簡單的問題: 根號2等於多少?
問一下,根號2等於多少?在.NET里,提供了Sqrt(2)就立刻知道了結果,但是具體怎么實現的?.NET里直接給出二行代碼:
[MethodImpl(MethodImplOptions.InternalCall),ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern double Sqrt(double d);
也就是,他是調用操作系統級的Sqrt函數,但是操作系統怎么實現的就不知道了,
而且,操作系統實現的方法是不是最好的最優的方法,也不知道。
如果自己開發一個編程語言,想要效率更高,可能就要你自己實現Sqrt方法,而不是直接調用底層的Sqrt。
附:關於人口的一些隱憂
2020年,中國公布的生人口數據為1003萬,與2019年1465萬出生人口相比,斷崖式下滑。
而且,長遠看,中國人口下降是必然。
過去,中國互聯網之所以成功,最根本的原因就是人口多,市場廣。
當人口下降后,市場縮小,就可能會出現競爭激烈的情況。
這或許會逼迫一些國內廠商開發自己的編程語言。