我這里所說的高級語言是指最早的面向對象語言C++,Pascal等,后來的Smalltalk等,以及現(xiàn)代語言C#和Java,直到今天最新C# 4.0。注意:這里有2個C#,我沒有寫錯,理由稍后再說。
大家知道,C++是從C擴展而來,所以它既支持面向過程,也支持面向對象。作為最早出現(xiàn)的面向對象高級語言,在今天還有很重要的地位。但任何編程的人都會為C++及以往語言中指針頭痛不已。
隨后出現(xiàn)了Smalltalk等純面向對象語言,這個不了解,一筆帶過。
20世紀90年代,出現(xiàn)了Java。Java的出現(xiàn)可謂競艷四方,以至于以后N年穩(wěn)坐排行榜首位。我想,之所以有這樣的結果,最重要的就是Java中沒有了指針,讓程序員徹底從錯綜復雜的指針中解脫出來,大大提升了開發(fā)效率。這時候第一個與今天主題有關的概念出現(xiàn)了——指針消失。
Java之后不久就有了C#。最早的C#既有Delphi的優(yōu)良血統(tǒng),又到處包含Java的影子。不過初生的C#顯得過于稚嫩,直到2.0才完成成熟。個人認為C#是非常優(yōu)秀的現(xiàn)代編程語言,但它還在傳統(tǒng)面向對象的范圍內。
最近幾年,相對于Java的老態(tài)龍鐘,蹣跚不前,C#一直蓬勃發(fā)展,先后經(jīng)歷了3.0,3.5,直到最新的4.0版本。此時,我們驚奇的發(fā)現(xiàn)C#中多了諸如Lambda表達式,LinQ,動態(tài)編程,無類型等非傳統(tǒng)面向對象,甚至是破壞面向對象的元素。而這些元素或多或少的都讓我們的開發(fā)效率有所提升,也使得C# 4.0與2.0隱隱有巨大的不同。
再考慮到近年來不斷涌現(xiàn)的各種編程技術和思想,比如SOA,AOP,CMS等等,漸漸的我們發(fā)現(xiàn),我們正在離傳統(tǒng)編程中關注的概念越來越遠,甚至可以不用考慮。
現(xiàn)在看來,這些傳統(tǒng)的概念包括指針,基本數(shù)據(jù)類型,操作符,多線程等。指針在Java,C#語言中已經(jīng)消失,那么下一個消失的特性會是哪一個呢?我想可能會是基本數(shù)據(jù)類型,也可能是操作符,更有可能是多線程。
基本數(shù)據(jù)類型:基本數(shù)據(jù)類型之所以會消失,并不是想指針一樣用不著,而是不會像現(xiàn)在一樣用的那么頻繁。比如也許有一天,我們不用聲明一個Person的類,里面包含一個表示年齡的Int字段。
操作符:現(xiàn)代編程語言有很多的操作符,如一元運算符,二元運算符,三元運算符或者數(shù)值類,邏輯類等。這些操作符雖然提升了運算性能,但也帶來的程序的復雜度,讓程序員關注了更多不必要的內容。而未來這些可能消失,我們根本不用關心位運算,數(shù)值運算。這樣子,程序員只用關系自己需要實現(xiàn)的業(yè)務邏輯就行了。
多線程:多線程從出現(xiàn),到今天,其學習和使用的代價已經(jīng)減少了很多,而我認為這些進步還不夠,因為我們還糾結在同步,異步,鎖等亂七八糟的概念中,甚至還有并行計算。而這些與我們要解決的業(yè)務邏輯根本沒有直接的關系。如果沒有這些,相信我們的開發(fā)效率可以提升N倍,軟件性能可以提升N倍。這是一個廣所熟知的問題,所以未來有一天,多線程可能真的會消失。
最后總結一下,文中所說的消失并不是真正意義上的消失,而是猜想未來有一天,基本數(shù)據(jù)類型,操作符,尤其是多線程/并行計算可能像今天的指針一樣,有個如同GC一樣的東西自動管理實現(xiàn)。以上純屬個人YY,也歡迎大家來拍轉。