冒号课堂§6.1:系统语言 - 编程入门网
+或D那样,能在栈(stack)上创建对象。栈对象有一个的特点,一旦超出其作用范围,便自动释放内存。在此之前会调用析构函数(destructor),后者继而调用释放资源的代码。”
几声叹息清晰可闻。 冒号课堂§6.1:系统语言(4)时间:2011-06-27 BlogJava xyz98冒号续道:“另一方面,尽管自动垃圾回收机制逐渐为大众所接受——据说C++0x也将部分地支持它——但这种机制也存在缺陷。比如一个Java程序如果在某一时段极耗内存,由于自动垃圾回收的不定时性,不能保证及时清理内存,可能会抛出OutOfMemoryError的错误。对于内存有限的系统或实时系统来说,这绝对是一个致命的软肋。C++不支持自动垃圾回收,正是基于这些方面的考虑。Stroustrup非常顾虑自动垃圾回收带来的时间和空间上的过多开销,并且担心它会影响C++完成其所肩负的底层任务。另外,千万不要以为有了自动垃圾回收机制就一劳永逸、万事大吉了。Java程序一样会有内存泄漏,其几率甚至可能比C++的更大,因为C++程序员对此更有戒心,而Java程序员大多被惯坏了,环保意识要淡薄得多。” 问号直奔要害:“您如何看待C与C++中的指针?” 冒号欣然接招:“指针是C与C++最大的特色,其他语言要么不支持,要么支持得有限。C与C++可以说是成也指针,败也指针。用得好可以是削铁如泥的神兵利器,用得不好则可能是自我毁灭的罪恶渊薮。但由于二者定位于系统语言,而指针对于底层操作是必不可少的。同样道理,二者的数据类型的转换比其他静态类型语言更自由,也是源出于此。” 句号总结:“能力越大,责任越大,风险越大。” “正是此意!”冒号重重地敲了一下桌子,“此话既适用于编程语言,也适用于程序员。至于C++缺少对自省功能的支持,也是因为追求效率,不愿在元数据上花时间和空间。说到C++支持的范式过多,程序员过于自由,代码不标准难维护,这就如同埋怨餐馆提供的菜式过多以致难以摆出一桌酒席一样可笑。最后,指责C++不是100%OOP的说法更是荒谬之极。OOP又不是金子,含量越高越好。试图把一切都装进OOP的箱子里的想法无异于削足适履。典型的如Java中的Math类,逻辑上压根儿就不存在什么Math对象,清一色的static方法和常量就是最好的讽刺。在C++中只要在math的namespace中定义一些自由函数就可以了,自然而简洁。作为一个佐证,Java于J2SE5.0引进了静态导入(static import)机制[6],不仅在形式上简化了调用代码,也在思维上容忍了非OOP的过程式。” 引号发觉:“您好像把对C++所有的责难都化解了。” “可恨之人必有可怜之处嘛。”冒号俗语反用,“其实C++仍有不少亟待改进之处,D语言就是很好的启示。D语言的提供了可控制的垃圾回收器;支持线程同步;支持动态数组(dynamic array);支持嵌套函数(nested function);支持契约式设计(design by contract);废除了C与C++ 中令人头痛的头文件(header file)等等。这些都是C++程序员梦寐以求的特征。” 逗号很奇怪:“为什么D语言名气这么小?” 句号吟道:“千里马常有,而伯乐不常有,大腕伯乐更稀有。” 众乐。 冒号拔高了调门:“既然系统语言主要为底层系统的开发服务,这就决定了它们的理念是:优化机器的时间而不是人的时间,优化机器的记忆而不是人的记忆;假设编译器是愚蠢的而程序员是聪明的,因此赋予程序员更多的权利、义务与责任。无视这种背景和理念而去与其他语言相较,完全是不着筋节,不值一哂。当然这并不排斥系统语言用于应用开发,尤其是C++和D语言。需要强调的是,常见的‘C/C++’的说法很不科学。C与C++虽有千丝 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |