• 联系我们
  • 地址:湖北武汉三环科技园
  • 电话:159116031100
  • 传真:027-68834628
  • 邮箱:mmheng@foxmail.com
  • 当前所在位置:首页 - c++培训
  • 图解C++、CoffeeScript、Ruby复杂度2012年8月16日
  •   摘要:大多数人都同意C++是相当复杂的语言,不过它究竟有多复杂?由于好奇心,我比较了C++、CoffeeScript、Ruby这几语言的必学功能浅显地比较它们的复杂程度。虽然CoffeeScript和Ruby都是动态语言,在这点明显和C++不同,但它们都是多范例语言,而且(至少某种程度上)支持面向对象、函数式、过程式以及...

      导读:大多数人都同意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)。底层的驱动肯定是性能和类型安全的。

      上图还缺少哪些信息?

      我没提到程序员在中需要掌握多少技巧,比如:

      这一点在从入到精通时更为明显。

      我相信在这一点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

      本文为CSDN编译整理,未经允许不得转载。如需转载请联系market@csdn.net。

      摘要:大多数人都同意C++是相当复杂的语言,不过它究竟有多复杂?由于好奇心,我比较了C++、CoffeeScript、Ruby这几语言的必学功能浅显地比较它们的复杂程度。虽然CoffeeScript和Ruby都是动态语言,在这点明显和C++不同,但它们都是多范例语言,而且(至少某种程度上)支持面向对象、函数式、过程式以及...

      导读:大多数人都同意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)。底层的驱动肯定是性能和类型安全的。

      上图还缺少哪些信息?

      我没提到程序员在中需要掌握多少技巧,比如:

      这一点在从入到精通时更为明显。

      我相信在这一点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

      本文为CSDN编译整理,未经允许不得转载。如需转载请联系。