Java的GC实际上是JVM中的一个独立线程,采用不同的算法策略来收集heap中那些不再有reference指向的垃圾对象所占用的内存。但是,通常情况下,GC线程的优先级比较低,只有在当前程序空闲的时候才会被调度,收集垃圾。
您目前的位置 >>
首页 >>最新经验
本文根据发表在CUJ Expert Forum上的两篇文章编译而成。实际上Design Pattern并非一定是晦涩难懂的,通过生动的例子,一个中等水平的C++学习者完全可以掌握基本用法,在自己的编程实践中使用,得到立竿见影的功效。这两篇文章就是很好的例证。
大师们为了展示STL能力的范例,不应该作为日常编程的榜样。而过度强调编码技巧,正在使C++一步步远离普通程序员。当所有“菜鸟”都抛弃一种语言的时候,就算“大虾”们的技巧再高超,也只能自娱自乐。我认为这篇文章是一声呐喊,虽然不够响亮,但是是难得的一声呐喊--
traits重要,是因为此项技术允许系统在编译时根据类型作一些决断,就好像在运行时根据值来作出决断一样。更进一步,此技术遵循“另增一个间接层”的谚语,解决了不少软件工程问题,traits使您能根据其产生的背景(context)来作出抉择。这样最终的代码就变得清晰易读。
Bjarne 成了STL的强有力支持者. 很多人都通过建议、更改和修订的方式给予了帮助。Bjarne干脆跑到这来跟我们一起工作了一个礼拜。Andy更是无时无刻的帮助我们。C++是一种复杂 的语言,不是总能搞得清楚确切的含义的。差不多每天我都要问Andy和Bjarne C++能不能干这干那。
STL使用了大量复杂艰深的C++特性, 加上STL本身的复杂和庞大, 使得阅读代码本身就成为一件非常困难的工作. 以下文字是我在学习STL过程中得到的一些经验和猜测, 希望能对大家有所帮助, 更希望能得到大家的批评和指正, 以利于我们的共同提高。
C++是不是已经过时了呢?其前景如何?标准C++有怎样的意义?应该如何学习?我们不妨看看B. S对这些问题的思考。以下文字是译者从Stroustrup1998年之后发表的若干文章、谈话笔记中精选出来的。
GNU的C++代码书写规范,C语言之父Dennis Ritchie亲自修订。
有人可能会质疑我对“复用性”的重视不足。因为传统OO的一大立足点。对此我不予否认。我认为目前很多程序员对复用性问题不是考虑不足,而是考虑过度。尤其是应用程序员,花费太多的精力去让自己的组件满足未来可能的需求变化,很可能是在浪费时间。
这个组织最出名的成果是所谓的MISRA C Coding Standard,这一标准中包括了127条C语言编码标准,通常认为,如果能够完全遵守这些标准,则你的C代码是易读、可靠、可移植和易于维护的。最近很多嵌入式开发者都以MISRA C来衡量自己的编码风格。
对于一个C++程序员,你可能跟我一样觉得.NET很有趣,C#当然是一个不错的选择。但是,C#有点“傻瓜”。对于很多人来说这是好事,我们并不希望所有的人都被拖到机器层次上。但是如果你想要那种最终的能力,而且你有把握运用好,那么C++/CLI就是你的选择,此外别无他选
事件处理机制是C++及其后继者(Java、C#)的最大软肋之一。本质上是因为C++当年的选择,把对象之间的普通消息传递用成员函数调用给解决了。成员函数调用快是够快,但是导致了消息发送者与接受者之间的紧耦合。
1. 必须对IT这一行有兴趣,才考虑加入或者坚持留在这个行业。2. 在技术上成功没有一定规律可循,可谓条条大路通罗马。但是失败就有定规,那就是两面讨好。在如今Java与.NET大战的时代,选择哪一条道路,只要坚定走下去、百折不挠,就能成功,如果朝三暮四,就一定失败。
我一向不赞成走印度道路,因为印度模式是最适合印度的软件发展模式,中国不是印度,当然不能走印度道路。但是印度成功的经验是可以借鉴的。印度人遵守纪律,于是就主攻业务类软件,接单定制,合同开发,建立超大型的软件企业。
在MDA层面的专家看来,如今爆发在J2EE和.NET阵营之间的论战实在可怜。今天那些意气风发的论战者,那些把宝押在某一个千秋万代、唯我不败的平台上的幼稚的人,迟早会发现,要么是脚下的浮冰崩溃,要么是各个平台趋同,毫无区别可言。
今天所有的程序员都被教育要在子程序的层次上进行模块化。有些幸运者掌握了在抽象数据类型(ADT)层次上的模块化能力,就已经被认为是好的设计者了。如今的设计模式运动,就是希望把这个层次再提高一步,发现那些有助于对程序大型结构进行良好组织的成功的设计抽象。
如果各方面对于契约都做到很好的遵循,那么真正发生异常的时候,我们大可以比较有把握的说,这可能是一个很偶然的事件导致的。比如说网络环境下,另一个用户在那一瞬间突然对文件实施了一个操作,或者硬件的一次偶然异常。对于这种情况,“再试一次”成了合情合理的选择
虽然Eiffel所倡导的Design By Contract在表象上不过是系统化的断言(assertion)机制,然而在背后,确实是完全的思想革新。正如Ivar Jacoboson所说:“我认为Bertrand Meyer的方向——Design by Contract——是正确的方向,我们都会沿着他的足迹前进。”
分析的妙处在于,通过分析可以将较复杂的对象划分为较简单的对象。 比如2和3就比5简单。单独研究2的性质,再单独研究3的性质,再通过简单的求和,就可以把握5的性质。把复杂的东西划分成若干简单对象的和,对各简单对象搞各个击破,再加起来,复杂的东西也就被掌握了。
编程语言与软件系统一样,处于不同层次。层次越高,对人越友好,控制机器的能力越差;层次越低,控制机器的能力越强。选择开发语言时,根据需要解决的问题选择合适的语言层次,是非常必要的。

