我这里所说的高级语言是指最早的面向对象语言C++,Pascal等,后来的Smalltalk等,以及现代语言C#和Java,直到今天最新C# 4.0。注意:这里有2个C#,我没有写错,理由稍后再说。
大家知道,C++是从C扩展而来,所以它既支持面向过程,也支持面向对象。作为最早出现的面向对象高级语言,在今天还有很重要的地位。但任何编程的人都会为C++及以往语言中指针头痛不已。
随后出现了Smalltalk等纯面向对象语言,这个不了解,一笔带过。
20世纪90年代,出现了Java。Java的出现可谓竞艳四方,以至于以后N年稳坐排行榜首位。我想,之所以有这样的结果,最重要的就是Java中没有了指针,让程序员彻底从错综复杂的指针中解脱出来,大大提升了开发效率。这时候第一个与今天主题有关的概念出现了——指针消失。
Java之后不久就有了C#。最早的C#既有Delphi的优良血统,又到处包含Java的影子。不过初生的C#显得过于稚嫩,直到2.0才完成成熟。个人认为C#是非常优秀的现代编程语言,但它还在传统面向对象的范围内。
最近几年,相对于Java的老态龙钟,蹒跚不前,C#一直蓬勃发展,先后经历了3.0,3.5,直到最新的4.0版本。此时,我们惊奇的发现C#中多了诸如Lambda表达式,LinQ,动态编程,无类型等非传统面向对象,甚至是破坏面向对象的元素。而这些元素或多或少的都让我们的开发效率有所提升,也使得C# 4.0与2.0隐隐有巨大的不同。
再考虑到近年来不断涌现的各种编程技术和思想,比如SOA,AOP,CMS等等,渐渐的我们发现,我们正在离传统编程中关注的概念越来越远,甚至可以不用考虑。
现在看来,这些传统的概念包括指针,基本数据类型,操作符,多线程等。指针在Java,C#语言中已经消失,那么下一个消失的特性会是哪一个呢?我想可能会是基本数据类型,也可能是操作符,更有可能是多线程。
基本数据类型:基本数据类型之所以会消失,并不是想指针一样用不着,而是不会像现在一样用的那么频繁。比如也许有一天,我们不用声明一个Person的类,里面包含一个表示年龄的Int字段。
操作符:现代编程语言有很多的操作符,如一元运算符,二元运算符,三元运算符或者数值类,逻辑类等。这些操作符虽然提升了运算性能,但也带来的程序的复杂度,让程序员关注了更多不必要的内容。而未来这些可能消失,我们根本不用关心位运算,数值运算。这样子,程序员只用关系自己需要实现的业务逻辑就行了。
多线程:多线程从出现,到今天,其学习和使用的代价已经减少了很多,而我认为这些进步还不够,因为我们还纠结在同步,异步,锁等乱七八糟的概念中,甚至还有并行计算。而这些与我们要解决的业务逻辑根本没有直接的关系。如果没有这些,相信我们的开发效率可以提升N倍,软件性能可以提升N倍。这是一个广所熟知的问题,所以未来有一天,多线程可能真的会消失。
最后总结一下,文中所说的消失并不是真正意义上的消失,而是猜想未来有一天,基本数据类型,操作符,尤其是多线程/并行计算可能像今天的指针一样,有个如同GC一样的东西自动管理实现。以上纯属个人YY,也欢迎大家来拍转。