程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 並非偏見 也駁“駁C語言已經死了”

並非偏見 也駁“駁C語言已經死了”

編輯:關於C語言

>> 有偏見的永遠只是個體,而不是群體。作者加了後面那句,無疑證明有偏見的不是C/C++程序員,而正是他自己。

錯了,真理是站在少數人這邊的,當一種變革將發生的時候,帶有偏見往往是大眾是傳統力量。

>> 這段話更加荒謬了。沒見過優秀的C/C++代碼? C++標准庫(STL)如此優雅。況且,有那麼多經典的C/C++開源作品,以及無意之中洩漏的Windows NT核心源碼,哪一樣不是絕世之作?我為作者淺陋感到難過。

STL的代碼並不優雅,缺乏functional programming機制支持的C++對於實現algorithm非常的牽強,比方我要find(v.begin(), v.end(), compare);的時候(v是一個自定義的結構),我必須在函數外面寫一個比較函數,如果要帶一些上下文的話還得寫一個functor類,非常的丑陋不堪,實用性大打折扣。而FP系的語言來說,可以非常自然的寫一個匿名函數。STL裡所標榜的容器,算法等概念,在FP裡早就原生支持了,而且要優雅的多。至於NT代碼這個我沒看過不好說,但是據說代碼裡有不少當初程序員留下來的抱怨BUG及設計失誤的話。

>> 內存管理是程序設計中最經典的話題。GC無疑是內存管理一個偉大的變革,但是我只是把它看作內存管理的一個解決方案,而認為不是唯一的解決方案。比GC更加優雅的方案不見得沒有。我比較傾向於在特定的情況下選擇合適的內存管理方案,而不是沒有任何選擇的余地,而這正是C/C++的偉大之處。 所有那些GC語言(如Java、C#等)均把這個解決方案強加給程序員,這一定程度上來說減輕了程序員的負擔,但是也同時約束了程序員的主觀能動性。"分配內存和釋放內存在C語言中都是很慢的"?不知道作者從哪裡獲得的結論。

實話說我也不喜歡GC,沒有GC的C也可以工作的很好,但是對於FP系的語言來說沒有GC是無法正確工作的,所以我還是得接受GC這個東西。當然我更喜歡的是將兩者互相結合的方式。

>> C/C++語言本身確實沒有太多MultiThead的支持,這種情況在C++0x出來後可望改變。但是,請記住C/C++永遠傾向於你使用成熟的庫來解決問題。

C/C++不能適應未來多核時代的發展,這個會是它沒落的最大原因。庫不能真正的解決問題,我們需要的是在語言層面的進一步發展。

>> 指針是C/C++過於靈活的體現。使用指針的代碼可以寫得很丑陋,但一樣可以很優雅。——這一點上用何種語言不會有區別。我相信,可以寫出優雅的Java代碼,那麼也一定可以寫出同樣優雅的C/C++代碼。而反之則未必(因為有些C++某些范式是Java所不能支持的)。C/C++語言中的選擇太多,這的確是令人困惑的,但不見得是劣勢。我對C/C++程序員的建議是,多了解和使用C++標准庫,而不是過於糾纏指針相關的細節。

>> 算法優化是程序設計的關鍵。但是通常情況下,所有語言(包括C/C++)的程序員研究的是關鍵路徑的優化。研究*p++是不是比p[i]快?我相信這是標准庫的實現者要考慮的事情。所不同的是,C/C++程序員也可以和標准庫的作者一樣去考慮這些細節,而其他語言的程序員被剝奪了這個權利。

說到優化,話題就多了。我曾經向C#的Dictionary中插入了1億條整數(從1萬多個文本文件中讀入),結果發現程序運行了整整一個下午仍然沒有完成。而我改用C++的std::map,20分鐘就搞定了。再試試對50萬條自定義的結構體數據進行排序,我相信你和我一樣,會深深喜歡上C++的的高效而優雅。

多年以前程序員們還在C程序裡面內聯匯編以實現代碼級的優化,但是如今已經沒有人這麼做了,因為CPU越來越復雜了,大多數情況編譯器做的比手工的要好。現如今的java/.NET的JIT引擎也已經能夠達到非常高的優化水平,在性能上C代碼的優勢已經越來越不明顯了。對於未來而言代碼級的優化也已經不再是重點,哪個語言可以適應多核的發展,誰就將成為性能的王者。

>> 新生的語言,必然會在吸收舊的語言上基礎上進行改進。看一個語言的生命力,並不在於看它某些地方存在的不足。事物會發展,並趨於完善。相信C++0x出來後,C/C++語言又將獲得新的生命力。單看Java、C#等幾個新一代的語言,其中有如此多的C++烙印,就證明了C/C++的影響是巨大的。動不動說一門語言死了,是一種淺薄。

說一門語言死了,不是說完全消失,而是退出主流開發語言行列,逐漸的被邊緣化,這些年鼓吹C/C++的人已經越來越少了,在很多開發領域C/C++的地位已經被JAVA、.net、腳本語言等所取代。C++0x出不出來已經不重要了,倒是C++/CLI的出現帶給C++一些新意,不過雖然我很欣賞C++/CLI,但是它不會成為主流。在多核到來的時候目前編程語言還沒做好准備,未來我們要面臨的不是2核4核而是百核千核這樣的規模,這不光要在算法領域繼續發展,編程語言也要來一次重大的變革才能適應這種發展,至於方向在哪裡,FP系的語言或許會給你帶來一些啟示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved