為什麼這些年c語言統治了幾乎所有方面?

很多語言比如java c# python golang matlab erlang 都是基於c的 算是c/c++的一個子集 理論上這些語言能實現的 c/c++ 都能實現 可能開發速度會慢些 但這不是重點 重點是新的質的改變 以及 殺手級功能

最新的科技發展還得靠c/c++ 比如波士頓力學的大狗機器人相關係列 最近的機器學習 等等

效率上誰也還是比不過c 但是這麼多年過去了 還是沒有一種方法基於彙編 而比c 更好 為什麼

隨著時間發展總有更好的替代方案 但我周圍見到的 或者網上看到的 幾乎沒有人考慮自己重新替代一下 沒想肯定找不到更好的

最近一些年c發展迅猛 各種操作系統都是基於其上

但在比c更好的路上走的很慢


一切編程語言都是面向特定領域(Domain-Specific)的。(Kimmy"s First Law of Programming Language)

C語言也不例外。

就只能拿來寫底層或者實現其他編程語言

所以根本不存在「統治」之說。

並且Java / C#(我覺得這就是題主所說的.net)/ Python / Golang,本來就不是為了替代C語言,也沒那個能耐替代C語言。

畢竟如果你只是做應用,還是要優先考慮開發效率而非(C語言一般的)運行效率


為什麼這些年c語言統治了幾乎所有方面?

Are you kidding me?


我感覺這個問題不成立,一個高級語言無論如何都不如低級語言指令集的使用率高,最終都要變成機器指令

問這個倒不如問為什麼PC上所有非unix-like,非M$-like的OS都失敗了


這言論太可笑了吧。你見用過誰用C語言寫網站,誰用C語言寫手機APP?


不知道在哪裡看到過的一句話 雖然不是完全正確的 但是還是能表達C語言的在計算機科學體系中的作用:

C是計算機模型的最小封裝,C語言的語法簡單到極致,它幾乎不提供任何抽象,他只是封裝了計算機模型的基本概念。C語言編碼的過程其實並不是用C語言本身,而是用計算機的模型中的各個概念來堆砌軟體,你會真正的理解到軟體的本質。只學習C語言本身的人永遠無法用C做出像樣的軟體,你必須理解計算機硬體的邏輯模型,操作系統的邏輯模型,編譯器的編譯原理等等,這些都是軟體的基石。C語言的偉大就在於,他就是計算機本身!


C在所有計算機語言中不是語法最清晰的一種,也不是最早出現的一種,但是

1)C是靈活的:可以把C用到幾乎所有的領域;

2)C是高效的:C語言的基本概念直接反映了傳統計算機的基本概念;

3)C是可用的:無論是51的單片機還是超級計算機,都有可使用且穩定的C編譯器;

4)C是可移植的:從硬體到軟體,這通常都是蠻難的。

與這些優點相比,那些缺陷,比如不安全的指針,語言結構的不安全性等等就成了「不要在意的細節了」。


「然後又為這門語言起了個極其響亮的名字——New B」


在問為什麼之前而不問是不是的行為都是耍流氓。


題主,Lisp聽說過嗎?

在問為什麼之前先想一下是不是。

問題描述是怎麼回事?是我漢語沒學好嗎?看完以後感覺整個人都凌亂了......

那好,我們嚴肅點考慮一下你的問題。

稍等,我換電腦回答。

------------------------------------------------------------------

好的,我們繼續。

題主認為很多高級語言的解釋器或者編譯器是用C實現的,這沒有錯。但你從這個就得出「C語言統治了幾乎所有方面」是否過於武斷?

你可以說他們的內在是C,但它們的出現就是因為C不能很好地解決實際的問題。

對了,最早的C編譯器是彙編寫的,那麼接著你的邏輯,我們是否可以說就是彙編統治了幾乎一切?然後彙編器是機器語言寫的....機器語言中的0、1是電路的高低電平.....不用我繼續說了吧?

(其實是物理統治了一切?(╯‵□′)╯︵┻━┻)

前面的回答提到了編譯器的自舉,也就是每一種圖靈完備的語言都可以解釋自己。於是你可以看到,為什麼SICP中提到我們可以很快的使用LISP寫一個解釋器。這個和C沒有關係。

很多語言比如java c# python golang matlab erlang 都是基於c的

的確是這樣,對後面的三種不妄加評論。前面的解釋器的確是C實現的,但是你能說在應用程式開發上C就比它們優越嗎?每一種語言都有自己適合的領域,C之所以這麼強大一個原因在於C的誕生就是為UNIX的開發而誕生的,如@曹毅所說

C語言的偉大就在於,他就是計算機本身!

但不代表C就統治了幾乎所有方面。

題主你聽說過有誰用C實現前端開發嗎?

至於這句話

