关于GC in C++,欢迎使劲拍砖。。。

20 views
Skip to first unread message

怀宇范

unread,
Nov 14, 2007, 1:46:19 AM11/14/07
to pon...@googlegroups.com
写了一点关于GC in C++的看法:
http://www.cnblogs.com/duguguiyu/archive/2007/11/14/959178.html
大家多提意见,我也好更好的总结一下。。
谢谢了:)

--
bool ContactMe(person you)
{
   if(you.GoTo("14#344, Tsinghua") && you.Find("Fan Huaiyu"))return true;
   if(you.MailTo(" dugu...@gmail.com ") || you.MailTo(" fan...@mails.tsinghua.edu.cn "))return true;
   if(you.PhoneTo("13488810330") || you.PhoneTo("01062778689"))return true;
   if(you.QQTo("120628812") || you.MSNTo("dugu...@hotmail.com"))return true;
   if(you.NetTo(" www.cnblogs.com/duguguiyu "))return true;
   return false;
}

pongba

unread,
Nov 14, 2007, 2:01:32 AM11/14/07
to pon...@googlegroups.com
看完了,相当赞的一篇啊:-)

既然是来拍砖的,就不客气啦,提几个我想改进的地方:

1. Motivation部分,对GC的好处阐述不够。缺失两个地方:1)智能指针能够避免人肉管理,但智能指针为什么也不够好。2)在某些场合,GC是必须的,少了不行。用几个典型例子阐述这样的场合。我记得herb曾经说gc是保证类型安全的必要前提来着,不过当时没注意。既然你写这篇那我就捡现成的了:-) 还有尤其是涉及到回调的时候,没有GC,对象生命期管理就会很麻烦。列举几个典型的例子。
2. 人们(主要是非GC语言的程序员)对GC的害怕总结得很全面,后面在逐个分析的时候最好重复一遍针对的谬误,并加一个小标题,不然看着看着就lost了:-)
3. 能否在stop-the-world部分加入对concurrent gc的介绍?
--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba

莫华枫

unread,
Nov 14, 2007, 2:27:02 AM11/14/07
to pon...@googlegroups.com
pongba,你已经受bjarne的传染啦。:P
最好再加上一句:You concede too many myth。:-D
呵呵,不开玩笑了。我觉得可以再多分析一下排斥gc的心理。这样就更加offensive了。:)
好文一片啊。

在07-11-14,pongba <pon...@gmail.com> 写道:
看完了,相当赞的一篇啊:-)

既然是来拍砖的,就不客气啦,提几个我想改进的地方:

1. Motivation部分,对GC的好处阐述不够。缺失两个地方:1)智能指针能够避免人肉管理,但智能指针为什么也不够好。2)在某些场合,GC是必须的,少了不行。用几个典型例子阐述这样的场合。我记得herb曾经说gc是保证类型安全的必要前提来着,不过当时没注意。既然你写这篇那我就捡现成的了:-) 还有尤其是涉及到回调的时候,没有GC,对象生命期管理就会很麻烦。列举几个典型的例子。
2. 人们(主要是非GC语言的程序员)对GC的害怕总结得很全面,后面在逐个分析的时候最好重复一遍针对的谬误,并加一个小标题,不然看着看着就lost了:-)
3. 能否在stop-the-world部分加入对concurrent gc的介绍?
On Nov 14, 2007 2:46 PM, 怀宇范 < dugu...@gmail.com> wrote:
写了一点关于GC in C++的看法:
http://www.cnblogs.com/duguguiyu/archive/2007/11/14/959178.html
大家多提意见,我也好更好的总结一下。。
谢谢了:)

--
bool ContactMe(person you)
{
   if(you.GoTo("14#344, Tsinghua") && you.Find("Fan Huaiyu"))return true;
   if(you.MailTo(" dugu...@gmail.com ") || you.MailTo(" fan...@mails.tsinghua.edu.cn "))return true;
   if(you.PhoneTo ("13488810330") || you.PhoneTo("01062778689"))return true;
   if(you.QQTo("120628812") || you.MSNTo("dugu...@hotmail.com"))return true;
   if(you.NetTo(" www.cnblogs.com/duguguiyu "))return true;
   return false;
}





--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage



--
反者道之动,弱者道之用
m...@seaskysh.com
longsh...@gmail.com
http://blog.csdn.net/longshanks/

莫华枫

unread,
Nov 14, 2007, 3:07:13 AM11/14/07
to pon...@googlegroups.com
还有就是,我们宣扬gc的好处时,更应宣扬正确地使用gc。现在C++社群对gc的排斥很大程度上来源于java等对gc的滥用。比如,对于生命期确定的局部对象,就不应使用gc,而应使用栈对象等等。
最重要的是趋利避害对吧。:)

在07-11-14,莫华枫 < longsh...@gmail.com> 写道:

怀宇范

unread,
Nov 14, 2007, 4:13:18 AM11/14/07
to pon...@googlegroups.com
呵呵。。受教。。。
回调的我会加上。。这个场合就是是个好例子:)。。。
恩。。并发的。。再多写一点:)

怀宇范

unread,
Nov 14, 2007, 4:17:53 AM11/14/07
to pon...@googlegroups.com
恩。用GC还是要对自己的应用场景也很要的理解。。。
恩。。对我来说写 A a; 比写 A *a = new A()还是要简单的多:)。。能用栈对象的我还是喜欢使用:)。。
   if(you.MailTo (" dugu...@gmail.com ") || you.MailTo(" fan...@mails.tsinghua.edu.cn "))return true;

