可视化比较 C++、Ruby 和 CoffeeScript 语言的复杂度-问答-阿里云开发者社区-阿里云

开发者社区> a123456678> 正文

可视化比较 C++、Ruby 和 CoffeeScript 语言的复杂度

2016-03-04 09:40:06 2259 1

大多数人都认为 C++ 是相当复杂的编程语言,可到底有多复杂呢?我通过完整学习一个编程语言所需要掌握的“概念”数对此进行量化。
“概念” 在我的定义中包含大的分类,如类、操作符以及更细粒度的 if-else 语句和 while 循环等等。不同的概念其复杂度的差别非常大,因此概念数只能作为一个粗略衡量语言的复杂性的指标,然而我却觉得很有趣。
我选择 C++,CoffeeScript 和 Ruby 作为比较的对象。CoffeeScript 和 Ruby 是动态类型语言,所以他们和 C++ 是有很大的不一样的。但是他们都是多范型(multi-paradigm)的通用型语言,支持面向对象,函数,过程和泛型编程。所以这篇文章对比的是 C++ 和动态类型语言。
假如能和 F#,Scala 等静态类型语言一起比较会更好,但是我不熟悉他们,所以就不勉强了。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 18:51:49

    CoffeeScript

    首先我们来看看 CoffeeScript:
    screenshot
    CoffeeScript 包含 68 个概念,分为 8 组。
    注意我把元编程作为一个概念,因为它主要基于可执行类体的概念之上。
    Ruby
    screenshot
    很显然,Ruby 更加复杂,有 96 个概念,分11组。比 CoffeeScript 更复杂的类模型,还包括常量、块和操作符重载。
    C++

    最后是 C++:
    C++ 有 189 个概念 11 个分组,是 Ruby 的 2 倍,是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++的复杂性,开发者语言知识经验差别可能会非常大,所以在面试和培训时要非常注意这点!团队成员水平有明显的差距时,能力强的和弱的开发者都不会舒服。
    screenshot

    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144293浏览量 回答数 40

53

回答

OSS C/C++ SDK分享交流区

否极泰来 2015-06-15 17:05:09 47909浏览量 回答数 53

37

回答

阿里云服务器win2003系统快速配置IIS+php+mysql+phpmyadmin+zend

看头像 2013-07-14 21:10:06 51172浏览量 回答数 37

3

回答

2020年05月编程排行榜-C语言继2015年,重新成为编程排行榜第一名

huc_逆天 2020-05-06 13:43:42 35317浏览量 回答数 3

58

回答

技术入门问答集锦,涉及多种技术方向,解决新人学习困惑

管理贝贝 2016-08-03 10:13:27 52476浏览量 回答数 58

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85196浏览量 回答数 23

23

回答

可视化的签名页面大更新,增加URL 签名例子及图片处理URL签名例子!!

wood23 2015-03-21 00:48:55 40346浏览量 回答数 23

15

回答

2014年度最受好评的十佳工具新鲜出炉,欢迎来围观

honghongyu 2015-02-16 16:28:26 33637浏览量 回答数 15

11

回答

Windows2008r2+IIS7.5+mysql+php+URL_rewrite伪静态的环境配置

zhedianshi 2014-07-23 10:23:25 47592浏览量 回答数 11

21

回答

OSS新手视频教程!

聚小编 2013-01-14 18:09:51 57998浏览量 回答数 21
+关注
0
文章
14879
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载