[技术贴]语言的特性如何取舍

我最近在做的关于动态代理的研究时,常常会有这样的感觉。

比如JAVA本身就提供了Dynamic Proxy,而不像在DELPHI下,要用Thunk这样的技术去作复杂的处理。对于序列化,Java/.net也都有现成的实现。

这几天在实现Remoting的服务端时发现,需要一个HashMap,在DELPHI下就成了一件麻烦事。如果是C++,有现成的std::map可用,新的Java和.net也都有了对GP的支持,但是DELPHI(原生)没有。如果要仿照JAVA的擦拭法来模拟的话,又会碰到另一个问题:DELPHI没有GC,容易造成内存泄漏。而且DELPHI不支持在STACK中分配对象,所以也不能实现类似SmartPtr这样的东西。结果最后只好用多态实现,难看而且估计性能也不会好。郁闷啊~~

前几天在QQ群里讨论GC时,GrayMemory提到关于C++总是想把别人有的好的特性都加进来(当然主要还是通过库,而不是修改语言)。其实别的语言也一样,程序员总是不知足的。

语言磨砺了我们思维的方式,也决定了我们思考的范围。

现在对大师的这句话是更加有体会了。

曾经也以为不同的语言不过是语法的不同,现在看来,那只是在同一类型的语言范围内成立的观点,对于不同类型的语言,差别有时是本质的。

比如最近正在学习的Python,对于这类的动态语言,OO的思想已经与传统的C++/JAVA很不一样了。像OO中一些经典的DIP之类的原则,已经不重要了,AOP也是很自然的事,GP也是不必要的,更不用说那些设计模式了。

然而有得必有失,动态语言的性能还是一个很重要的问题。

8 Replies to “[技术贴]语言的特性如何取舍”

  1. 晕,那次被b4得很惨拉.BS说,java迟早要加入很多特性而变得复杂。现在来看,还没有完全到那一步。不过已经有些复杂了。python不是很清楚。不过对于效率问题,我总觉得和”oo语言”和C来比较虚机制实现的效率问题类似,要想达到相似的效果,可能为此而设计的语言反而经常处于优势。

  2. 所以我认为,多语言融合是一个非常值得研究的课题。其实要将一个语言扩充成“全能”的既困难又无必要,可以考虑将不同的语言有机的融合到一起。比如Java现在就有Groovy这样的脚本可以简化开发,又可以跟Java很好的融合。那么,Python是用C语言开发的,能不能将Python之类的语言变成C/C++的脚本语言以在较高层面上简化开发呢?我认为这个问题十分值得考虑。

  3. 语言是要各有所长,但在应用中有时就需要不同的长处,所以如令狐所说,需要一些技术(像JAVA和Groovy)能够把不同的语言高效地整合起来。^O^

Leave a Reply

Your email address will not be published. Required fields are marked *