荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: cay (忧郁的年头), 信区: Program
标  题: “恶魔和梦魇的私语2(一篇关于语言的对话转载) ”
发信站: 荔园晨风BBS站 (Thu Jan 10 10:40:28 2002), 转信

本文转载自CSDN,snowfalcon(原作)
//////////////////////////////////////////////////////////////////
恶魔吹着笛子来:
这是我对myan的回信(注是〈关于软件开发的务虚主义对话(1)〉的最后一封信)
,里面表达了我对oo和gp的初步的一些想法当然还不是很成熟。

梦魇:
恶魔从软件开发成本来看待人们对开发语言和工具的选择与评价,确实是让我耳目
一新,却又难以完全接受的观点。
////////////////////////////////////////////////////////
Myan你好:
    很抱歉那么晚才回复你的来信,这两封信我等待的很久(有点夸张:) )急切希
望得到你对我的GP观点的看法。因为说道gp我也是门外汉 仅仅是这几天在csdn上
参与你们讨论的时候才知道的。说老实话到现在GP的程序基本没有写过,
    STL也仅仅是耳闻但是没有时间去学习。我仅仅从你们对GP和oo的讨论中逐渐
摸索出一点粗浅的看法,所以急于想得到你这位GP专家的验证.当然我也很高兴我
的看法能够得到GP圈子的专家的认同。所谓Python的GP其实也仅仅是我臆造出来的
东西,在python中依然以ood/oop为主导没有gp这种说法也没有人这样做。我仅仅
是看了你们对gp的讨论以后,联系到我正在学习的python突然来了一个灵感:
python动态语义的功能或许可以实现 gp。但是我想了两天但是都是在类似于
java.utily的继承兜圈子。后来我看到python
.org上有一片介绍Mixed_in技术的文章。这才让我豁然开朗只要利用python这种可
装配类的概念肯定可以用python来实现一种别有风味的GP。所以由于python刚学所
以编查资料边调试程序用一个晚上给你写了一个bubble sort的sample
    你说你以前是一个语言主义者,很不幸在我大学二年级的时候我曾经也是语言
主义者。 甚至可能比你更加低级,认为vc是最好的开发工具对mfc以外的东西都一
概排斥。经过半年以后逐渐改变了看法,认为问题不在于那种语言更加先进仅仅是
用那种语言实现成本更加低而已。我想成为一个语言主义者是一个程序员必然经过
的过程。因为初学编程的程序员会投入太多的沉没成本(sink cost)学习语言的精
力和时间的成本无法收回。当然sink cost越高越是能够阻吓新竞争者的进入(程序
员) 。Bjarne不是说过么"我设计c++语言的目的就是要让程序员有饭吃".当新的技
术新的语言出现使得sink cost越来越低,那么BBS上对程序语言的"文攻武卫"就会
越来越多。
    你说GP没有出路或者说出路目前还不明朗,但是我不 同意这样的看法。我觉
得GP的出路目前 就很明朗。我想没有必要把所有的东西都变成万能钥匙。GP既然
在抽象算法和数据结构上有独到之处那就应该让他在设计Componet&Module上发挥
应有的功能至于描述世界那是oo的任务我们没有必要 无限扩展他的功能只要够用
就好。我们应该记住,OO的混乱和繁琐最大的更本原因在于滥用。 用oo去写
Componet就是杀鸡用牛刀。
在你另外一封信中谈到对目前oo江河日下的问题。我有两点看法
1.     这里删除200字(主要我觉得第一个看法大家并不能够接受也不一定看的
懂)
2. 如果从需求定律的角度来讲oo的江河日下未必不是一件好事情。过去十几年
ood/oop的设计开发成本一直下降,那就很容易推测,用oo设计和编写的程序的平
均质量应该下降了。
ood/oop设计开发的成本原来非常高昂,粗制滥造的程序便没有回报。现在,不管
需求大小,oo编程设计的成本都非常低,所以越来越多低质的设计和程序得以出现
。这并非表示oo的能力下降了,而只是表明设计编写“较低劣”程序的成本下降了
。设计编写成本下降的本身,使得所有类型的程序都增加了。不过,低质量和高质
量程序编写成本同时下降,会使得低质的设计和编程的份额增大,因为现在设计那
种程序有了回报。质量更低的东西让人们多了一些本来没有的选择,因为质量更低
的东西,其价格也更低。应该说多一些低质量的东西,比
少一些低质量的东西更好。同时,质量更高的东西也更容易得到了,尽管高质量东
西比低质 量东西的比例下降了。 今天OO良莠不齐,甚至江河日下的现象,从需求
定律的角度来看,倒是一幅令人宽慰的图景。

