3. 语言漫谈
3.1综述
自从第一台计算机诞生以来,计算机硬件和计算机软件就相辅相成地共同推动计算机行业的飞速发展。计算机硬件的性能在摩尔定律的指引下提升迅速,相对来说计算机软件的发展速度就稍显逊色,毕竟软件的复杂度更高,而且也没有以往的经验可以借鉴。就计算机程序设计语言来说,从机器语言到汇编语言,再到高级程序设计语言。又经历了结构化程序设计语言、面向对象程序设计语言以及托管代码。期间函数式语言、逻辑式语言等等。单就计算机程序设计语言来说发展变化显然没有像硬件那样神速,计算机软件的发展更多的体现在框架和工具等更高的抽象层次。可见编程语言更注重以人为导向,更有效率的开发出软件,满足人们的需求。而不是原先以机器为导向,编写运行速率更高的软件。当然并不是说程序的运行速率就不重要了,相反在多核时代下,解决多核编程的问题已经是一个很棘手的问题。编程语言的最重要的范式其实还是应该是MOP(Market/Money Oriental Programming)市场的需求以及行业巨头的金元指引着技术发展的方向。
3.2 系统语言C & C++
在此我没有用C/C++这种常用的方式来表示这两种语言,因为C和C++可以说是两种完全不同的语言,尽管C++兼容C,而且名字上也很是相似。但是两者本质上却是不同的,区分它们本质不同的就是它们所支持的编程范式。C是纯粹的面向过程的结构化语言,简单灵活;C++则是支持过程式、面向对象式、泛型式、函数式等等的多范式编程语言,复杂强大。C和C++曾经是至高无上的王者,如今C语言愈老弥坚依然坚挺,C++稍显颓势但依然占据着一席之地。现在两者大都用在相对底层的程序开发,依然是高性能设计的首选,故称之为系统语言。
C是编程语言中的不老传奇,历经近40年发展。如今操作系统、编译器、数据库等系统级软件主要还是靠C语言开发的,在嵌入式开发领域也有着得天独厚的优势。C语言如此强悍,但是并不是说C语言就是万能的。我倒是觉得C语言只不过是找准了自己在编程语言中的合适位置以及合适的出现时机,当然不能否认C语言真的很优秀。编程语言是一步步发展而来的,因此无论如何结构化的编程语言都将会一直存在,除非计算机硬件发生根本性的大变革。而发展的潮流就选择了C语言,于是便成就了C语言的地位。C语言最大的特点是简单灵活,尤其是指针这把双刃剑的存在使其能够最接近底层硬件,而且最能符合面向过程编程哲学。当然C也有可以改进之处,但也都是不是缺点的缺点,没有触及核心的重大缺陷。况且C语言本身早已大规模的应用,再做改变的成本可能会更高,所以现在人们改进的大多是用C开发特定的库或开发框架。愈老弥坚的C在未来的日子里其地位无可撼动。
C++虽然兼容C,但是其本质却是另一种哲学:面向对象!而且C++还走向了另一个极端,那就是复杂!C++如今差不多是公认的最复杂的学习成本最高编程语言。C++走向复杂的原因我觉得它有点像是科学家研究的玩物,本来出身面向对象,出道后就兼容了C也就兼有了面向过程的编程方式,承袭了遭人诟病的指针引发的各种问题。当然C++对于C的改进也是有不少可取之处的。而C++实现的面向对象也是越来越复杂,甚至出现了不少的技巧性的东西。再后来C++又拥有了STL,开始支持泛型编程,深刻影响了后代语言对于泛型的实现。现在C++又具备了函数式编程的特性,呼之欲出却又频频跳票的新标准就将支持lambda表达式。当然C++可能还具备更多的特性,但是其复杂性可见一斑。C++如今虽不如从前那样风光,但是瘦死的骆驼比马大。而且在C把持底层开发,Java和C#把持企业级应用程序开发,Python、Ruby等动态语言在web开发越来越占风头的时候。C++依然有其自己的位置。那就是比较接近于硬件,对性能要求比较高,同时又需要更方便开发的系统级或应用级程序。而且C++如今在3D游戏方面还是无可替代的。原本传说中的C++0X标准,现在也不知道何年何月能够出来了,C++是由C++标准委员会而不是商业公司在背后推动的,因为导致C++的发展问题很不尽理想。当然我们还是相信首先C++一定会找准自己的在编程语言世界的位置的,其次C++将会以更强悍的姿态迎接未来的挑战。