為什麼沒有國產的C/C++的編譯器?
C或者C++的編譯器(能夠運行在x86上)有很多,比較著名的有VC,Borland C++,GCC,Watcom C/C++等,還有一大堆不是那麼著名的就不提了。為什麼這其中就沒有一款是國產的?是不是國人沒這個能力,根本做不出來?
題主是想看到這種么?YC編譯器 - YC瀏覽器 訪談:專訪用自己姓氏命名編譯器YC++的創始人
不說這種比較特別的,國人在參與實際生產用C++編譯器研發工作的其實還不少。在知乎上就有幾位現役的參與C++編譯器研發的大大呢。
中科院計算所,華為,Intel,微軟,IBM,高通,AMD,以前的SGI,Wind River,裡面做C++編譯器的中國工程師(特指中國籍的)和華裔工程師(特指種族)都不少。您用MSVC、XL C/C++之類的編譯器時,裡面都有不少華人的功勞。我景仰的Fred Chow(周志德)大大從事編譯器研發許多年,現在還在一線,在華為帶團隊做有趣的東西。看這裡:編程語言高級工程師招聘
職位誘惑 : Open64鼻祖Fred Chow華為召集令。
華為也有GCC maintainer,您用GCC的話就有機會用到了華為貢獻的代碼。
C編譯器實現起來(可以)比較簡單,經常被用來練手。無論是C的子集,還是完整的C(或許是完整的C89),都經常被用來練手。很多計算機專業的學生大學寫過的最完整的編譯器或許就是這類的。並不是特別需要用來炫耀的東西。
題主一定要追求一個國人實現的完整的C編譯器的話,看UCC:http://ucc.sourceforge.net/ (原本的SourceForge站)nobled/ucc · GitHub (Github鏡像)
而C++編譯器光是實現語義就已經頗繁瑣(難倒不是說很難但是很麻煩…),用來練手太費勁,做個新的生產級實現又不見得有多少收益,就算想要對自己的編譯器有更高的控制權,基於一個現成的開源C++編譯器(例如GCC或者Clang,以前的Open64/ORC)做進一步研發也是最好的選擇。
無論是C還是C++編譯器,要做到高質量、高優化程度的話,那就不是上面說的那麼簡單了,需要時間(錢)、人力(錢)、錢(錢)的沉澱。
說到底,為什麼沒有冠名「國產C++編譯器」的產品能成為主流,大概是因為題主大大沒有出大錢開間公司把參與C++編譯器研發的國人們都組織起來吧(ry編譯器對於一個公司來說基本上是屬於不賺錢的部門,除非是有特定的需求而不得不做C/C++編譯器。
如果公司自己現在有一個晶元,為了挖掘出自身晶元的性能,通用的C/C++編譯器滿足不了,那麼則可能自己來做C/C++編譯器。然而,就目前的現狀來說,即使自身有晶元,也逐漸轉移到利用Clang以及LLVM來進行第二次開發,而非如早先年代從頭開始來做。這從公司的角度來看也是更好的選擇,把C++複雜的特性全丟給Clang去做(chi)掉(shi)。
而看了樓主的描述與評論,感覺樓主想要的是從預處理器到最後的彙編器,鏈接器等都完全重新實現。那麼以國人的能力能不能做這樣的C++編譯器?微軟,IBM,Intel,高通等編譯器部門都有很多的國人,只要有公司肯捨得花大錢把遍布全球的這些人召集起來,給足夠的年份,從預處理器到後面的彙編器都是可以來做的,然而要做出高質量高優化的編譯器,那需要的年份可能就有點久了。
不過我想的說,對於公司來說,情懷其實幾乎都是用來扯淡的,賺錢與生存下去才是最重要的。
費力而不討好。
這二者有一點沒有,都會看到有很多公司做。
全靠自己完成一個從C/C++到x86 assmbly的編譯器是個難度不小的事情,最關鍵的是,你至少要比免費的好,才有可能賺錢吧?不說全面超越gcc,最起碼有一兩點你得比gcc做的強才能賣錢。而在國內從頭開始研發編譯器,等有幾點比gcc好的時候,公司早黃攤了。就算你做的比gcc強了,賣給誰呢?國內有一大半公司在寫網頁,裡面程序員可能C都沒學過,你賣哪兒去?
郭德綱有言:同樣是說話,你也會說話,為什麼你要花錢聽我說話?這是高科技!
同樣的道理,如果你是公司老闆,當你面對一個免費的東西,和一個收費的東西,你肯定要問,同樣的功能我為什麼要花錢?
對於編譯器無非三點:可靠性,速度和代碼大小。可惜的是,國內的公司需要這三者做到極限的並不算多。你能叫出來名字的公司,都不搞這麼底層,現在都在比誰手機殼做的好看,誰圖標做的好看,誰管代碼對不對,快不快。
如果你對編譯器的好壞非常敏感,就可能會真正考慮要不要不用開源編譯器了。比如「跑分」的時候。當然有一些應用是真的很敏感,比如飛機上程序的編譯器,代碼錯了就gg。還有汽車上的,除了可靠性之外,如果每輛車可以省下一個儲存程序的晶元錢,好幾百萬兩車可以省非常多錢,對編譯器的投資就是有意義的。再比如做主機遊戲,在晶元固定的情況下,怎麼跑出更好的效果?靠的就是更快的代碼。
提到這個,有個網站叫http://eembc.org,上面是各種晶元的benchmark。如果你感興趣,可以看看benchmark的排名以及他們用的compiler,你會發現其實他們並不都是用的gcc。如果你看到automotive那裡,會發現好多Green Hills Software或者GHS,就是我們公司啦~~~我寫的一個編譯器 剛好公司開源了 求點贊
OCamlScript
Github: https://github.com/bloomberg/ocamlscript觀察一下就可以發現這些C編譯器基本都是在80,90年代開發的,那時候投資編譯器是有商業價值的,並且學術界在編譯技術上的研究也是非常熱火朝天的,而如今靜態編譯技術已經基本成熟,兩大開源編譯器架構在性能及正確性上也日趨極限,重頭開發一款工業級的C編譯器至少需要10年,我不明白為什麼非要自己折騰?Redhat很牛逼,人家也沒有一定要做一個非Linux的系統,人家沒這實力嗎?開源無國界,開源是一種趨勢。
前面擺事實的講道理的答案看樣子都不合題主的口味,我來講個題主想聽的回答:
沒錯國人沒這個能力,根本做不出來
完題主,你好。
我寫過C語言編譯器。使用VB6實現的,很多年前放在geocities的個人網頁上供人下載,但也就我幾個高中同學下載過。那網站幾乎沒人訪問。我也寫過瀏覽器內核,支持html4和css2,用c++編寫的,放在我的csdn博客上。這兩個作品我都曾經寫在簡歷裡面,結果被面試官嗤之以鼻了,可見國內牛人還是挺多的。最後我想說,練好ppt技能還是蠻重要的。
對,不管主流非主流大牌的還是有點名氣的,沒有一個是工具鏈完全由中國人開發的,大學叫獸磚家都是臘雞,只會研究些沒用的理論騙經費,都沒那個技術去開發編譯器工具鏈,那些中國人開發出來的編譯器要麼用了別人的代碼要麼就是用了別人的工具,都不是純正血統的國產貨,就算有中國人自己開發的也都不敢放出來,說明寫的代碼也是臘雞。
窩跟你說,這郭怎,我陷思,定體問,劣根性,吃棗藥丸。完。題主聽過有人說 gcc 是屬於 「美國」 的么?
我想每一款軟體,特別是自由軟體,都是很多不同國籍的開發人員嘔心瀝血之作。莫名想到習語言→_→
各位自行百度(?? . ??)有的,你不知道罷了。不過又沒什麼"突破性"的改進,再有知名度,用戶習慣等。無非自己造輪子玩具。
我是微軟的股東,所以VC就是中國的。
這個問題的本質是,為什麼很多公司都不用開源編譯器而自己開發編譯器.而這個問題的答案在於開源編譯器有什麼弊端.
對於生產硬體的產商,比如ibm的power,intel的x86,硬體在不斷的更新換代,指令集也在不斷的豐富,想要完全利用起這些特性,就必須要有編譯器的支持,如果這個命脈完全依賴社區,風險不可控.而且編譯器產商常常有自己特殊的需求,社區的人不買你的帳,那到時候咋整.所以,幾乎所有的硬體產商都有編譯器.然而,由於編譯器前端幾乎和硬體平台無關,所以很多公司開始使用開源編譯器前端,自己專心做後端.比如ibm,intel,以及最近的微軟.回到我們的問題,為什麼國內沒有編譯器呢?那就得知道,國內有沒有晶元產商了,這個問題的答案,大家心知肚明.
其實,國內也是有做編譯器的,比如華為,原因很簡單,一方面,他們也做自己的晶元,另一方面,有錢唄.至於做的怎麼樣,呵呵.編譯器這種基礎中的基礎的東西,不是誰寫了一個,別人就能用的,這種東西要是有bug,你讓上層程序員吐血啊
完成項目一定以穩定為主,所以所有公司都不會冒險使用一個非主流編譯器的,除非這個公司有大牛,不過老闆不怕大牛做了一半跑了么,那麼之前的工作是不會有人接手的,只能推倒重新來過,這個成本風險太大了,稍微懂行的老闆是不會這麼乾的
所以目前市面上商用的編譯器就那麼幾個,誰也不會冒風險用新的,非主流編譯器都是研究用的1. 一般而言,企業是不會研發編譯器的,因為很難賺到錢
2. 對於不賺錢的研究,一般適合搞科研的,但是研發編譯器好像很難發論文,所以高校那一批人估計也不會去研究這個玩意兒。
3. 研發出來的編譯器除非技術非常的厲害,或者是很大程度能夠解決當前問題,否則大部分人都不會用,憑什麼用一個新出來的且不知道有沒有問題的東西?要知道gcc和vc之類的成熟編譯器都不知道測試多少次了,已經相當穩定了
4. 剩下的就只是那種有興趣的或者是想鍛煉自己的人了, 但是往往做出來的編譯器需要進一步的研發,因為做出來的充其量只是一個Demo,而不是一個產品,想必大家都知道Demo與一個產品的差距
不過個人覺得,寫個編譯器給大學生做案例講解倒是挺好的,要知道現在的大學生當中一波的人不知道編譯鏈接是幹嘛的,結果出了問題也不知道怎麼分析,怎麼解決。。。
放著現鐘不敲非要去煉銅,這有些過分了…這玩意又不是核彈牽扯機密、也不是發動機稀土礦什麼的,自然是在前人的基礎上做比較合理咯。只不過恰巧這玩意的前人不是中國的而已。
不問是不是,直接問為什麼的都是耍賴
國產的C編譯器是有的,我在一個中文論壇上見過一個寫過的國人。
不過自從x86/x64佔據了絕大部分市場,對C/C++編譯器產品種類的需求就變得很小了。
C++太大了,不知道有沒有國產的編譯器。不過舊的C++語言標準的C++程序,有一個外國編譯器可以生成C代碼,然後用國產C編譯器編譯生成的C代碼就可以了。因為大家都不用國產的CPU和操作系統~
華為的處理器上用的應該是自己家的編譯器…
什麼都得要國產。。簡直是。。你這麼愛國,只要跟外國沾邊的都別用啊
推薦閱讀:
※在獨自實現一個小型編譯器中你遇到過哪些困難?
※ANTLR涉及編譯原理中的哪些部分?
※函數的局部變數在棧中是如何分布的?
※能否從編譯原理的角度詳細的描述一下模板編譯的過程?
※編譯程序是否有操作系統的參與?