当今移动开发炙手可热,以iPhone、Android、WP和Symbian、Bada等几大系统瓜分天下。
而相关的开发语言成为进入移动圣殿的钥匙,它们是:Objective-C、Java、C#和C++。
先来看看7月份的编程语言排名:
在来看看8月份的排名:
大家看到了,排在前五名的是C、Java、Objective-C、C++和C#。经常关注语言排名的童鞋应该惊诧的发现,
Objective-C在7月份竟然超过了C++位居前三甲了。是的,这是历史上的第一次。TIOBE编程语言排名依据世界范围内
软件工程师、课程和厂商的数量,通过计算得来。这足以反映了语言的流行程度。说起这四国语言,不得不说一下排在
第一位的C语言,原因大家应该是心知肚明,C是四国语言的始祖。这么说应该是不为过的。
C语言
C语言与Java的排名之争持续了数年,2012年C语言已经成为霸主几个月之久了。足以看见C语言是深受广大程序员喜爱的一门语言。
说起C语言的来历,其实也是历史的必然,是水到渠成的。它并不是突然降临的。
20世纪60年代,一个划时代的ALGOL语言问世。说它是划时代,是因为它是第一个结构化程序设计语言,也被称作A语言。
1963年,剑桥大学的科学家通过A语言发展出CPL语言。
1967年,剑桥大学的Martin Richards将CPL简化,成为BCPL语言。
1970年,贝尔实验室的Ken Thompson对BCPL进行了修改,产生了B语言。而第一版的UNIX系统就是用B语言编写。
1972年,贝尔实验室的Dennis Ritchie在B语言的基础上做了进一步的改进和发展,设计出了一门新语言,这就是C。
1978年,贝尔实验室正式推出了C语言。而Dennis Ritchie和Brian Kernighan合著了著名的《The C Programming Language》,
史称"K & R C",K 和 R标准的C语言。
1989年,C语言被ANSI标准化。这就是ANSI C。
2000年,ANSI C 确立后,之后是没有多少改变的。直到2000年2月,ANSI采用了ISO的C99标准。
2011年,新的ISO标准发表,这就是C11.
从C语言发展的世界表可以看出,C语言一经推出、确立后,改变是很少的。这样就出现了一个现象,C语言的程序员凭着积累,慢慢的终成大师。
C语言的繁荣,对软件业界影响深远。很多程序语言都是从C语言发展而来的,让我们先来看看两个直系亲属:C++和Objective-C。
C++
1979年,贝尔实验室的Bjarne Stroustrup对C语言进行改进和扩充,为了满足程序的复杂性需要和便于大型软件开发的特点。此时为“C with classes”(带类的C语言)。
1983年,“C with classes”改名为C++,并引入了新特性。
1985年,发布第一版《C++编程设计语言》。
1989年,发布Release2.0.同时引入了一些新特性。
与C语言一样,一个语言的标准化进程是非常重要的,这样杜绝了方言的产生,对语言的发扬光大起到了重要作用。
下面列出几个几个标准化:
1998年,对应C++98。
2003年,C++03。
2007年,C++TR1。
2011年,C++11.
C++包含了C的全部特征、属性和优点。在业界影响至深。在移动领域,Symbian和Bada的开发语言都采用了C++,这种Native语言运行的速度是非常快的,较之Java和C#有着运行速度的优势。虽然今天的手机配置越来快高,速度越来越快,但这样还是弥补不了Java和C#的速度之痛,在游戏领域,这点是令人诟病的。另一方面,C++的开发速度就并不能和运行速度相比了。C++,在很多人眼中是很难的,尤其在界面方面。而Bada系统提供的UI库是非常容易使用的,而Symbian后来的版本都加入了Qt库的支持,这点相信大家都知道,Qt库就是做图形界面出名的,在业界如雷贯耳。这两方面都弥补了C++在手机领域开发速度的不足。相信大家用上之后都会觉得不错。
Objevtive-C
这门语言是很传奇的,就像已故的乔帮主一样。从我个人的理解上,Objective-C是跟乔帮主分不开的,虽然它并不是乔帮主发明的语言。
1980年代初,这个时间段与C++相仿。Brad Cox发明了Objective-C。
1985年,Steve Jobs(被我们俗称为乔帮主)被自己创立的Apple公司“开除”(这个词不恰当,但也描述了事实),成立NeXT公司。
1986年,发布《Object-oriented Programming, An Evolutionary Approach》作为Objective-C最主要的语言描述。
1988年,NeXT 获得了Objective-C的授权,并开发出了Objective-C的语言库和NEXTSTEP开发环境。
1994年,NeXT和Sun联合发布了针对NEXTSTEP的标准典范,称为OPENSTEP。
1996年,Apple收购NeXT,NEXTSTEP/OPENSTEP环境成为Apple操作系统的基础,此开发环境的该版本被Apple称为Cocoa。
Objective-C被推出后数载,一直是默默无闻的。在C++的光芒下,人们并不知道有Objective-C这个C++的兄弟存在。Objective-C的流行程度是微乎其微的。甚至在语言排行榜上看不到踪影。看看这个对比图:
在2007年,Objective-C终于出现在人们的视野里,因为那一年iPhone发布了。短短的五年时间里,iPhone在移动市场上无坚不摧,乔帮主发起了一场革命。这场革命革掉了手机霸主Nokia的命,革掉了老牌劲旅Moto的命,而给Objective-C带来了新生。短短的五年时间,Objective-C从排名47的冷门语言变成了今天排名第三的炙手可热的大热门!
如果你是其他语言的行家,后来才去学习Objective-C,那么你会发现这门语言是很有意思的,很多地方都与你原来的习惯不同,因此被称作火星语言。
目前正在学习的是Objective-C 2.0.
Java
Java语言是由Sun公司设计的,其中代表人物是James Gosling。可以说,Java是由C++、Objective-C等语言发展而来的,是C的第二代传人。
1990年代初,Sun开发了Oak,目标定位于小型系统如家用电器等领域。这是Java的雏形。智能电器领域的发展没有预期的好,不过,Sun公司却赶上了互联网的大潮。
1995年,Sun看好互联网应用,将Oak改造适应互联网的Java并正式发布。Java坐上了互联网的快车,发展更是迅猛。可以说,Java的发展跟互联网是分不开的。此后Java语言的发展顺风顺水。
1996年,JDK1.0诞生。
1997年,JDK1.1发布。
1998年,J2EE发布。这是Java的企业平台版本。
1999年,Sun发布Java的三个版本,就是现在定型的J2SE(标准版)、J2EE(企业版)、J2ME(微型版)。
2000年,JDK1.3发布,随后不到一个月,JDK1.4发布。
2001年,Nokia宣布发布支持Java的手机。J2EE1.3发布。
2002年,J2SE1.4发布,Java的运算能力大幅度提升。
2004年,J2SE1.5发布,这是Java重要的里程碑,遂又将J2SE1.5称作J2SE 5.0。
2005年,Java SE 6公布,随之而来的是Java版本的更名,取消2字:J2SE 就是Java SE ,以此类推。
2006年,JRE6.0发布。
2009年,Sun被Oracle并购。
2011年,发布Java SE 7。
Note
JDK:是Java Development Kit的缩写,译为Java开发工具包。里面包含了各种类库和工具,以及另一个JRE。
JRE:Java Runtime Envirenment,Java运行时环境。是Java运行所必须的环境的集合。
最后要感慨一下,
Java的大热没有给Sun公司带来可观的经济利益;Sun公司的领导人手中握着Java这个强大的武器,并没有找到经济利润上的可持续发展道路,这点真是令人叹息。Sun被Oracle并购也两年多了,此间的传闻不断,其实这是Oracle在使用Java这个武器时发出的声响。以后Java在Oracle旗下如何发展,我们拭目以待。而在Android中,Java的使用上面,Google与Oracle也是摩擦不断。当时Android选用Java作为主要开发语言也是看到了Java的用户群,但现在Android的开发人员居世界之首,Google应该不会把Oracle放在心上的。开发应用程序,多数是用Java。而开发底层的,C还是少不了。还有很多人,要进行Java和C的混合开发。
C#
微软的C#与Java的语言相似度高达80%以上。这是前人帮我们总结的,所以,我们学习C#应该是很轻松的。
C#可以说是C的第三代传人了。
当Java借助互联网大潮大肆攻城掠寨之时,微软才发现自己晚了那么一步。但是出击还是及时的,也算是亡羊补牢吧。
2000年,微软发布C#语言的第一个预览版本。
2002年,伴随着.NET的正式推出,C#1.0正式版才与观众见面。
2005年,.NET 2.0 随着VS 2005的推出,C#2.0也正式与观众见面。
2007年,.NET 3.5 、VS 2008以及C# 3.0一起问世。
2010年,.NET 4 、VS 2010 及C# 4.0问世。
2012年,就在今年,.NET 4.5、VS 2012 和C# 4.5就要问世了。
C#是专门为.NET平台设计的,这种原生的基因,保证了C#以后的健康发展。C#是跑在.NET运行时中的,这种机制与Java和Java虚拟机是相同的。运行速度并是它的软肋,可是开发速度是它所擅长的。在WM时代,C#开发的应用程序要比C++开发程序快很多。但是需要运行速度的程序对此还是不满的,因为在Android中可以用Java+C/C++混合编程解决速度瓶颈,而WP7中只能用C#开发,不支持原生C++开发,这一点据说在WP8中改善了。
C#是易学易用的,初学者很容易上手。.NET库有着十分完备的文档(MSDN),学习曲线还是很平滑的。
总结
历史是向前发展的,知识是向后传承的。
下面的一幅图描述了这部分编程语言的继承关系:
参考文献
1、TIOBE编程语言排名网站
2、维基百科网站
3、钱能 《C++程序设计教程》
4、薛园园 《C语言开发手册》