6月編程語言排行榜:Objective-C非常“實際”的語言
原創(chuàng)【51CTO獨家特稿】TIOBE近日公布了2012年6月份的編程語言排行榜,本月排名前兩位的仍是C和Java,呈較好上升趨勢的依舊是Objective-C。依舊排在第四的位置,并且近一步拉近了與C++的距離。C++雖依舊排在老三的位置,相比之下,還是有少量的減少。由此可見Objective-C具有很大的發(fā)展空間。
Objective-C流行的主要原因可能是它是***一種可以為iPhone和iPad等基于iOS系統(tǒng)編程的語言。但單從編程語言的角度來看,誕生于1986年的Object-c并沒有表現(xiàn)出多少新意。然而Objective-C卻又是非常“實際”的語言。
大家先看看2012年6月的編程語言排行榜的榜單
Objective-C是非常“實際”的語言
它使用一個用C寫成、很小的運行庫,只會令應(yīng)用程序的大小增加很小,和大部分OO系統(tǒng)使用極大的VM執(zhí)行時間會取代了整個系統(tǒng)的運作相反。ObjC寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和Smalltalk系統(tǒng)要使用極大的內(nèi)存來開啟一個窗口的情況相反。
Objective-C的最初版本并不支持垃圾回收。在當時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的“死亡時間”,令整個系統(tǒng)失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。不過令人欣慰的是在Apple發(fā)布的xCode4中已經(jīng)支持自動釋放啦,我不敢冒昧地說那是垃圾回收,因為兩者機制不同,在xCode4中的自動釋放,也就是ARC(Automatic Reference Counting)機制,是不需要用戶手動去Release一個對象,而是在編譯期間,編譯器會自動幫你添加那些以前你經(jīng)常寫的[NSObject release]。
雖然Objective-C是C的母集,但它也不視C的基本型別為***級的對象。
和C++不同,Objective-C不支援運算子多載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設(shè)多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執(zhí)行時間過重和二進制不兼容。
Objective-C和C++的比較
單一繼承:Objective-C不支持多重繼承,(同Java和Smalltalk),而C++語言支持多重繼承。
動態(tài):Objective-C是動態(tài)定型(dynamicaly typed)所以它的類庫比C++要容易操作。Objective-C 在運行時可以允許根據(jù)字符串名字來訪問方法和類,還可以動態(tài)連接和添加類。
C++ 跟從面向?qū)ο缶幊汤锏腟imula 67(一種早期OO語言)學派,而Objecive-C屬于Smalltalk學派。
在C++里,對象的靜態(tài)類型決定你是否可以發(fā)送消息給它,而對Objecive-C來說,由動態(tài)類型來決定。Simula 67學派更安全,因為大部分錯誤可以在編譯時查出。 而Smalltalk學派更靈活,比如一些Smalltalk 看來無誤的程序拿到Simualr 67那里就無法通過。
從很多方面來看,C++和Objective-C的差別,與其說時技術(shù)上的, 不如說是思維方式上的。你是否想更安全而舍棄靈活性?Simular67學派的支持者聲稱既然程序設(shè)計出色何必再要靈活性(謊話!),而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年榜單回顧】