在Mingw中Build Python Extensions- -| 回首页 | 2005年索引 | - -在Cygwin下的幸福生活

冗余的New

关键词java    python    new                                          

据说软件设计的最高境界是“面对这个设计,你不能再减少什么。”,也就是如爱因斯坦所说“As simple as possible, but not simpler”。

Java和C#就是2种打着简化C++语言设计大旗的两种语言,但是它们显然离上述“减之一分则太少”的设计美学标准还差得远。

比如说,这两天我就对这2种语言中的new关键字看得不顺眼,因为它完全是一个不必要的冗余设计。

先从C++说起,假设我们定义了一个class Foo,那么按照下面两个不同的语句定义的变量是完全不同的:

Foo bar=Foo();

Foo bar=new Foo();
  

其不同就在于前者bar的存储空间是栈,而后者bar的存储空间是自由堆。前者的析构由编译器自动完成,而后者析构需要程序员显式用delete完成。在C++中,newdelete总是成对出现是一个基本的常识。

到了java和C#的世界里,关于存储管理有两件大事发生了:1,除了primitive type之外的所有类型变量都在堆中分配;2,自动垃圾收集代替了程序员手工delete。后者打破了C++中的new和delete对称,即使从美学的角度看也是遗憾的事情。

更重要的是,从实用角度看在java和C#中new本来也是可以废弃的!这是因为既然没有了栈变量,那么

    Foo bar=Foo();  和 Foo bar=new Foo();

就可以表达完全相同的含义而不会带来疑义。你说什么?“可能和原生类型混淆”?别扯了,Java和C#的编译器会弱智到用new来区分原生类型和class类型吗?

关于我这个说法的一个佐证就是,同样作为没有栈变量并采用自动垃圾收集的语言,Python就不需要new关键字。相信我,Python没有因为这个原因而完蛋!:)

【作者: leochensh】【访问统计:】【2005年11月18日 星期五 10:39】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3560429

博客手拉手

[2005-11-13 20:22:23.0]    Java方法的标准定义格式

[2005-11-17 00:10:45.0]    开始学习python

[2005-11-16 20:01:59.0]    java学习点滴积累(一)

[2005-11-10 15:06:31.0]    JAVA基本事項(コメント)

[2005-11-12 21:23:25.0]    java 范型编程的简单测试

回复

评论内容: