歡迎您光臨本站 註冊首頁

圖解C++、CoffeeScript 和 Ruby 的複雜度

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

 導讀:大多數人都同意C++是門相當複雜的語言,不過它究竟有多複雜?由於好奇心作祟,我比較了C++、CoffeeScript、Ruby這幾門語言的必學功能作為複雜程度評判的標準。雖然CoffeeScript和Ruby都是動態語言,這點明顯和C++不同,但它們都是多範例語言,而且(至少某種程度上)支持面向對象、函數式、過程式以及普通編程,所以這篇文章可以簡單地理解為C++ vs. 動態語言。

這裡拿來比較的概念既包括類和操作這樣大的範疇,也包括if-else狀態和while循環這樣的較細節的地方。從不同的角度比較語言的複雜度肯定會大不相同,所以這些數字只能粗略地反映語言複雜度。但無論如何,我覺得還是得到了一些有趣的數據。

同樣,我對其它靜態語言,比如F#和Scala一起做比較也很感興趣,可惜我並不熟悉它們,所以很難做出正確的比較。

CoffeeScript

首先來看看CoffeeScript:

它總共有8大範疇共68個概念。

注意:我把元編程也當作一個概念,因為它很大程度上基於可執行類體(executable class body)這一理念。

Ruby

Ruby明顯要更加複雜,總共11大範疇96個概念。它比CoffeeScript有更加複雜的類模型,比如常量、塊、操作符重載之類。

C++

最後,我們來看看C++:

總共18大範疇、186個概念,幾乎是Ruby的兩倍、CoffeeScript的3倍!

C++里的某些概念(比如命名解析)因為有很多微妙的規則,所以更加複雜。而且因為有太多不同的範疇,C++里的名稱概念也比其它語言更複雜。相比之下,在動態語言里,幾乎所有東西都是常量或者變數(包括類名和函數名)。

還有一點,我有意地忽略了“編譯”和“鏈接”,因為CoffeeScript和Ruby里並沒有這些功能。

從上圖可以看出,C++複雜是有很多原因的,其中之一就是靜態類型系統(static type system),另一方面是因為模板(template),還有就是命名系統(name system)以及複雜的類模型(complex class model)。底層的驅動肯定是性能和類型安全的。

上圖還缺少哪些信息?

我沒提到程序員在練習中需要掌握多少技巧,比如:

● 標準類庫(standard libraries)

● 編程語言習語和最佳範例(language idioms and best practices)

● 併發概念(concurrency concepts)

● 設計模式(design patterns)

這一點在從入門到精通時更為明顯。

我相信在這一點C++同樣是最複雜的。比如像《 C++ Coding Standards 》這樣的書:《101 Rules》、《 Guidelines 》和《Best Practices》以及《 Effective C++ 》等等。這些書雖然已經涉及很多內容,但是旨在解決日常問題,並沒有考慮到複雜的使用。C++絕對比這些書里說的要更加博大精深!

同樣,其它編程語言也有最佳範例和習語需要學習,但我覺得大部分語言的會比C++少得得多。

重點是什麼?

我並不是為了抱怨C++到底是多麼龐大和複雜。對於硬體、性能限制明顯的大型項目,綜合考慮工具、庫和開發者方面的因素,沒有哪種語言能夠代替C++。

但是,你需要要注意到C++編程里哪些是必須了解的,這一點很重要,因為這深深影響到課程教學和作為項目語言的選擇。

C++並不是一門很容易入門的編程語言,相反學習這門語言會很費時間,而掌握它更費時間。因此,“自上而下”地學習C++很有意義!

隨著C++11標準的出台,C++現代高級子集(及其標準庫)的入門變得相對容易一些了,你只需要之後逐漸理解其複雜的和低級特性。換句話說學習std::shared_ptr應該在裸指針之前,lambda在仿函數之前,std::array在C樣數組之前。

如果你想使用C++開發新項目,開發者的經驗等級和剩下的鞏固C++能力的時間很需要考慮。

下面這一點也很重要:因為C++的複雜性,開發者語言知識經驗差別可能會非常大,所以在面試和培訓時要非常注意這點!團隊成員水平有明顯的差距時,能力強的和弱的開發者都不會舒服。

最後是一張3種語言近距離比較的圖:

原文鏈接:cpprocks.com



[火星人 ] 圖解C++、CoffeeScript 和 Ruby 的複雜度已經有696次圍觀

http://coctec.com/docs/program/show-post-71344.html