為什麼這些年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++構造函數參數列表初始化與直接在函數內部初始化有何區別?