最近一些年c發展迅猛 各種操作系統都是基於其上

。。。。。。你確定不是開玩笑?「最近一些年」怎麼理解?那麼,題主,聽說過SavaJe嗎?一個純java編寫的操作系統,注意發表觀點之前先去證實一下。

好的我們接著分析。

效率上誰也還是比不過c

......好吧,題主,內聯彙編應該知道吧,這可以大大提升C程序的運行效率。

當然,腦洞夠大的話,我可以說,直接用機器指令更快。於是有的小夥伴不開心了,還有邏輯門呢...開個玩笑(嚴肅臉)。

但是這麼多年過去了 還是沒有一種方法基於彙編 而比c 更好

不好意思啊,題主,沒別的意思,我還是想舉栗子,這個系統Menueos是純彙編實現的http://www.menuetos.net/

它「可以存入一隻1.44MB的軟盤中。S擁有實時,搶佔式的宏內核。」(摘自wiki百科),小巧,而且功能也不差,在體積上就體現出它的優越性,就這麼被題主一句話弄哭在廁所......

而且,如果題主感興趣的話可以去查一下,基於彙編的實現不止這些。

-------------------------------------------結束分割-----------------------------------

最後說點題外話吧,沒有黑題主的意思,我只是想說,有想法很好,說明思考過了,但是在發問之前最好要去證實一下,這樣起碼讓回答者感受到你的熱情。還有問題描述,真的有點混亂啊。

總之呢,希望可以幫到題主。

答主也是在校學生,有些觀點不甚全面,歡迎大神們在討論區討論哦~


因為等做出來了,會發現幾乎跟C一模一樣......


c貼近機器語言本身,操作系統上的一個線程就是這樣執行的,c中的函數調用、參數傳遞、指針都直接對應著調用棧的變化和彙編指令。這是一門真實的語言

c++更高級,但是也保留著貼近機器語言的特色。

再高級的語言逐漸脫離了機器語言,相距很遠了,更高級的語言實質上是一個應用程序,編程者在這個應用程序上寫腳本,在此層面很難了解到程序本身是如何運行的。但,這樣確實提高了生產力,一定程度上解放了開發者。


其實我感覺多半是因為大學裡教C++這門課……


Swift,

LLVM:

我們來談談一句遠古繼承下來的話「一切XX都是耍流氓」


我是C/C++程序員,C誕生的使命是寫操作系統。

另外,不同意C統治了各個方面,C寫應用層面的東西非常痛苦,很多別的語言做起來簡單無比的事情需要搞得很複雜,甚至奇技淫巧才能搞定。


因為語言層面簡單,沒有過度設計,讓人更關注實現本身,而不是語法。同時更貼近硬體,效率更高。


回答這個問題之前, 你能不能先回答我一個問題, 你們這些人為什麼總是不願意使用C語言?

又或者你說

而比c 更好

那你至少應該說一說你對這個新語言的期望吧?

希望題主不是書讀的太少想得太多, 而是真的有思考過.


學過彙編再看c,其實就很清楚啦。只是現在的計算機結構對於底層基本都是c開發效率最高。統治應該說不上吧,合適的工具干合適的事情


很簡單,歷史原因問題,c本來就是基於比彙編更易讀而產生的語言,如果現在用彙編寫一個和c一樣的語言,那麼會有什麼後果?你用的java、Python、Golang是不是要重新基於新的語言重寫編寫編譯器?甚至於操作系統也要重新編寫,影響得多大?全世界所有的系統都要重新更換?誰給錢?而且新開發的語言效果和C一樣,效率不一定見得高,雖然這幾年因為互聯網的發展高級語言更多傾向於效率導致C用得少,發展緩慢,但是在前期積累下來的成果新語言得花多少時間和精力才能達到跟C一樣的效果?而且C本來就已經貼近系統硬體底層了,精通C語言就已經是已經很困難的事情了,還不如多花點精力研究數據結構,讓系統效率更高不是?


為什麼這些年來1和0統治了整個宇宙


至少還沒統治前端呢


沒有最好的語言,只有最適合的工具。

誰告訴你c 統治了幾乎所有語言?還是你自己的感悟?別逗了。還是洗洗睡吧。明天還的繼續碼代碼。


你用Python在比你小手指頭指甲還小一半的晶元上寫程序試試。

用c語言寫一眼就能看出彙編是啥。


推薦閱讀:

怎麼理解 `auto var = [&]() { /* things to do */ }`?
為什麼 C++ 列表初始化時會執行兩次拷貝構造函數?
寫循環語句,循環體部分理論上是不是可以都寫在for(;;)第二個分號後?
map key是一個複雜結構,為什麼無法插入?
C++構造函數參數列表初始化與直接在函數內部初始化有何區別?

TAG:編程語言 | C編程語言 | 計算機科學 | C |