節日最後一天,沒什麼事情,想聊聊我對中國計算機技術發展的一個遺憾,為什麼我們沒有開發出自己的程式語言
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。
語言 | 發明國家與作者 | 發明時間 | 簡單說明 | |
C語言 | 美國貝爾實驗室 | 1972年 |
C語言基本上是整個計算機體系的鼻祖,Windows,Linux等核心基本上都使用C語言。介於高階語言和組合語言之間, 可以說,C語言是計算機體系裡唯一不可替代的語言。 |
|
C++ | 美國貝爾實驗室 | 1983年 |
C++是C語言的繼承,它既可以進行C語言的過程化程式設計,又支援物件導向設計,但是他的最大問題是:太難了。 特別是多繼承,多介面等問題搞起來真的非常頭疼。 |
|
Java | 美國Sun | 1995年 |
Java 是由 Sun推出的高階程式設計語言。Java 可執行於多個平臺,如 Windows, Mac OS 及其他多種 UNIX 版本的系統。同時借鑑了C++的優點,去掉了C++的缺點。 |
|
C# | 美國微軟 | 2000年 | 微軟推出的程式語言,借鑑了Java的有點,增加了自己的亮點。 (這裡沒有增加VB,因為VB用的娛來越少) | |
R語言 | 紐西蘭Ross Ihaka | 1993年 | R語言,一種自由軟體程式語言與操作環境,主要用於統計分析、繪圖、資料探勘。 | |
PHP | 加拿大Rasmus Lerdorf | 2005年左右 | 用來製作Web的語言(核心編譯器採用C語言) | |
Python | 荷蘭Guido van Rossum | 1990年左右 | Python是一種廣泛使用的解釋型、高階和通用的程式語言。作者說“課餘”時為了打發時間就想寫一個指令碼直譯器,然後Phthon就出來了(有點類似Linux)。但是他剛出生併火,隨著網際網路發展,他才逐漸火起來。 | |
Perl | 美國Larry Wall | 2000年左右 | Perl是高階、通用、解釋型、動態的程式語言家族。 | |
Ruby | 日本まつもとゆきひろ | 2000年左右 | Ruby 是一種物件導向、命令式、函式式、動態的通用程式語言。 | |
Rust | 美國Mozilla | 2014 | Rust 語言是一種高效、可靠的通用高階語言。 | |
Go | 美國谷歌 | 2007年 | Go 語言被設計成一門應用於搭載 Web 伺服器,儲存叢集或類似用途的巨型中央伺服器的系統程式語言。 | |
Swift | 美國蘋果 | 2015年 | Swift 是一種支援多程式設計正規化和編譯式的開源程式語言,蘋果於2014年WWDC(蘋果開發者大會)釋出,用於開發 iOS,OS X 和 watchOS 應用程式。 | |
Kotin | 美國谷歌 | 2017年 | Kotlin 是一種在 Java 虛擬機器上執行的靜態型別程式語言,被稱之為 Android 世界的Swift,由 JetBrains 設計開發並開源 | |
JavaScript | 美國谷歌 | -- | Javascript雖然是網景發明的,但是現在主要採用谷歌V8引擎,所以之際控制權在谷歌手裡,因此這裡谷歌統計。 |
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萬出生人口相比,斷崖式下滑。
而且,長遠看,中國人口下降是必然。
過去,中國網際網路之所以成功,最根本的原因就是人口多,市場廣。
當人口下降後,市場縮小,就可能會出現競爭激烈的情況。
這或許會逼迫一些國內廠商開發自己的程式語言。