holmescn

unread,
Nov 25, 2007, 11:33:29 PM11/25/07
to TopLanguage
对GC的反感源于不是所有的情况下都要用GC,javaer好像对GC有莫名的好感,动不动就gc。
A a;不好吗?总是不好的吗?A *a=new a();总是好的吗?
没道理嘛。

lijie

unread,
Nov 26, 2007, 12:07:12 AM11/26/07
to pon...@googlegroups.com
各位上面举的例子似乎是栈分配和堆分配的的差异,不是GC的。实际项目中,区别栈还是堆上分配,主要是看它的大小、生存期的影响。对象太大或者当前函数返回前不能销毁的,都需要在堆上分配。如果需要要动态决定创建什么类型,自然也需要在堆上分配。

GC并不是非用不可。在C++里面我只想让它来完善std::string,string的实现通常是COW,要用到引用计数,引用计数本身也有矛盾,加锁影响性能,不加锁不是线程安全的。这时候GC就能发挥作用了,看看D语言的数组就很好用。其它方面我还没觉得GC的优势有多明显。

sean...@gmail.com

unread,
Nov 26, 2007, 2:09:15 AM11/26/07
to pon...@googlegroups.com
大家常说string iostream不好,能不能具体说下?

在 07-11-26,lijie<cpu...@gmail.com> 写道:

pongba

unread,
Nov 26, 2007, 4:28:30 AM11/26/07
to pon...@googlegroups.com


On Nov 26, 2007 3:09 PM, <sean...@gmail.com> wrote:
大家常说string    iostream不好,能不能具体说下?
对IOS的攻击主要集中于它的效率问题。iostream似乎运用了过多的继承以及缓冲区。
对string的攻击则主要集中于它的单片式设计,大量成员函数其实可以提取为可复用的自由函数。(string有一百多个成员函数。)

Googol Lee

unread,
Nov 26, 2007, 4:39:22 AM11/26/07
to pon...@googlegroups.com
对了,pongba,0x里有没有对iostream改进的意见?使用时总觉得iostream的有些思想很诡异,比如那个good和bad的准确含义,还有那个flags……

在 07-11-26,pongba<pon...@gmail.com> 写道:


--
新的理论从少数人的主张到一统天下,并不是因为这个理论说服了别人抛弃旧观点,而是因为一代人的逝去。

My blog: http://googollee.blog.163.com

red...@gmail.com

unread,
Nov 26, 2007, 5:33:44 AM11/26/07
to pon...@googlegroups.com
我觉得象 C++ 这种应用面非常广的语言, iostream 这种东西, 无论设计得多么复杂, 总会有一些领域(20%?) 觉得还是不好用, 并且 100% 的领域都会觉得 iostream 的设计复杂; 那20% 的领域,  想在原有的基础上扩充修改的话, 由于结构太复杂, 扩充也麻烦, 或者因为性能损失很难接受而抛弃不用.

这种情形下, 我觉得倒还不如将多数领域都要用到的集体功能设计进去, 将结构弄简单, 效率弄高, 各自领域自己还想要的, 自己派生扩充好了, 免得基本的东西太复杂, 太累赘.



pongba 写道:


On Nov 26, 2007 3:09 PM, <sean...@gmail.com> wrote:
大 家常说string    iostream不好,能不能具体说下?

莫华枫

unread,
Nov 26, 2007, 6:40:47 AM11/26/07
to pon...@googlegroups.com
现代C++似乎更倾向于"组装"式设计,减少继承。

--

Kyle M. Lee

unread,
Nov 27, 2007, 12:35:36 AM11/27/07
to pon...@googlegroups.com
red...@gmail.com 写道:

> 我觉得象 C++ 这种应用面非常广的语言, iostream 这种东西, 无论设计得多么
> 复杂, 总会有一些领域(20%?) 觉得还是不好用, 并且 100% 的领域都会觉得
> iostream 的设计复杂; 那20% 的领域, 想在原有的基础上扩充修改的话, 由于
> 结构太复杂, 扩充也麻烦, 或者因为性能损失很难接受而抛弃不用.
不过,还是有人,公司在用iostream的。我见到的用的比较好的,比如像日志,
xml对象,asn.1对象的输出等,都用的流来实现的库,非常好用的说。自己扩充这
部分很方便。实现一个stream接口就可以了。主要流的概念不是被各个公司的技术
大拿看好,所以各个是否采用的决策不同。

>
> 这种情形下, 我觉得倒还不如将多数领域都要用到的集体功能设计进去, 将结构
> 弄简单, 效率弄高, 各自领域自己还想要的, 自己派生扩充好了, 免得基本的东
> 西太复杂, 太累赘.
>
现在的趋势确实是简单就是美。产生原因,偶以为大致是两个,人和市场:
1. 合作,协作,团队开发。
现在参与项目的人数空前变多了,世界人口也在涨,呵呵~代码首先写给普通人看
的,而不是给大拿看的。大拿现在写代码也会尽量写的简单易懂,免得成天被小弟
烦,呵呵~

2. 软件开发,发布的周期变短。
要求软件的模块组合性的提高,这个要求接口有良好的弹性和组合特性。这个也从
另一个方面说明现在的解释性语言吃香的原因。现在是快鱼吃慢鱼的时代,而不是
大吃小。

holmescn

unread,
Dec 10, 2007, 10:10:41 AM12/10/07
to TopLanguage
如果用smart_ptr加上memory_pool这样的东西,性能会怎么样呢?
不过,好像更浪费内存............
Reply all
Reply to author
Forward
0 new messages