另外你提到Ada语言,我以前也有耳闻。今天我到网上找了一下,时间仓促只找到

sigada83的spec。看了以后我觉得ada的确是一个很优美而且很健壮的语言。但是
我发现了
一个问题可能也是Ada不那么流行的原因,ada不支持类型扩展和动态编连(至少我
看的ada83版本是这样不知道ada95有没有改进).我想ada的失败的原因大概就是在
于此把。好了写着写着就发现写了那么多东西。希望不要有废话,也希望sina的服
务器稳定一点好让我快点看到你的来信
祝好
Ian.King

/////////////////////////////////////////////////////////////
恶魔吹着笛子来:
这封信我把话题扯到java的gc上去了。 不过还给他起了一个绰号叫梦魇。是不是
很cool呀。
///////////////////////////////////////////////////////////

Hi 梦魇:
sorry你的中文名字在微软拼音里面出来了这两个字。第一我觉得很cool,第二我
想不错恶
魔对梦魇的确满配(怎么像是Diablo哈哈:)).
今天我翻了翻你在csdn上的专栏,读了你几片文章。觉得你在c++/gp上的确是一个
专家。但是当我读到<垃圾收集机制(Garbage Collection)批判 〉我觉得你是发射
了一只射向java的箭虽然箭是有力的。但它都没有瞄准java的本质,所以只能呼啸
而过。
你讨论的java的gc的弱点是只有程序空闲gc才会回收资源。
第一我不知道sun公司的那些人是怎么回答这个问题
第二我觉得在jvm的性能问题上sun公司绝对没有发言权他们除了夸耀 java在他们
昂贵的sun服务器运行的如何好其他一概不知道。
我做过一段时间的java的performance tuning专门负责Java的Memory Leak(这个
leak和你说的问题不同)。这个问题如果是我来回答的话.答案是这样的1.JVM的GC
线程可以不中断程序运行2.Sun的JVM在性能上是比较差的他的内存回收算法存在着
巨大的问题
第一jvm的gc线程的确不需要中断程序的运行采用-Xingc参数可以把gc的停顿时间
减小,如 果你有双cpu你可以用xingc把gc线程挂接到一个空闲cpu上从而使得gc不
中断程序运行。
第二Sun的jvm的性能是很差的,如果你采用ibm的jvm你就会发现他的性能是sun的
三倍。而且基于ibm的独特算法它的jvm中的gc中断程序运行得时间比sun短5倍左右
特别是在AIX平台 上ibm的jvm可以做到异步gc根本就不需要中断程序运行的功能而
sun公司还只是在java1.4.1 的计划中提到异步gc功能。
java的gc一方面是解决了大部分memory leak的问题但是更加重要的一方面是防止
内存的错误操作而宕机。Java的gc的确不是很成功,因为java的jvm和操作系统相
互独立导致了性能的缓慢但是那仅仅是一个开端,随着.net的出现os捆绑Jvm的方
案将浮出水面,性能越来越好 的gc将会出现.net的gc比java的更加灵活更加快速
大概速度是java的10-20倍。
当然java不是没有memory leak,其实memory leak还是存在的而且java的memory
leak的出现将比c++的memory leak,更为可怕,更为隐秘,调试的难度更大。其中
 一个典型例子就是在一个生存周期很长对象中new出的内存在这个长周期对象中没
