【51CTO独家特稿】TIOBE近日公布了2012年6月份的编程语言排行榜,本月排名前两位的仍是C和Java,呈较好上升趋势的依旧是Objective-C。依旧排在第四的位置,并且近一步拉近了与C++的距离。C++虽依旧排在老三的位置,相比之下,还是有少量的减少。由此可见Objective-C具有很大的发展空间。
Objective-C流行的主要原因可能是它是***一种可以为iPhone和iPad等基于iOS系统编程的语言。但单从编程语言的角度来看,诞生于1986年的Object-c并没有表现出多少新意。然而Objective-C却又是非常“实际”的语言。
大家先看看2012年6月的编程语言排行榜的榜单
Objective-C是非常“实际”的语言
它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。不过令人欣慰的是在Apple发布的xCode4中已经支持自动释放啦,我不敢冒昧地说那是垃圾回收,因为两者机制不同,在xCode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,是不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加那些以前你经常写的[NSObject release]。
虽然Objective-C是C的母集,但它也不视C的基本型别为***级的对象。
和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。
Objective-C和C++的比较
单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。
在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk 看来无误的程序拿到Simualr 67那里就无法通过。
从很多方面来看,C++和Objective-C的差别,与其说时技术上的, 不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者声称既然程序设计出色何必再要灵活性(谎话!),而Smalltalk学派则辩称为了灵活可以容忍运行时多出错(也是谎话!)
#p#
前10名编程语言走势图
20到50名语言排行
下面是第50到100的编程语言排名
ABC, bc, Boo, C shell, cg, CHILL, CL (OS/400), Clean, Clojure, Cobra, cT, Curl, Dylan, Eiffel, Euphoria, F#, Factor, Gambas, Go, Groovy, Icon, Informix-4GL, J, JavaFX Script, JScript.NET, LabVIEW, Lingo, Magic, Modula-2, MUMPS, NATURAL, Oberon, OCaml, Occam, OpenCL, OpenEdge ABL, Oz, PL/I, Q, REXX, S, SPARK, Standard ML, SuperCollider, Tcl, VBScript, VHDL, X10, xBase, XSLT
下面给出了编程语言类别的一年变化趋势
【2012年榜单回顾】