有释放以前是不会释放的。
如果要指出java的缺点的话,在我想到可能有以下几点。
1。能够快速方便安全的建立一个应用,但是如果程序有严格的性能要求的话那么
花在最后为 这个程序进行优化的成本将是建立应用的两-三倍
2。gc机制将导致程序员写出更加不严谨的代码,使得程序的性能大大降低。根据
我的经验
java的80%的性能问题来源于程序员过于依赖gc机制而写出的低效率的代码因此我
的观点是如果用java书写依赖于成型的服务器的插件(像servlet,jsp,ejb)的话,性
能还是能够接受的。如果用java自己书写服务器程序的话需要花费很多时间去做优
化。
Ian.King

////////////////////////////////////////////////////////////////////////
//
恶魔吹着笛子来:
以库的方式实现gc,我想这是对我认识的一个比较大的转变。后来仔细审查boost
中的share_point和stl的auto_ptr的代码感觉到的确这是一个即安全又高效但是又
相对简单的方法。但是我个人比较
偏爱auto_ptr原因是实现比较简单。

梦魇:
    除了std::auto_ptr之外,boost库中提供了scoped_ptr和shared_ptr。有了这
些智能指针的帮助,我们在程序里能够避免绝大多数资源泄漏问题。但是,仍然对
于程序员提出了很高的要求。
//////////////////////////////////////////////////////////
SnowFalcon兄:
你好!
看了你对Java GC性能的分析,非常钦佩。我对于JVM没有实质的认识,那篇文章是
从网上看到各种争论后总结而成的,偏重原理分析,而纯理论的推论,在实践数据
面前,肯定是苍白无力的。事实上,有一点可能你不知道,对于资源问题,我一直
是赞成GC解决方案的。因为如果GC设计的好,其性能应该超过基于reference
counting的smart pointer。但是我的观点是,GC必须是可控的,召之即来,挥之
即去。因此,我赞成以库,而不是核心语言的机制来呈现GC。目前C++正在着手处
理此事,boost.org中已经有个一个标准多线程库。相信在200X版C++中,这个问题
会有比较好的解答。
其实我写这篇文章,倒不是说要打击Java。只是就事论事。Java如此缓慢,长此以
往,是要吃大亏的。宣传攻势可以成功一时,却不能长久。围绕Java和.NET的泡沫
实在太多了,以至于我现在根本不愿意去过多的谈论他们。还是等泡沫散去,在行
评论吧。我并不打算去追逐风潮。事实上,我的观念里一直有一种逆反思维,当所
有人都冲向一个方向时,真正的机会往往在另一个方向上。所以我跟你谈到Ada,
这种语言适合于开发极为可靠、高效率和长寿命的大型系统和嵌入式系统。我觉得
这恰恰是未来中国软件市场上一个重要的需求。只可惜现在我没有精力分心出来系
统学习,而且恐怕也很难找到足够的Ada学友。
  看了你的几封mail,的确有很大的启发。比如你提到Java GC机制对于程序员的
纵容,谈到OO的滥用,确实切中要害。我现在越来越觉得,纯技术在实际软件开发
中的作用是有限的,技术人员的素质和团队的管理,实际上远比技术重要得多。你
从经济学的角度分析软件技术发展趋势的思路,也是非常独到的。希望更多地听到
你的观点。这个星期我非常繁忙,到下个星期一,会告一段落。到时候希望能再和
你好好谈谈。我希望能帮助你更多的了解目前存在于C++中的GP实现机制,然后由
你从自己的独特视角分析一下这个方向的发展趋势和前景。

孟岩
10/19

--

        放弃是最容易的事

        Email: caiji@163.net          QQ: 80123

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.168]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店