作者:孟岩 来源:CSDN博客 酷勤网收集 2007-12-01
前不久CSDN刊登了一篇《C语言已经死了》的文章,引起了一些争论。其实那篇文章是从Ed Burnette的博客上转载来的,原文题目是“Die, C, die!”,直译过来应该是《去死吧,C!》,表达的是一种诅咒,而不是判断。翻译称《C语言已经死了》,显然是一种煽风点火的误读。CSDN网友对于其观点已经进行了批判,不过坦率地说,由于这些批判基于一个扭曲的翻译文本,所以不但没有什么新鲜的地方,而且也没有抓住原作者的重点。
实际情况是这样的,最近一段时间,在国外的技术社群里刮起了一股风,不少人在讨论Java做为C语言替代者而成为最主流的基础软件编程语言的可能性。从大部分人发表的观点来看,对于Java替代C的趋势还是支持的。
基础软件是指这样一类软件,其主要任务是把计算机的潜能充分发挥出来,面向上层应用软件提供一个高效、可靠的功能集。这些软件会被密集地调用,性能上的一点点滞后都会在实践中被成百上千倍的放大。所以对于基础软件来说,性能至少与可靠性一样重要。我们在一些基础软件的源代码里,常常看到一些丑陋的设计,看到一些变态的黑客技巧,在其他的领域里,这是不被鼓励的,但是在基础软件中,这就是合理的,可以接受的。
C语言目前仍在一些领域里坚挺,在操作系统、虚拟机和设备驱动程序开发方面,它可能是永远的王者。但是在其他的基础软件领域,比如数据库、网络服务器、图形图像处理等,C语言继续占据霸主地位的原因其实只有两个,一是快,二是熟悉的人多,而且经验丰富。
但是这两点现在都遭到了挑战。
首先是速度。Java的执行速度在JDK1.4的时候达到了这样一个水平,就是对于一个一般水平的开发者来说,他写的C++程序已经不再比对等的Java程序跑得更快了。随后的JDK 5.0和6.0进一步提高了执行性能,由不同的组织举行的多项评测结果表明,Java与C语言的整体执行效率差距在一倍以内,也就是说,素以速度著称、并且为了速度放弃了很多东西的C语言,现在比装备齐全的Java只快不到一倍了。这还不算,如果考虑到新的计算环境,C语言的速度优势有可能仅仅是一个错觉。因为,世界上只有很少的人有能力在多CPU计算平台上用C语言写出又快又正确的大程序,在这些人中间,又只有很少很少的人有能力用C语言写出一个在大型的、异构的网络环境下能够充分发挥各节点计算能力的大规模并行程序。也就是说,你也许有能力把程序效能提高一倍,从而充分发挥一台价值6000元人民币的PC的计算潜力,为客户节省1000元钱。但如果是在一个由1000台机器组成的大型异构网络并行计算的环境下,你写的C程序恐怕性能还会远远低于对应的Java程序,更不要说巨大的后期维护成本,而由此带来的损失可能是1000万或者更多。
其次是经验。很多人都宣称自己的C功力如何如何了得,但是实际上,即使是真正的C高手也不得不花相当可观的时间来寻找并且调试错误,尤其是内存方面的错误。大部分用C写的上规模的软件都存在一些内存方面的错误,需要花费大量的精力和时间把产品稳定下来。这还没有把安全方面的缺陷考虑在内,现在大部分的开发者在代码安全方面的知识都很薄弱,安全漏洞在代码中相当普遍,而在C语言中,这一不足暴露得格外明显。最大的挑战或许得说是并发问题了,并发是一个很复杂的问题,需要在相当高的抽象层面上解决,而C语言的抽象机制过于简单,提供不了高层的抽象,因此在开发者只能从一些“并发原语”出发去构造并发程序,这跟用铅笔刀锯大树没什么分别,直截了当地说,大部分C程序员根本没有能力编写高效无缺陷的并发程序。
所以残酷的事实是,当一个人说自己的C语言如何了得,经验如何丰富时,非常可能他说的是,自己在用C语言写单机、单线程的,不会遭到外界攻击的,在时间预算上没有什么压力,而且用户能够忍受一个很长的产品稳定期的应用程序方面非常有经验。遗憾的是,市场环境和计算环境已经完全变化。面对更复杂的计算环境,用C语言来编写高质量的大规模软件,是只有真正的专家团队才能完成的工作。如果你曾经有过连续数日苦苦追踪和调试一个内存泄露、或者线程错误的经历,你就会明白,你可能不是这样的专家。
相比之下,Java在抽象机制、基础设施、安全和并发方面,与C语言比起来,就好像是马克沁重机枪对弓箭。比如并发,Java 5.0加入的java.util.concurrent包,可能是目前主流语言中对于并发问题最强有力的支持库。Java的内存管理和安全机制,也已经被实践证明确实能够有效地减少程序的缺陷。这也就是那篇诅咒文章的原文的意图。
所以,我的态度明确的,我认为Java替代C是一个进步的想法,不过世界上进步的想法很多,能够美梦成真的却寥寥无几。Java是否真的能够在基础软件领域强有力地替代C语言呢?我看至少短期内还做不到,原因如下:
1. 人的问题。能够用C语言写出优秀基础软件的人固然不多,能用Java写出来的人恐怕更少。Java有好几百万开发者,但是他们在干什么?大部分是去搞企业级开发、Web开发了,有多少人真的理解Java的内存模型?有多少人能够熟练使用concurrent包中提供的那些工具?很多使用Java多年的人没有写过socket程序,不了解Java多线程的开销,不清楚如何进行性能诊断和调优,而这些在写基础软件的时候是必备的技能。大部分Java程序员在刚刚学会Java之后就转向Web开发,把主要精力花费在掌握一个又一个大型的、复杂的、具有厚厚的抽象层和华丽结构的frameworks上,不但对真实计算机体系结构不清楚,对于Java虚拟出来的那个计算环境也不清楚。因此,要把Java社群编程转变成能够担负起下一代基础软件开发工作的尖兵,不但难度很大,而且必须花费足够的时间。
2. Java的内存消耗太大。对于系统级程序来说,内存消耗大,就意味着cache命中率降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的。现在很多人还是觉得Java慢,主要的原因已经不是Java跑得慢,而是由于内存消耗过大导致的综合性能下降。这个问题不解决,Java就只能用来做一些比较上层的基础软件。也许随着计算机硬件的发展,这个问题会逐步得到解决?
3. 风格的问题。这个问题我认为是最严重的。基础软件开发崇尚的是自由、直接、透明、简单、高效,要像匕首一样锋利,像战士一样勇猛,像农夫一样朴实,反对繁琐华丽的设计,反对架床迭屋的层层抽象,反对复杂的结构和不必要的灵活性。而Java社群多年来形成的设计风格与此格格不入,甚至可以说是对立的。Java在意识形态上是要面向企业应用软件的开发,所以特别强调架构,强调设计模式,强调标准,强调规规矩矩,强调高姿态,强调一种华贵的宫廷气质。在C中,你吃饭就是吃饭,捧起碗来喝酒,放下筷子骂娘,甩开膀子抓肉,撸起袖子抹油。而在Java中,你经常为了要干某件事,先new一个对象,然后以这个对象为参数new另一个对象,如此这般重复n遍,得到真正需要的对象,最后就是为了调用那个对象的一个方法,就好比吃饭时焚香洗面,漱口净手,战战兢兢,毕恭毕敬。在C中,遇到问题要像亡命徒,像流氓版程咬金,管你三七二十一,冲上去就是三板斧,还怕劈不死你丫的。在Java里,遇到问题要像宋襄公,要张榜檄文,要名正言顺,要礼仪之邦,要把架子拉开了,把谱儿摆足了。Java的口号是,不管劈不劈的死,先把你小子感动了再说。 这套繁琐的东西,对于基础软件开发来说,既不必要,也很难习惯。需要说明的是,这不是Java语言的问题,其实Java本身不必如此复杂、如此巴洛克。从语言本身来看,Java也可以是轻快直接的,也可是酣畅淋漓的。只不过十多年来几乎没有人这样用过,所以大家已经不知道:如果不来个一步三叩首,那么该怎么用Java写程序?
正是因为上面的这种种原因(可能还不全面),直到最近,第一流的基础软件几乎都还是C语言编写的,或者至少其核心部分还是以C为主。而且我认为,在短期内,这种局面不会有大的改变。当然,如果Java社群能够克服上面的这些问题,充分发挥出Java本身的优势,在基础领域开发出一大批一流的支撑软件,那么局面是可以改变的,而且这种改变也是进步的,值得欢迎的。
评论
liujin4049 发表于2007-01-14 11:21:08 IP: 59.61.85.*| 对java的批评写得还是比较生动的 |
#
prostar 发表于2007-01-14 11:45:40 IP: 218.94.8.*
| 不知道用Java如何写系统底层软件如BIOS之类的东西,难道要在计算机power on之后就搞个Java VM?? |
#
hacker47 发表于2007-01-14 11:52:39 IP: 220.179.170.*
| 如果用java代替c,那么用什么写java的虚拟机呢? 就好比,如果让人成为上帝,那么让谁来制造人呢? |
#
pongba 发表于2007-01-14 15:27:21 IP: 222.94.3.*
| 关于软件开发成本的论述我很认同,成本来自多方面,有时候效率根本不是主要考虑。 <blockquote> ... 而在C语言中,这一不足暴露得格外明显。最大的挑战或许得说是并发问题了,并发是一个很复杂的问题,需要在相当高的抽象层面上解决,而C语言的抽象机制过于简单,提供不了高层的抽象,因此在开发者只能从一些“并发原语”出发去构造并发程序,这跟用铅笔刀锯大树没什么分别,直截了当地说,大部分C程序员根本没有能力编写高效无缺陷的并发程序... </blockquote> C语言中的并发编程问题是源于语言对多线程内存模型没有内建支持,从而使得编写可移植的多线程程序变得不可能。C++也有同样的问题,不过C++社群正在积极解决。 除此之外,在C里面编写多线程程序和在Java里面一样,因为Java的内存模型也只是传统的Lock-based。Lock-based模型众所周知的问题就是粒度粗了会损伤效率,粒度细了又容易导致死锁。所以使用lock来编写并发程序是件非常tricky的事情。Java只不过提供了一些方便一些的库,如lock-free的ConcurrentHashMap,除此之外,没有本质区别。 另一个很有前景的并发机制就是STM(software transactional memory),目前在haskell等一些FPL中得到了初步实现,不过由于这个领域目前还是比较不够成熟(与lock-based相比),所以大规模投入商业应用估计还要一段时间。 此外,C语言的抽象机制简单与并发编程并无多大关系。实际上支持并发编程模型的语言如Java在语言层面也支持提供一点简单(虽然很tricky)的支持,从而让编译器能够“知道”多线程的存在;更高层的抽象仍然是由库来完成。所以把这个问题归结到语言的抽象层次上似乎不够准确。 <blockquote> ... 在C中,你吃饭就是吃饭,捧起碗来喝酒,放下筷子骂娘,甩开膀子抓肉,撸起袖子抹油。而在Java中,你经常为了要干某件事,先new一个对象,然后以这个对象为参数new另一个对象,如此这般重复n遍,得到真正需要的对象,最后就是为了调用那个对象的一个方法,... </blockquote> 似乎并没有这么夸张。即便有(如 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));这种),那也只是局部现象,似乎并不能立即得出普遍的风格或意识形态问题。Java事实上是一门完全实践派的语言。此外C语言程序员(并非指每个:))的过于dirty的作风似乎也未必就是好事,反正过犹不及就是了。相反,我认为Java里面的你说的这个风格问题是库的抽象及易用性做得不够好的原因,并不是多么严重的问题。 |
#
tgv_mic 发表于2007-01-14 17:51:02 IP:
| 看此文感觉有点怯怯的,想问一句:Java的竞争者C#怎么样啊? |
#
zhouhongyun 发表于2007-01-14 18:32:54 IP:
| 成本来自多方面,有时候效率根本不是主要考虑。 -----不是效率不效率,是做不做得出来,c能做的东西很多语言做不出来,就这么简单,我不说多了,在windows上面api hook其实是很普通的技术,而且应用也很广泛,稍微有点技术含量的软件基本上都要用到,可惜纯粹用java和c#是根本做不出来的,你让一群java程序员用纯java实现一个金山词霸,他一百年也做不出来,这样的效率怎么算,应该为零吧?? |
#
zhouhongyun 发表于2007-01-14 18:32:54 IP:
| 成本来自多方面,有时候效率根本不是主要考虑。 -----不是效率不效率,是做不做得出来,c能做的东西很多语言做不出来,就这么简单,我不说多了,在windows上面api hook其实是很普通的技术,而且应用也很广泛,稍微有点技术含量的软件基本上都要用到,可惜纯粹用java和c#是根本做不出来的,你让一群java程序员用纯java实现一个金山词霸,他一百年也做不出来,这样的效率怎么算,应该为零吧?? |
#
zengguowen1984 发表于2007-01-14 20:07:37 IP:
| 说的很好,楼主把JAVA是看彻底了。由于公司项目的关系,尽管我不想用JAVA但还是得用JAVA。在windows或上层应用软件JAVA是王者,在unix/linux下c/c++也是王者,一个东西在不同的环境会有不一样的效果产生,这也许就是语言的区别吧。 |
#
jihailong 发表于2007-01-14 20:13:19 IP: 58.57.103.*
| java已经走过巅峰了.................................. |
#
joyous 发表于2007-01-14 20:22:59 IP:
| 目前C在系统、核心及虚拟系统的开发方面是不可战胜的 JAVA在应用、服务层的确有很大的强势 |
#
missdeer 发表于2007-01-14 20:58:57 IP: 219.134.40.*
| 一直以来为脚本语言辩护的都会提出,效率问题,随着计算机硬件的发展将不成为问题。这其实是一种很不负责任的,误导初学者的荒谬言论。难道计算机硬件发展了,软件就一直不发展了,等硬件发展到可以让那些原本跑得不快的脚本程序跑快了,那些脚本程序也已经改成需要更快硬件的新版本了。看看Vista的硬件的需求……用JAVA写个QuakeIII出来啊…… |
#
uuq 发表于2007-01-14 22:02:56 IP: 221.218.38.*
| D语言出来了,别担心 到时java已死,估计也是他首发的 |
#
yaotong 发表于2007-01-14 22:22:22 IP: 121.25.69.*
| 你文中指的C语言,包括C++语言不? 请谈谈C++语言的未来. |
#
hai1039 发表于2007-01-14 23:32:19 IP: 221.11.48.*
| java有那么慢? gmdroc不是宣称java比汇编语言还要快2-3倍吗? |
#
phoenixsh 发表于2007-01-14 23:46:36 IP:
| 的确主要是成本问题。但是最主要的还不是有没有足够的开发人员,而是有没有动力去做。Java本来就是为了跨平台而设计的,基础软件并不是其目标。而且开发优秀的基础软件需要大量的人力财力,现有的基础软件又没有什么重大的缺陷,有谁会仅仅为了证明某种语言的能力而投入数千人年去开发新的基础软件?这就好比能源一样。大家都知道太阳能、风能什么的环保,可持续,但是世界上绝大多数的能源消耗还是来自石油。等哪天油价涨到二百美元一桶了,不知道会有多少机构去开发新能源。哎,说起来当年还说要开发Java芯片呢,现在都成遥远的历史了。现在是多核的时代。谁能充分发挥多核的威力,谁就是王者。 每个语言都有其适用的领域,没有必要为了证明语言的威力或者程序员的能力而硬要在不擅长的领域蛮干。该干嘛干嘛去吧。大家现在或者从前的头衔大概都带个“工程师”,就该讲究实用。 transactional memory的软硬件实现都还在探索研究阶段。这个为了性能而开发的技术,可是极度消耗内存的(听起来似乎有点矛盾吧?呵呵)。但是只要它能够充分发挥多核芯片的潜力,我决不会因为它消耗内存而抵制它。 |
#
dilisi 发表于2007-01-15 01:26:03 IP: 58.55.2.*
| java代替不了C,很简单的道理. 高中的物理知识代替不了大学的物理知识. |
#
lyanry 发表于2007-01-15 07:39:28 IP: 211.64.21.*
| 现在的现实世界都呈现多元化了,为什么计算机语言就不能多元化呢? 为什么总有人每天都在幻想要用一种语言去取代另一种语言,而不去考虑结合两种语言或结合更多的语言,去发挥所有语言的最大效用呢? 不管C是不是能写可以跨越1000台机器的程序, 如果这种分布式的程序在每台单机上运行的模块依然可以大量的用C来写, 在处理分布式功能时采用java或其他别的什么试图取代C的语言来写,这也未尝不可吧. 很多人都有些自私, 总是幻想用自己喜欢的那种语言去取代他所不喜欢的. |
#
julong88 发表于2007-01-15 08:57:17 IP:
| 作者写此文的目的无非有两点 1、看到了前几点驳来驳去关注度 2、此文还抓住了java的愤青,你看上面有不少的叫好者。但这部分人除了愤我看没别的 没想到的是每天坐在圣坛上大师也有忍不住寂寞的时候 |
#
mhmdanger 发表于2007-01-15 09:23:22 IP: 222.209.96.*
| 写得很不错,比较客观,不同的语言适合不同的环境,黑客界把c和java都作为应该学会使用的语言,说明他们都是很优秀的。 |
#
lgs666 发表于2007-01-15 09:26:26 IP: 222.182.2.*
| 现在很多人还是觉得Java慢,主要的原因已经不是Java跑得慢,而是由于内存消耗过大导致的综合性能下降。 -------------------------------------------------------------------- 对于一个贪婪的人来说,你不能怪他贪婪的本质,而要怪你,你给他的太少了。 哈哈! |
#
cime63 发表于2007-01-15 09:31:04 IP: 220.163.82.*
| 现在很多人还是觉得Java慢,主要的原因已经不是Java跑得慢,而是由于内存消耗过大导致的综合性能下降。 -------------------------------------------------------------------- 对于一个贪婪的人来说,你不能怪他贪婪的本质,而要怪你,你给他的太少了。 哈哈! ===================================== 同意 而且要多给,等内在达到1024T的时候,JAVA就会更快了 |
#
SBtoSB 发表于2007-01-15 10:04:18 IP: 219.136.164.*
| 没什么替代不替代的,这等于拿牛和马来比,没什么替代关系性 |
#
hertcloud 发表于2007-01-15 10:34:39 IP: 221.237.164.*
| 说了几十年 那个死了嘛 不同的 领域 用不同的东西。 |
#
Flwu 发表于2007-01-15 11:00:21 IP: 219.140.167.*
| 我看Java永远别想取代C, 倒是有可能利用C开发另外一种语言取代Java,比喻说.Net++ |
#
yevv 发表于2007-01-15 11:02:45 IP: 219.142.151.*
| 用Java语言开发基础软件,怎么开发呢?如果JVM算作一种基础软件的话,至少它就不可能用 Java来开发,如果要用Java来开发OS,显然OS需要运行在JVM之上,自然JVM的实现就要脱 离操作系统的支持,直接建在HW之上,想必这对JVM来说也不是件小事,对OS来说就更是盘古重 开天地,女娲再造人,这样的事不会是“姿势不对,起来重睡”那么简单,也不会是哪个 牛人嘴大一点就能解决得了的。 |
#
flydream1981 发表于2007-01-15 11:16:02 IP: 210.76.108.*
| 汗,你就不能做点有意义的事情么? |
#
Terony 发表于2007-01-15 11:37:29 IP:
| Java 是不可能替代 C 语言的。 |
#
pottichu 发表于2007-01-15 11:39:27 IP: 61.50.219.*
| 寒! 孟岩老师也来凑这个热闹,呵呵。 读过你翻译的书,非常不错, 支持一下,呵呵。 |
#
Analyst 发表于2007-01-15 11:52:12 IP: 58.38.155.*
| 呵呵,孟岩也来参与讨论了。 你的观点我基本赞同,在并行计算时代,C/C++肯定是不适合的,我不喜欢java的理由也主要是风格的问题,与我的实用主义原则是格格不入的,这方面.net要好很多,C#从1.0发展到3.0步调比java轻快的多,如果微软能够选择开放的姿态,.net的前途会很好。 |
#
mcs51a 发表于2007-01-15 12:09:29 IP:
| 什么是基础软件?hehe |
#
lnp 发表于2007-01-15 12:16:39 IP: 218.249.243.*
| 在并行计算时代,C/C++肯定是不适合的 -------------------- 为什么?java.util.concurrent 就很厉害? |
#
powpow 发表于2007-01-15 12:17:01 IP: 218.6.245.*
| 如果本地化编译器能完全支持jdk(gcj),这不是不可能的。现在java最大的弱点还是效率问题,作者说得java在1.4以上不比c差,其实从目前的java桌面应用的普及度就看得出来,这点儿java还有很长得路要走,我觉得根本解决java桌面应用的办法就是本地化编译,只可惜java生来就不是为了这点儿的。 |
#
mcs51a 发表于2007-01-15 12:23:26 IP:
| 跨平台,跨系统就那么重要? |
#
airu 发表于2007-01-15 12:40:33 IP: 222.221.7.*
| 好文章。说道风格的比喻太形象了。 |
#
longrenrex 发表于2007-01-15 13:05:49 IP:
| 写的不错,比较客观! CSDN 上面现在很难看到这样客观的文章了。 |
#
starwhisperer 发表于2007-01-15 13:29:43 IP:
| 呵呵,写得很客观,Java社区确实很偏重于构架,性能的考虑基本都是放在其次的。现在CSDN上愤青越来越多,像楼主这样沉着稳重的已经很少了,呵呵。 |
#
TourWind 发表于2007-01-15 13:30:12 IP:
| 写得不错,但楼主的题目容易让人误解。 应该是“JAVA替代C语言的主流地位的可能性”。 JAVA无法替代C语言,就像C语言无法替代汇编。但JAVA有可能替代C语言的主流地位,就像C语言替代汇编的主流地位。 |
#
flyfreely 发表于2007-01-15 13:34:49 IP:
| 不用说Java替代C语言了, 就是C语言取代汇编都不可能。 看看操作系统代码里面仍然是C语言加汇编就知道了, 经过十年以上的工业级发展的语言是很难被完全替代的。 |
#
ztanlee 发表于2007-01-15 13:34:57 IP: 210.51.173.*
| 领域不同,而且就写并发程序那一部分鄙人也不是很认同。并发性同现在一般都是从系统级去提升,而不是语言级 |
#
summersnowgieno 发表于2007-01-15 13:39:28 IP: 207.46.89.*
| 用Java替代C语言的可能性甚至没有没有我每天用汇编写日记的可能性大。鼓吹Java能够替代C语言的人一般都是既不了解C也不了解Java的,或者是有意哗众取宠,才说出这种可笑的言论。 |
#
huanzhugege 发表于2007-01-15 13:57:30 IP: 121.23.180.*
| 你拿Java与C比简直就像拿李小双与邓亚萍比一样,根本不是一个领域的东西。C是做基础系统开发的,基础系统不用去管什么可扩展性什么的,而Java是做业务系统开发的,面对的是千变万化的业务需求,必须考虑可扩展性等东西,所以拿Java与C比简直就是笑话。 |
#
cc555 发表于2007-01-15 14:03:23 IP: 222.66.73.*
| 如果真要说替代, 那也是c#替代c/c++,而不是java! |
chinamarcdata 发表于2007-01-15 14:32:38 IP: | 不懂c语言的家伙在呓语,还以为你的水平很高,呵呵,不过如此而已. |
#
floater 发表于2007-01-15 14:39:11 IP:
| 各自应用领域无交集,如何替代?如此误导,实在不该! |
codez 发表于2007-01-15 14:44:23 IP: 61.181.247.*| 算是一种鼓吹吧,文中对 java 似贬实捧,对 C 则是似捧实贬。 只考虑 java 长处,对于 C 的长处则不涉及谈论,比较有失公允。 没有人能对一门语言指手画脚,就是所谓的“高手”也是。 语言比较没有意义,很多人却乐此不疲。 简要概括:有病! 如果真要从功效性比较 C 更擅长,java能做的C能做,java 不能得C也能做。 虽然大部分学 java 的都是笨人和懒人,而且,本人既笨又懒,很可惜我不喜欢 java,虽然学过,但是没兴趣。 保留对 java 的评价,因为本身水平不够。只能说我不喜欢这门语言。 自己不能用 C 语言做到,不要说大家都不能做到。 关于 C 的讨论,大家都歇菜吧。各找各妈,各回各家,散了吧。 |
#
dragonbbc 发表于2007-01-15 14:51:13 IP:
| 高手就是高手啊,受教了 |
#
DarknessTM 发表于2007-01-15 15:11:34 IP: 60.12.8.*
| 不要忘了给JAVA铺平道路的是JVM,完成JVM的是C/C++!抹平硬件的区别,抹平OS区别的谁,绝对不可能是JAVA。或许随着硬件的发展,JAVA程序的速度会越来越快,可能快到现在的C/C++程序一样快,但是同时的C/C++程序会更快。通用和性能是没有任何一个东西可以做到双极的,只考虑开发效率而不注意运行效率是对用户硬件的不负责,永远也别指望JAVA能完全代替C/C++,除非CPU运算时就用的JAVA指令 |
#
lbx19822004 发表于2007-01-15 15:12:05 IP:
| 吃饭就是吃饭,捧起碗来喝酒,放下筷子骂娘,甩开膀子抓肉,撸起袖子抹油。 --- 这样子才是写程序的样子嘛,呵呵 其实用java写程序也并不是不能做到这些,关键是看我们对这门语言所掌握和理解的程度,至于是不是能够取代C,我想还是取决于java今后的发展和java使用者的水平。 |
#
rexfa 发表于2007-01-15 15:18:13 IP:
| 很多地方说道点子上了,俺们做单片机的兄弟(用C)因为设备稳定问题都上过第7日这个节目,被元元狠劈……现在很多年过去了 终于稳定了,可是这些设备打算淘汰了…… 工具就是合不合手的问题。 那个勇气号 据说是JAVA驱动的,不知道是不是真的 |
#
nightyoung 发表于2007-01-15 16:45:25 IP: 203.95.5.*
| 既然是种语言,就没有好坏之分.用的人多了自然交流起来比较方便.没有什么替代的说法. |
#
drpython 发表于2007-01-15 17:12:29 IP: 61.133.106.*
| 好文章,讲的很到位 Java早晚要被它这种华而不实的作风而付出代价 |
#
lesliewong2006 发表于2007-01-15 17:32:38 IP: 219.142.193.*
| 难得的好文章,顶一个 |
#
zhuyie 发表于2007-01-15 18:11:29 IP: 219.131.196.*
| 没有能解决所有问题的编程语言,要承认Java相对于C在软件开发生产力上的进步,也要承认它在效率(速度和内存占用)上改进的局限性。 |
#
yanonsoftware 发表于2007-01-15 18:17:09 IP: 219.239.35.*
| C的地位是永远无法取代的,就像你不能说汇编死了。底层的知识永远都是有用的。 至于更方便。。。。D语言不错,呵呵。 |
#
lijing1982916 发表于2007-01-15 18:34:17 IP: 218.79.83.*
| 其實任何語言的存在都有本身的價值,我不知道,這個主題拿出來討論有什麼意義,語言只是工具而已!! |
#
huyi 发表于2007-01-15 19:07:31 IP: unknown, 211.*
| 1.对于并发的问题,java.concurrent综合能力不见得比C++版的ACE中某些支持并发的元件强大。 不知道为什么大家都觉得java的并发能力很强,ace其实也不错啊,使用简单,跨平台,高效率,哪一点都不比java差。 恰恰相反,大部分专门做高并发型程序(像通讯服务器)的程序员,讨论C/C++的次数,肯定比提到java的次数多。 2.如果要说到差别,先举个例子: 对于某个要对应于10种平台的应用软件,有两种开发方案: 1)采用java做应用本身,然后采用c/c++在10个平台上分别开发JVM. 2)采用c/c++本身开发10个功能上一样,但对应10个平台的应用。 算起总账来还是第一种方案好些,复用性强。开发虚拟机虽然难,但可能别人都给你做好了。 3.还有一个差别,就是在于使用java和c/c++的人。 举个例子: 现在要开发一个高并发的,cpu占用率高的程序。该程序内存占用也高(1.5GB),现在要求设计一个容错处理机制,让使用这个程序的服务器在当机后在尽量不丢失内存数据的前提下恢复。 就是要求设计一个热备份机制。并且要求尽量不影响服务器。 长期java企业应用的人,这个时候可能会第一反应是在记忆中搜索有没有类库来完成,如果没有,又会去考虑要使用什么模式,要用什么架构来搞定这个问题,或者是怎么抽象出框架留出接口给其他“专家”。因为他们的信条是用架构和设计模式来搞定一切。但针对上面提出的问题,往往是未果。因为还是算涉及到了一些超出架构范畴的知识。 而长期从事c/c++开发的人,第一感觉可能会去分析什么因素会制约效率,普通io操作要使用cpu复制数据,所以当把内存中的数据dump到硬盘时,cpu不能应答客户的请求,从而降低了效率(当然这是从单核考虑),做java的大部分人可能都意识不到复制数据要通过cpu这个小知识点。但做c/c++的大部分都能意识到,知道DMA,以及基于DMA特性的技术。 一般作c/c++的人基础知识都比较扎实,哪怕是在java最骄傲的OOP方面。我做的一个极小范围的调查,调查中没有一个java程序员说出了怎么用设计模式去解决热备份的问题。但却有不只一个C++程序员提出了方案:在CPU完全空闲时完全备份,然后在这个备份点之后用Gof23的Command模式来录制关键的用户操作。恢复时先恢复最近的备份点,然后在这个基础上执行保存下来的command...... |
#
lxpbuaa 发表于2007-01-15 19:39:34 IP:
| 不错,比较客观,赞同文章基本观点 |
#
shadowstar 发表于2007-01-15 19:58:33 IP: 61.154.244.*
| 不是只有C和JAVA,还有很多其它语言呢!!! |
#
Sodier 发表于2007-01-15 20:52:04 IP: 218.193.181.*
| 搂主分析得很透彻啊,看来得多花点时间研究java语言基础性的东东了 |
#
stormful 发表于2007-01-15 21:06:01 IP:
| 什么样的东西,用在什么样的地方。这是基本尝试了。大家都知道的。我们每天都在使用C的产生物,从操作系统到MP3。根本谈不上什么替代不替代。C的难处在于成才率,JAVA的窘迫在于太泛滥。实在不敢恭维JAVA开发人员的平均技能素质。如果我是个人士主管,招聘JAVA程序工。如果我面对1个C熟练工和一个JAVA熟练工的应聘。我选择C熟练工,让他去学习JAVA。 |
#
ahzjg 发表于2007-01-15 21:56:06 IP: 222.240.216.*
| 在Java中,你经常为了要干某件事,先new一个对象,然后以这个对象为参数new另一个对象,如此这般重复n遍,得到真正需要的对象,最后就是为了调用那个对象的一个方法,就好比吃饭时焚香洗面,漱口净手,战战兢兢,毕恭毕敬。 --------- Java这样做是为了让自己的类库看起来简练,是decorator设计模式的应用 |
#
ahzjg 发表于2007-01-15 21:57:46 IP: 222.240.216.*
| 说替代太夸张了,也觉得不太可能。说在某些领域替代还是有可能的,因为Java确实可以让我们少考虑很多问题 |
#
superpingl 发表于2007-01-15 22:23:28 IP: 211.138.145.*
| 要是有可能的话,计算机的物理结构就要发生翻天覆地的变化。c是建立在物理基础上抽象的,而java是建立在操作系统上的虚拟机抽象。他们的本职是有区别的。有可能将java去抽象物理的东西吗?可以的话那就是第二个C++,这有必要吗?基础的东西还是要存在的,不要盲目的跟风,被老外个忽悠了。失去最核心的东西,不要忘了软件的基础是硬件。 |
#
gccr 发表于2007-01-15 23:40:19 IP:
| 我感觉,直接学Java的人,基础知识都非常的差,感觉对计算机好像没有什么本质的了解。 而且也没见过一个只学Java成为高手的人。所有的Java高手都是从C/C++ Delphi等过来的。 |
#
banyi 发表于2007-01-16 00:02:23 IP: 61.138.212.*
| c用来开发大型系统。其实我一直在想成本问题,是怎么样计算成本的呢?难道只用开发时间来计算成本? 很多时候我有这么个感觉,太多的不是成本问题,而是耐心问题,是对这个行当的热爱,且不浮躁的心态问题。这个技术人员我相信很大一部份人都有,可现实不允许。 实际上做什么,用什么做这个问题各有各说法。没有WOW,也许你根本不知道LUA(类似列子还有)。可是一个语言的流行也有很多条件,仿佛是先有鸡还是先有蛋的问题,可是耐心想一想你也许会理解为何WOW会选择LUA。 探讨问题需要工具,编程语言是我们的工具,用什么语言应该看你要探讨那些方面的问题。 开发应用程序也需要选择相适宜的工具,然而针对实际情况,如果你的系统要做的很扎实,很有效等等,并不是那些语言适合做的问题。 |
#
TrojanSckiss 发表于2007-01-16 00:35:52 IP: 222.90.174.*
| 举四爪赞成gccr同志,Java代替C?不要再开这种玩笑了,拜托. |
#
g9yuayon 发表于2007-01-16 01:14:50 IP: 199.246.40.*
| gccr同志好牛啊,一句话抽翻大多数美国大学和欧洲大学。您老人家指点方遒前是不是先到各个大学的网站稍稍浏览一下,看看别人的CS101用什么语言嗫?比如说,www.cs.uiuc.edu。比如说www.cs.washington.edu。至于UC Berkeley, Caltech, MIT什么的,还用更抽象更少用的语言,比如scheme。UofT则混用Java和Python。原来这些学校出来的银“基础知识都非常的差,感觉对计算机好像没有什么本质的了解。”。感觉顶个P用啊。做程序员的,该用数据说话不是?CS里的基础东西海了去了,谁说一定要从指针开始的?至于很多Java高手(说“所有”的人嘛,嘿嘿,嘿嘿,我就不说什么了)从C/C++/Dephi过来是不假。不过嗫,老大口气那么大,总该知道相关和因果的区别吧?有多少人要修炼10年以上才成为高手啊?Java出来几年啊?流行起来用了多少年啊?Java没出来前学校用什么做教学语言啊?判断什么因什么果,叫回归分析吧?要做回归分析,第一要素是控制相关因素吧?不用我饶舌了吧? 顺便说一句,Java流行前,很多大学也不用C做入门教学语言的,更别说C++了。那时候入校的银,是不是也属于不可救药的菜鸟?我靠,不就4年的入门么?说得跟抢鸡蛋似的。 |
#
werqqq 发表于2007-01-16 08:48:52 IP: 219.142.141.*
| 不认为JAVA能代替C |
#
baijigan 发表于2007-01-16 09:12:18 IP:
| 你们斗什么? 你们是java fans 就很光荣啊? 都是人家外国人的东西..... |
#
zhujun 发表于2007-01-16 09:20:47 IP:
| 春秋笔法,请问除了在企业应用方面,JAVA有什么值得称道的基础软件,几乎一个都没有! |
#
woso 发表于2007-01-16 09:36:56 IP: 58.60.231.*
| 比较的很透彻,也很客观 个人觉得,c或c++在并发上会是最大的问题 两种语言就像不同成分的人 c/c++就是农民,Java就是大学生 对于编写基于并发的基础软件, 与其要大学生下乡不如让农民学习点新技术更符合国情 |
#
lllyyy2403 发表于2007-01-16 09:51:48 IP:
| 作者讲得不错,只是好象将C与C++分开了,认为C++不是C,这在实践工作中使用C的人来说好象是不大可能的了。而采用C++写的大型程序我见的就多了,我现在就在调式一个500万行的C程序。 |
#
ifq 发表于2007-01-16 09:58:42 IP: 221.237.80.*
| 汽车替代摩托车的可能性是多少呢? |
#
silence_jiliao 发表于2007-01-16 10:09:23 IP: 221.217.85.*
| 我觉得语言倒无所谓,谁替代谁都很正常,但是基础知识还是相当重要的, 所谓说用JAVA不成的多半是中国的教育闹的,很多人根本就不喜欢编程这行,就为了多拿点钱,你想想, 用JAVA几行代码就能建立个socket开始通信了,这帮人是不是还有心思去了解字节序,TCP/IP协议,以及各个平台各种I/O模型的消耗等等? 上面有人说国外很多大学用java python等等,我认为也很正常,关注于实现某种算法的时侯就应该把细节问题放下,但是他们学操作系统,编译原理等课程的时候可能C/汇编学的也不错. |
#
Roc_fu 发表于2007-01-16 10:10:11 IP:
| 孟岩写的很中肯,那些钻牛角尖的评论意义不大 |
#
Mephisto_76 发表于2007-01-16 10:11:01 IP: 218.2.214.*
| C语言对多线程没有内建支持就不能写多线程程序了?那操作系统的多线程都是天上掉下来的?如果操作系统不提供线程操作原语,你用java能写出多线程程序来?我看未必。 C语言相对与java这些高阶语言来说也就是开发效率差一点,不能说C就不能作并发程序。说到底,大家最后都在汇编和0、1的档次上混。汇编提供对多线程的内建支持了?0和1这样的机器码提供对多线程的内建支持了? 现在很多人都不写代码了,脱离了实际,所以看什么事情都觉得很恐怖,不可能完成。但是我要说的是,当你一步步走过来,你发现虽然有很多艰难险阻,但是并不象你想的那样不可逾越。 有时间就想想“小马过河”的故事吧。 |
#
Mephisto_76 发表于2007-01-16 10:12:40 IP: 218.2.214.*
| 老外还在讨论那ruby代替汇编呢! |
#
db05s0511 发表于2007-01-16 10:34:51 IP: 219.223.240.*
| 写的不错,不过java还是不能替代C的! |
#
Pigwen 发表于2007-01-16 11:34:18 IP: 125.71.29.*
| 晕,为什么老是有人说用java来写操作系统一类的东西啊!! 作者说得很清楚了: -------------------------------------------------------------------------- C语言目前仍在一些领域里坚挺,在操作系统、虚拟机和设备驱动程序开发方面,它可能是永远的王者。但是在其他的基础软件领域,比如数据库、网络服务器、图形图像处理等,C语言继续占据霸主地位的原因其实只有两个,一是快,二是熟悉的人多,而且经验丰富。 但是这两点现在都遭到了挑战。 -------------------------------------------------------------------------- 我觉得java在web和数据库上确实有比较大的优势,如果都用c语言重头来开发,可能开发个服务就像开发个vista一样漫长~~ |
#
mooniscrazy 发表于2007-01-16 11:34:51 IP:
| 企业做软件要考虑成本和性能的平衡。该用什么就用什么。 用java,用c都不是问题。问题是有些程序员不敬业,不去花时间学该学的东西,却把时间花在证明自己所掌握的唯一的编程工具是世界上最好的编程工具这个伪命题上。 |
#
huyi 发表于2007-01-16 11:35:30 IP: unknown, 211.*
| 并不支持java做并发更强的观点。 再举一个例子: 实现xmpp3协议的著名服务器中,并发和分布式能力最差的恐怕就是java写的wildfire. c做的jabberd的并发能力和分布能力肯定比wildfire强。 这点做协议的可能都不会否认。 在wildfire上做一个100人的压力测试分析一下,再在jabberd上做一个1000人的压力测试对比一下,马上知道结果。 |
#
yulichao 发表于2007-01-16 11:48:39 IP: 58.20.53.*
| 写的很客观!文章很不错!C被替代是早晚的事情,可以这样想一下:你的CPU有100个内核,主频在100G左右,用Java编操作系统又如何?硬件的发展才是硬道理。 |
#
cber 发表于2007-01-16 11:57:26 IP: 222.66.83.*
| 在Java可以直接访问硬件接口之前,C就不会被它替代,不管它的编译技术能够发展到哪个层次都一样 并发是另外一件事情了,C/C++和Java的并发在本质上没有啥区别,只要写几个简单的wrapper(或者直接用ACE等现成的wrapper),我不觉得C/C++的并发程序会比Java的复杂;另外,Erlang的message passing和Haskell的STM倒是两个可以值得关注的地方 |
#
bluecoff 发表于2007-01-16 11:59:24 IP: 221.232.4.*
| 。也就是说,你也许有能力把程序效能提高一倍,从而充分发挥一台价值6000元人民币的PC的计算潜力,为客户节省1000元钱。 ----------------------------------------------------- 请问如果这个应用是在上亿台机上运行的通用软件,比如office,photoshop等,能为客户省多少钱呢? |
#
hnqhjjwgz 发表于2007-01-16 13:30:50 IP:
| 只要你愿意用c写个网站也可以,象dos下用c写个多任务是比较简单的。除非每个硬件厂家都在自己的硬件内支持jvm,否则java程序就没有办法运行。 c语言的简单性,为啥你们老是说他很复杂? 搞不懂,java一堆的类库,搞不懂就那么好? |
#
irplay 发表于2007-01-16 13:39:00 IP: 221.224.91.*
| 2007年,看到的一大笑话....C主要用来底层.....java主要用来jsp和java小游戏........风马牛不相关的事情....好事者,非要把他们对比下....java由于是越来越复杂...所以与语言发展趋势不符...必将淘汰....而现在的开源java是淘汰的一个开始... |
#
ltian999 发表于2007-01-16 14:36:30 IP: 61.150.106.*
| 没有C\C++虚拟机能出来吗?我现在用java语言,看源代码涉及到虚拟机部分的代码都不是java写的。 |
#
gccr 发表于2007-01-16 15:19:13 IP: 203.86.43.*
| 请问如果这个应用是在上亿台机上运行的通用软件,比如photoshop等,能为客户省多少钱呢? -------------------- Adobe真是赚疯了。 |
#
hidetowar 发表于2007-01-16 18:14:34 IP: 210.51.173.*
| 我觉得ACE做并发很不错。 而且很稳定。 |
#
killme2008 发表于2007-01-16 18:45:12 IP:
| # codez 发表于2007-01-15 14:44:23 IP: 61.181.247.* 算是一种鼓吹吧,文中对 java 似贬实捧,对 C 则是似捧实贬。 只考虑 java 长处,对于 C 的长处则不涉及谈论,比较有失公允。 没有人能对一门语言指手画脚,就是所谓的“高手”也是。 语言比较没有意义,很多人却乐此不疲。 简要概括:有病! 如果真要从功效性比较 C 更擅长,java能做的C能做,java 不能得C也能做。 虽然大部分学 java 的都是笨人和懒人,而且,本人既笨又懒,很可惜我不喜欢 java,虽然学过,但是没兴趣。 保留对 java 的评价,因为本身水平不够。只能说我不喜欢这门语言。 自己不能用 C 语言做到,不要说大家都不能做到。 关于 C 的讨论,大家都歇菜吧。各找各妈,各回各家,散了吧。 -------------------------------------- 一句话把大部分java开发者定性了,您牛,不是您水平不够,太够了,够得上去火星了。 呵呵,开玩笑,这文章不要被标题吓唬了 |
#
dadi0189 发表于2007-01-16 20:26:11 IP:
| 我接触的大多数java开发者以前都是门外汉,看到软件开发工资还可以就转行过来的,他们学一些java/.net,然后用别人的类库做做数据库应用程序,至于计算机底层如何去实现,程序效率如何他们全然不知! 汇编/c/C++是根本,那些拿着.net/java说明书用西方发达国家几家软件公司用C/C++开出来的类库或框架搞二次开发其实是没什么了不起的,说得不好听点其实你们是在学怎么用别人的产品! 如果C/C++在中国消灭了,那中国计算机彻底被国外奴役了! |
#
alexanda2000 发表于2007-01-16 21:55:43 IP: 121.32.194.*
| 哈哈,最后那段的比喻太生动了! |
#
swabc 发表于2007-01-16 22:14:59 IP: 125.119.168.*
| cache命中率降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的,这条使我受益了,以前从没看到过,今年刚学了计算机组成原理,有点理解了. |
#
_17708668 发表于2007-01-16 23:13:25 IP:
| 没意思。这个鸟问题我去年就想过了。小孟不知是做什么的。这个问题取决于 Java 能否从整体上显著降低设备软件开发成本,包括对已有软件的代码更新,固件对 jme 的支持成本以及是否需要,开发技术的普及等,java 注重安全性,但嵌入式开发一般直接涉及看得见的产品,更多地注重产品可靠性,稳定性与成本 ----一台空调或一个冰箱,我想不出它需要 java 安全性的理由。 |
#
loweek 发表于2007-01-17 09:06:40 IP: 61.153.1.*
| 不用用C,也不会用JAVA,但觉得,C更像DIY,很多东西要自己做,而JAVA只是别人帮你做好了很多。 不知道说的对不对 |
#
qujun_xa 发表于2007-01-17 09:28:28 IP:
| 其实我感觉java也是c/c++的升级版本而已,只不过在结构上多了个jvm思想用于夸平台。而c#其实就是java的升级版本,只不过把jvm换成了.net framework。 这个过程就像是人的成长进化,c是小孩,c++是少年,java是中年,c#就再年长点。 年少的干活快,有激情,在单位里都是基层人员,做“底层”。 年长的沉稳,做的东西键壮,在单位里都是高层,做“高层”。 让年长的能做年少的事,会太慢,但也能很做的很好,反过来,年少的做年长的事,会太不稳定,要“出事”。 |
#
playmud 发表于2007-01-17 09:33:46 IP: 211.94.130.*
| 作者不懂没关系,但是请不要不懂乱说,请自重。 用比喻去作为依据评论两种语言,即无趣也不幽默,是非常肤浅的事情。效率的问题往往不是语言本身造成的,计算机的架构,硬件的限制,业务逻辑的不同往往才是制约性能的原因。单纯去比较一个循环,一个调用的速度没有什么意义。 最后再忠告作者一次:戒骄戒躁,别忘了自己是干什么的。 |
#
qmwneb321478965 发表于2007-01-17 09:35:23 IP:
| 成本来自多方面,有时候效率根本不是主要考虑。 -----不是效率不效率,是做不做得出来,c能做的东西很多语言做不出来,就这么简单,我不说多了,在windows上面api hook其实是很普通的技术,而且应用也很广泛,稍微有点技术含量的软件基本上都要用到,可惜纯粹用java和c#是根本做不出来的,你让一群java程序员用纯java实现一个金山词霸,他一百年也做不出来,这样的效率怎么算,应该为零吧?? |
#
silence_jiliao 发表于2007-01-17 09:51:31 IP:
| java这东西我觉得一时半会在很多领域还成不了气候,就冲那个eclipse什么都不干就占用我150M的内存 |
#
KingOfKnight 发表于2007-01-17 10:21:29 IP:
| c#会代替c, java会慢慢消失 |
#
zouxiang_1985 发表于2007-01-17 10:30:51 IP: 61.132.89.*
| 说的好,其实这篇文章只是表明一种愿望,从历史上看,任何变法都会遭到原有制度的抵触,人们会去怀疑,当然怀疑是肯定的,因为没说变法就会是更好的选择,但没有改变的事物是永远不会进步的,也就是说,客观看此文章,我们应该想到的是变革的历史必然性,c有缺陷,那么以后被优化甚至替代是必然的,当然可能以人的一生是看不到这个变化的,但我们应该可以明确这点. |
#
freasy 发表于2007-01-17 10:33:00 IP: 210.43.107.*
| 楼主对java与C的评论还是比较有见地的。 不过我认为c++在图形框架上面也是领先java的优势。C不能替代c++作图形框架,java也不行,所有解释型语言都不行。 |
Schunikeen 发表于2007-01-17 11:43:31 IP: | 古代的人出门 只能靠两条腿 现代的人出门 有汽车 是不是因为汽车便宜了,速度快了,人人都买的起了,人类就不用走路了? 各有各的用处, 比较汽车和腿走路不是瞎扯淡么? |
#
vcnewer 发表于2007-01-17 13:59:20 IP:
| 朴实中肯,高手风范! |
#
casual1001 发表于2007-01-17 15:12:45 IP: 192.25.42.*
| 这个世界除了C就是JAVA...... 呵,感觉其他语言好象一无是处了. 语言只是个工具,不同的人用会是不用的效果.相比目前这些工具的不同, 人的差异更起决定性! 看看现在所谓的软件工程师,有多少能把操作系统,编译原理,数据结构,数据库原理等基础坚实掌握的?????? 除了整天能从嘴里蹦出几个时髦的英文缩写外,有多少了解这些缩写背后到底是技术的发展还是商业的炒做. 如果你换个语言,换个开发平台,你的工资就会疯涨,那么争争哪个语言取代哪个,哪个比哪个强还有点实际意义. 如果不是,还是踏踏实实的打好基础吧. 有个好基础,在这些语言中换来换去不跟玩一样! |
#
casual1001 发表于2007-01-17 15:37:57 IP: 192.25.42.*
| 再补充一点,什么取代什么不仅仅是技术上的问题,更多是市场的因素. 看看Borland公司从顶峰到没落,就知道了. 那么多人骂MS的东西多垃圾,MS还不一样蒸蒸日上. 所以挣钱是硬道理!管它是JAVA,还是C,能挣钱就OK. 就目前国内市场的特点,什么安全,稳定啊,不是主要考虑的方面.等你什么都稳妥了,市场早没了.那么多大公司的产品不停的出补丁,就是这个道理. 所以,如果要研究技术,就好好打基础; 如果要赚钱,什么方便,什么快就上什么. 其他的,等有了钱再说. :) |
#
sxqwhxq 发表于2007-01-17 16:43:22 IP:
| 我更看好ObjectPascal。 其实计算机语言是靠天才才能发明的,世界上99.99%的基础软件/应就软件一流专家都不能体会,因为具备这种能力的人全人类也就是十几人而已,他们是计算机界的牛顿、爱因斯坦,人类进步是他们推动的。 我完全相信安德森的能力,objectpascal是他的天才之作,C#都不能掩盖她的光辉。 |
#
phoenixsh 发表于2007-01-17 21:33:08 IP: 58.33.33.*
| # swabc cache命中率降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的,这条使我受益了,以前从没看到过,今年刚学了计算机组成原理,有点理解了. ------------------------------------------------------ 您被误导了。缓存的功效基于局部性原理,与所使用的内存大小并无必然的因果关系。有些芯片提供prefetch指令供程序员或者编译器显式控制缓存。有些场合则需要关闭缓存。 GC语言的内存使用效率是一个富有争议的话题。你似乎还是个学生,这种话题建议尽量不要参与。 干脆多说两句。C语言并不是运行效率最高的语言。就我个人所知,高级语言中运行效率最高的语言同时也是最古老的高级语言——Fortran。这是因为Fortran的设计目标就是最高的运行性能,据说商业化的Fortran编译器所产生的代码的运行性能是有经验的程序员手写的汇编代码的两倍以上。C语言则不然,其早期的主要目标在于代码的灵活性,方便程序员操纵硬件设备;优化只是相对次要的。C++在这方面也是一样的。打开任何一本讲解编译器优化的书籍,里面都会历数指针和别名给优化带来的困扰;但是正是指针使得C成为OS和设备驱动开发的利器。 鱼和熊掌是不可兼得的。优秀的程序员应该多学习几种语言,了解每种语言的优缺点,再根据项目需要和手头的资源进行取舍。已经有明确的技术方向,长期只使用一两种语言的,也应该对其它语言和技术保持开放的心胸。技术山头主义要不得。 |
#
sjjf 发表于2007-01-17 22:05:48 IP: 221.236.163.*
| 无语........孟大虾什么时候也开始浮躁了? |
#
prostar 发表于2007-01-18 07:41:54 IP:
| 都什么年代了,竟然还在讨论某种语言优势,将替代另一种云云,每种语言都有其存在的价值,比如,叫你用JAVA写个BIOS出来^^^^我都不敢想象怎么写 |
#
tjackey 发表于2007-01-18 09:49:48 IP: 211.100.226.*
| 对我而言,本文的结论并不是很重要,关键在于分析的过程。 浮躁的人往往光看标题,不了解分析过程,匆忙得排斥或者接受。 C之所以有今天的优势,有着自身发展历史与计算机整个发展历史交互的演变过程。 Java自身的定位与发展尚未涵盖到基础的核心系统软件层面,也许将来会。 另外,Java的一些潜在的优势还没有表达出来,也就是说,作者忽略了CPU等硬件的一个很重要的发展趋势。 SOC(其中包含Java芯片)的发展很可能形成一次来自硬件层面的小/大规模的革命。 Java或许能够从中胜出,然而,新的更加适应新的计算环境和模式的语言,或许能够取代所有这些现有语言的统治地位。 我们应该回顾历史,更谨慎的展望未来,而不是去无意义无休止的简单的诡辩(针对某些评论,而非针对作者)。 |
#
gb_boy 发表于2007-01-18 10:24:28 IP: 124.42.18.*
| 不管能不能替代 你倒是挺能砍的,“不管劈不劈的死,先把你小子感动了再说。” |
#
qitaohai 发表于2007-01-18 10:41:33 IP: 122.4.33.*
| 各有各的优缺点啊!!! |
#
suncjs 发表于2007-01-18 11:16:51 IP:
| 目前C的不可替代性主要在于他与现行底层硬件的契合,它比其他任何一种编程语言都要靠近机器代码,正是这一点造就了它的高性能和可移植性。java要达到这样的地位,最重要的可能倒并不一定是java自身的发展进步,而是java硬件的出现,如果真正能在硬件层面上支持java的诸多高级特性,尤其是垃圾收集,java才有可能代替C语言。 ps: 关于java的执行速度我存有疑问,我的经验是运行bitcomet(c++)和azures(java)两种bt客户端的时候,明显bitcomet的资源占用和启动速度都要明显低于azures。不知道作者的数据来自哪里,如果是sun自己说的,很有可能是某个精心构造的测试数据,恐怕不具说服力。当然,在企业环境下我承认java效率并不低,但是那并不是单纯的执行速度的表现,是另一个问题了。 |
#
sujun10 发表于2007-01-18 19:12:41 IP:
| JAVA的思想和快速开发还不错 领域不同吧…… 没有绝对,只有相对 运用到不同的领域,就会有各自的优势 但是java可以说是在C/汇编的基础上运行 |
#
gameboy007 发表于2007-01-19 19:02:55 IP: 221.126.132.*
| >>> "Java与C语言的整体执行效率差距在一倍以内" 作为一个有影响力的讲者,任何时间都应对你说的话负责,在商业类型软件上Java或者差过C少於一倍,而这个"商业"只在於会计软件、资料库前端软件、网页前端软件上才出现,除这些以外都没有Java的份, 在全球软件利润最大收益的软件上,例如Window, Office, Photoshop, Dreamweaver, Flash, World of Warcraft,这些都是影响全球人类在工作上、艺术上、娱乐上的最重要软件,这些软件没有一个不是C/C++所开发出来的,而这些软件跟本就不能用Java编写,原因是效率上差距10到超过100倍以上远远有多,难道你不知道吗,这些软件根本不可能用Java在数秒内完全几百Mb影像合成、特技效果,声音处理,而这些根本在Java上不可能,原因是Java根本没有内存处理这回事。 作为中国人应该跟随国家所提出的自主创新,使用不受商业利益所影响的程式语言,例如C或C++向那些可以影响全球人类生活习惯的软件开发而努力,只要中国人能在以上任何一个重要软件上有一个位置,就能把中国的软件带起! 作为一个有影响力的讲者,应该鼓励有志向学习程式编写的人向正确方向发展,而不是去学习一个将来是决定於美国加州圣克拉拉太阳办公室的那几个家伙的嘴皮上的程式语言。 |
#
wishfly 发表于2007-01-20 02:57:08 IP: 218.246.97.*
| >>gameboy007 完全同意你的观点!什么时候从c/c++在中国真正流行起来的时候,也就是中国软件崛起之时! |
#
chessliu 发表于2007-01-23 09:37:20 IP: 125.92.128.*
| 有很多人看了后,都说一个共同点,就是每一个语言,都有不同的优点,应用在不同的领域,所以 Jave 不能完全 和C 作比较。就像菜刀和水果刀,有人拿菜刀去切水果,也有人用水果刀去切菜,但是我相信大部分的人,还是想用菜刀切菜,用水果刀切水果吧。还有一点,文中别一个意义,不是说那个好,那个不好。应该是那种语言适合那种领域,就用那种语言。是领域选择了语言,不是语言选择了领域 |
#
hdhmail2000 发表于2007-01-23 09:44:53 IP: 210.21.226.*
| gameboy007 : Office是vb写得。。。 Flash仅仅是个ocx的控件罢了,什么写得有待考证 引用的时候注意不要想当然的认为,论据要正确 永中office好像是java写的 oracle,db2有很大部分也是java写得 eclipse也是java写的 lumaqq也是java写得 还有很多,只是兄弟们不是这个领域的而不知道罢了,而不能说没有。 连ibm的人都说,他们把java作为ibm的主要语言 |
#
terrylzj 发表于2007-01-23 11:28:21 IP:
| 应该是“JAVA替代C语言的主流地位的可能性”。 JAVA无法替代C语言,就像C语言无法替代汇编。但JAVA有可能替代C语言的主流地位,就像C语言替代汇编的主流地位。 ================================= 我同意这种观点 |
#
gccr 发表于2007-01-23 12:17:51 IP: 203.86.43.*
| C早就不是主流了,我记得两三年前Java就是主流了. |
#
jamessweet 发表于2007-01-23 12:21:38 IP: 10.193.93.*
| hdhmail2000 发表于2007-01-23 09:44:53 IP: 210.21.226.* gameboy007 : Office是vb写得。。。 Flash仅仅是个ocx的控件罢了,什么写得有待考证 引用的时候注意不要想当然的认为,论据要正确 永中office好像是java写的 oracle,db2有很大部分也是java写得 eclipse也是java写的 lumaqq也是java写得 还有很多,只是兄弟们不是这个领域的而不知道罢了,而不能说没有。 连ibm的人都说,他们把java作为ibm的主要语言 ------------------------------------------------------------------------ hdhmail2000, 至少Java虚拟机就是用C写的。 |
#
san12655874 发表于2007-01-23 12:40:57 IP: 222.137.153.*
| ''中国所谓的人才和专家看来越来越多了哦,看来中国有救了''. 对了,# woso 发表于2007-01-16 09:36:56 IP: 58.60.231.* 比较的很透彻,也很客观 个人觉得,c或c++在并发上会是最大的问题 两种语言就像不同成分的人 c/c++就是农民,Java就是大学生 对于编写基于并发的基础软件, 与其要大学生下乡不如让农民学习点新技术更符合国情 说的中听。 |
#
superxiaomm 发表于2007-01-23 12:56:27 IP: 218.83.157.*
| ''中国所谓的人才和专家看来越来越多了哦,看来中国有救了''. 对了,# woso 发表于2007-01-16 09:36:56 IP: 58.60.231.* 比较的很透彻,也很客观 个人觉得,c或c++在并发上会是最大的问题 两种语言就像不同成分的人 c/c++就是农民,Java就是大学生 对于编写基于并发的基础软件, 与其要大学生下乡不如让农民学习点新技术更符合国情 说的中听。 ----------------------------------------------------------------------- 什么鸟狗屁理论,不懂不要瞎说. 首先说到并发,你听到过mpi瓦?我以前作mpi的时候就是linux下面的c++和mpi的库来说的.mpi针对高兴能计算. 第二c/c++就是农民,开什么玩笑,在我看来java除了类库多点,3rd party component多点,有什么好的?在北美java市场现在在慢慢被.net蚕食,desktop系统谁会用java来作? c/c++你用过多少?vc6.0是我最喜欢的ide,虽然mfc比较垃圾,但你看过他的设计思路嘛? 你做过3D得东西瓦?虽然现在有XNA(.net用得)但是游戏基本都是c++来作..net也是由c++来作得. 还有你看到过民工比大学生赚得多瓦? 老实说java除了不要钱,open source外还有什么好的??? |
#
HERMES_23 发表于2007-01-23 13:26:14 IP: 192.160.10.*
| 俺也來無聊一下 JAVA和C ??? 語言嘛,適合用在哪就用在哪唄。 就像說:你想用英語取代漢語,鬧呢嗷,欠揍了吧。反之,也是欠揍。 那還在這爭啥呀? -__- |
#
hdhmail2000 发表于2007-01-23 13:40:05 IP: 210.21.226.*
| # jamessweet 发表于2007-01-23 12:21:38 IP: 10.193.93.* hdhmail2000 发表于2007-01-23 09:44:53 IP: 210.21.226.* gameboy007 : Office是vb写得。。。 Flash仅仅是个ocx的控件罢了,什么写得有待考证 引用的时候注意不要想当然的认为,论据要正确 永中office好像是java写的 oracle,db2有很大部分也是java写得 eclipse也是java写的 lumaqq也是java写得 还有很多,只是兄弟们不是这个领域的而不知道罢了,而不能说没有。 连ibm的人都说,他们把java作为ibm的主要语言 ------------------------------------------------------------------------ hdhmail2000, 至少Java虚拟机就是用C写的。 ======================================= 老大,那你说c语言什么写的呢?手画的? 每个高级语言都是建立在某个语言基础之上的,不要至少了 我又没说c不好 其实最好的开发方式就去学学人家ibm,oracle吧 java+c/c++开发才是王道 这帮人就知道把两个语言搞对抗,为什么就不能把他们的精华整合在一起用呢? |
#
zhouhongyun 发表于2007-01-23 13:42:00 IP: 219.140.59.*
| c/c++就是农民,Java就是大学生 ----说这话的人其实内心对C有一种恐惧,其实很多人都曾经学过C和C++,除少数人坚持下来了,其他人都转向.net或者java了,为什么,因为人的本性是柿子拣软的捏。 |
#
hdhmail2000 发表于2007-01-23 13:42:27 IP: 210.21.226.*
| # jamessweet 发表于2007-01-23 12:21:38 IP: 10.193.93.* hdhmail2000 发表于2007-01-23 09:44:53 IP: 210.21.226.* gameboy007 : Office是vb写得。。。 Flash仅仅是个ocx的控件罢了,什么写得有待考证 引用的时候注意不要想当然的认为,论据要正确 永中office好像是java写的 oracle,db2有很大部分也是java写得 eclipse也是java写的 lumaqq也是java写得 还有很多,只是兄弟们不是这个领域的而不知道罢了,而不能说没有。 连ibm的人都说,他们把java作为ibm的主要语言 ------------------------------------------------------------------------ hdhmail2000, 至少Java虚拟机就是用C写的。 ======================================= 老大,那你说c语言什么写的呢?手画的? 每个高级语言都是建立在某个语言基础之上的,不要至少了 我又没说c不好 其实最好的开发方式就去学学人家ibm,oracle吧 java+c/c++开发才是王道 这帮人就知道把两个语言搞对抗,为什么就不能把他们的精华整合在一起用呢? |
#
win3999 发表于2007-01-23 14:31:16 IP: 222.188.161.*
| 这么容易忘本啊? Java虚拟机,Java Native库不是用C写的? 别把Java这么神秘化,不就是一个掮客而已! |
#
hdhmail2000 发表于2007-01-23 16:40:54 IP:
| c不也是吗?。。。 |
#
chpst 发表于2007-01-23 16:48:12 IP:
| 我怎么听说 java 是 c 的一个子集呢? main() { printf("Hello Java"); } |
#
zzzsea 发表于2007-01-23 17:25:30 IP: 218.200.188.*
| 其实要得出结果很简单,把你计算机里所有和C/C++有关的东西移除,再运行你的Java程序试试,看看结果怎样。 |
#
irplay 发表于2007-01-23 17:26:06 IP: 221.224.91.*
| java感觉快被.net淘汰了,而用C的人却越来越多. |
#
zjh222 发表于2007-01-23 17:43:13 IP: 222.212.121.*
| 大家应找微软问一下,如果微软在用C说明没有死,如果微软没有用C说明C 还活着........这么简单的问题,说那么多干什么?????? |
#
gameboy007 发表于2007-01-23 17:44:21 IP: 221.126.132.*
| >>> hdhmail2000 请你详细看完这页: http://www.research.att.com/~bs/applications.html 才发表你的伟论! 不要误道初学者。 |
#
xsiiao 发表于2007-01-23 18:11:30 IP: 219.159.39.*
| 当你再开发出一种新语言,写一个比UNIX/LINUX/WINDOWS....../.....更好的系统,那时也许会实现JAVA的原望的. |
#
wcp066 发表于2007-01-23 20:21:31 IP:
| 个人认为,C/C++是卫冕之王,无可替代,而JAVA之是一中语言,渺沧海之一粟,不同的开发工具,JAVA想替代C启不是越俎代庖.不可能的事情. |
#
I_Wanna_Fight 发表于2007-01-23 20:28:21 IP: 219.150.153.*
| 俺水平不高,不过有一点我要说下,目前的操作系统是微软独霸天下,而微软的操作系统和编译器似乎是基于C/C++的。想要JAVA代替C,首先就要用个JAVA核心的操作系统替代WINDOWS才行吧。。 |
#
I_Wanna_Fight 发表于2007-01-23 20:28:57 IP: 219.150.153.*
| 脱离基础去研究提高速度恐怕不行。 |
#
najie 发表于2007-01-23 21:04:33 IP: 155.161.59.*
| 在国外的技术社群里刮起了一股风,不少人在讨论Java做为C语言替代者而成为最主流的基础软件编程语言的可能性。从大部分人发表的观点来看,对于Java替代C的趋势还是支持的。 ------------------- 看清楚是国外,作这样的技术讨论和尝试是正常的。国内对于JAVA取代C语言乃至C++语言的观点,却不是从这点出发的。很多人认为,开发基于B/S的软件,使用B/S的公司多,互联网被大众接受程度高,这样好找工作,好拿一份薪水。如果其他语言能够从B/S领域走开,这个市场他们到哪里都如鱼得水,到哪里都吃香 ---------------------------------------- 但如果是在一个由1000台机器组成的大型异构网络并行计算的环境下,你写的C程序恐怕性能还会远远低于对应的Java程序,更不要说巨大的后期维护成本,而由此带来的损失可能是1000万或者更多。 -------------------- 另外提到大型异构分布式系统,这种系统如果是java来开发和部署,负责分布式,并发计算的主要还是商业的中间件和应用服务器,这类系统的核心不会是java开发,外围功能和配置可能由java提供 ------------------------------------- 谈到所谓成本问题,对于运行超过3年的系统,从数据到程序都要求非常高,此时安全和稳定远远高于成本问题,数据库和系统的稳定可恐怕不是说省钱就能解决。大部分java开发者再给客户灌输使用新系统的低成本,低投入,维护成本低等等。这实际上是根本不负责任的做法。而且这种观念,完全在弱化拥有技术才能的人,在工作中的价值和地位。依靠所谓的自动化模板生成的系统。只会导致客户应用层次降低,同质化,人越来越没有价值。而java却在这一点上确实比起他语言强,让语言和工具来控制人,而不是以人为主导。 ----------------------------------- 讲发展,java有自己的路,但最好还是做好本分,廉价的东西,廉价的价值,强调廉价,就是在鄙视开发人员的工作,压制开发人员的能力。 |
#
skyofmy 发表于2007-01-23 21:09:55 IP: 220.165.53.*
| # swabc 发表于2007-01-16 22:14:59 IP: 125.119.168.* cache命中率降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的,这条使我受益了,以前从没看到过,今年刚学了计算机组成原理,有点理解了. ------------------------------------------------------------- |
#
skyofmy 发表于2007-01-23 21:11:13 IP: 220.165.53.*
| # swabc 发表于2007-01-16 22:14:59 IP: 125.119.168.* cache命中率降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的,这条使我受益了,以前从没看到过,今年刚学了计算机组成原理,有点理解了. ------------------------------------------------------------ 这个好像是计算机系统结构关系更大吧, |
#
Could 发表于2007-01-23 22:45:08 IP: 58.49.73.*
| “专家”果然是垃圾, 跟我当初想的一样。 |
#
syhan 发表于2007-01-23 22:48:05 IP: 121.248.10.*
| 术业有专攻嘛,java是面向网络的 |
#
duqiang2050 发表于2007-01-24 00:02:21 IP:
| 有几个地方有问题: 1:速度问题,不同领域要求不同。6000块pc和7000块pc的对比不是很合适。首先在高端设备上硬件的性价曲线不是线性的,比如我们防火墙4万的硬件成本,要想性能再提升一倍得上40万的硬件。另外产品的软件部分是无成本复制,一个产品开发出来卖三年,节约硬件成本是关键。所以说java比较适合做项目,c比较适合做产品,尤其是高端硬件产品。 2:并行处理能力:“世界上只有很少的人有能力在多CPU计算平台上用C语言写出又快又正确的大程序,在这些人中间,又只有很少很少的人有能力用C语言写出一个在大型的、异构的网络环境下能够充分发挥各节点计算能力的大规模并行程序。”其实正好说反了,SMP的OS,分布式的OS,包括分布式的DBMS才是关键。外围的应用多数只不过是user而已,调用几个库,其实对并发一点概念都没有。如果说“大部分C程序员根本没有能力编写高效无缺陷的并发程序”,那么我可以说:“没有任何一个人能用java编写高效的并发程序”,如果你看过"Threads cannot be implemented as a library"这篇论文你一定会同意我的观点,因为到了java这个层面已经不存在高效并发的模型了。 3,“C语言目前仍在一些领域里坚挺,在操作系统、虚拟机和设备驱动程序开发方面,它可能是永远的王者。但是在其他的基础软件领域,比如数据库、网络服务器、图形图像处理等,C语言继续占据霸主地位的原因其实只有两个,一是快,二是熟悉的人多,而且经验丰富。” 还有个共同特点就是复杂度高。和.net替换asp使得asp朝着简单低级的方向发展的方向是不同的,C的这种作用域的缩小对C语言和C开发者是有利的(C开发多数不想做mis,无论用什么语言)。 asm/c/java是不同层面的语言,谁也不能替代谁。现在c编译器编译出的程序可以比有n年经验asm的老手写的asm快好多(阅读Intel 64 and IA-32 Architectures Optimization Reference Manual有助于相信我这句话),这样c也替代不了asm,因为asm能给出更确切的语义。随着面相对象体系结构的研究,cpu对java的优化将来会越来越多,将来速度超过C也大有希望,但是还是代替不了C,就是因为java的语义相对计算机的行为更不确切。 |
#
nabie 发表于2007-01-24 00:52:16 IP: 221.216.146.*
| 有一个问题要搞清楚:如果仅仅就语言而论,没有了那些库的支持,JAVA 的优势还有多少?(开发效率?简单?并发管理?)也许有人说那些库和已经提供了的代码就是 JAVA 的优势,那么那些库和代码所实现的功能是不是 C 就没有办法实现呢?如果不是,那么 C 同样可以拥有那些东西,而且事实上现在就已经拥有,而且许多现成的代码不见得比 JAVA 的少,只是因为 JAVA 是 SUN 做的,由 SUN 来开发那些东西而间接的达到了标准化罢了。如果有一家大软件公司或组织为 C 开发那些库,想必 JAVA 的众多优势也就不复存在了,剩下的才是真正的语言核心机制之间的对比。那样,也许只有 CPU 是面向对象的才能缓解 JAVA 在效率方面的劣势。 |
#
gameboy007 发表于2007-01-24 02:04:24 IP: 221.126.132.*
| 我真不明白为何总有人把Java与高性能说在一起,这是一种误道,又说什麽1000台机器组成的大型异构...等等,事实上高性能运算与Java根本没有任何关系,Java是为简单开发及商业应用而出现的,如果你说Java简单、减少开发成本,能配合快速变化的商场环境,Java一定是个好选择,但如果你希望Java能达到C的效率而又能保持Java的简单、易用,世界上有这麽美好吗?如果你是Java程式员,你或者会相信总有这一天到来,但C/C++程式员就不是这样看了,因为C/C++程式员写程式时永远与内存打交道,明白到效率与内存是不可分开的,也明白如何减少暂时对像对效率的重要影响,但Java永远不会与内存处理这四个字发生关系,说话回来,如果你是使用Java开发商业前端应用程序,你又何需理会高不高效率呢,反正背後有大形服务器或者虚拟机为你处理你要求的所为高效率函数。 事实上大形运算机器没有一个是使用Java作为程式语言的,道理很简单,先问一问自己为何要用使用大形运算机器呢?这种所为的大形运算机器就是$$$$$$$$$,而需要9位数字的机器无非都是为了效率,大多数都在国家层次上或军事上使用,你会在这麽贵机器上使用一个不讲求效率而讲求简单易用的Java吗? 我可以用日本的地球模拟器为例子, http://www.es.jamstec.go.jp/esc/eng/Programming/languages.html 它只接受C/C++与Fortran 90作为程式编写的,这只是其中一个例子,但根本上你找不到一个讲求极端效率的运算机器是用Java的。 中国大部份程式员选择使用Java或C/C++开发程序是影响未来中国软件的重要关键,直到现在中国人都没有开发到一个像GNU这样的编辑器,中国软件未来不乐观呀! |
#
DL88250 发表于2007-01-24 03:35:23 IP:
| 呵呵,有意思,相当生动! |
#
gaominjie 发表于2007-01-24 08:53:18 IP:
| 没有C语言写出来的OS,哪来Java的臭美? |
#
tiannet 发表于2007-01-24 08:55:18 IP: 10.81.64.2, 218.*
| 晕,恐怕很多人没看作者原文。 技术本身无高低, 如果有条件让你去研究神州六号,我相信你也能搞出一点成就, 而如果你不接触唐诗,你也不知道那是啥玩意。 同志们啊,好好把该学的学好吧, 千万别觉得自己搞的东西就有技术含量,别人的就没有。 多接触新东西, 会发现有很多好的思想。 Java和C,就目前来说, 用在不同的领域,它们都是很优秀的语言。 大家也不要觉得知道底层的东西就如何如何, 也许有一天, 开发任何东西我们都不需要知道这些。 社会在进步,自然是让我们的事情变得简单, 难道大家还想回到远古时代吗? 难道大家还想用DOS吗? |
#
luckysym 发表于2007-01-24 09:01:32 IP: 60.176.177.*
| 任何事情的发生都是有条件的,包括C语言的死。 很多人都忘记了一件事,C语言的死只是在某些软件领域比如所谓的MIS系统、WEB应用等,而这些软件设计领域,在C语言诞生的时候几乎就不存在,也就是说C语言并不是为他们而存在的,C的诞生时也不可能考虑到要为30年后的企业应用、WEB应用做准备。 尽管C语言在新兴的软件领域并不擅长,但是C语言诞生时就已经存在的那类软件如系统软件,到目前C语言仍旧时这类软件开发的绝对主力。只要这类软件不消亡,C语言就不会死。 |
#
lovesinox 发表于2007-01-24 10:17:12 IP: 125.254.133.*
| java没有指针,不能开发硬件相关软件! |
#
funcrazy 发表于2007-01-24 10:32:10 IP: 219.134.110.*
| 公说公有道,婆说婆有理,看了这么多评论,只是觉得自己还得还不够,还是看书去. |
#
epico 发表于2007-01-24 12:17:27 IP: 59.64.156.*
| 本人才疏学浅,但还是看过一点并行计算的。 java.util.concurrent也略微看过一点。 以本人的观点来看,16个CPU的SMP机器可能用的是C++ OpenMP规范来编程的。其接口不知道比java的好用多少倍。 在更大型的机器上,由于内存访问模式为NUMA,用的编程接口可能是MPI(Message Passing Interface)。 java.util.concurrent模型在SMP机器上是可以用的。但是绝没有OpenMP和MPI在处理大型计算上方便。 在Java上所有的线程同步都要自己来做。而对于OpenMP和MPI来说,只需要分配任务就可以了,多台机器上的同步分别有不同的函数来实现。 |
#
epico 发表于2007-01-24 12:19:25 IP: 59.64.156.*
| 本人才疏学浅,但还是看过一点并行计算的。 java.util.concurrent也略微看过一点。 以本人的观点来看,16个CPU的SMP机器可能用的是C++ OpenMP规范来编程的。其接口不知道比java的好用多少倍。 在更大型的机器上,由于内存访问模式为NUMA,用的编程接口可能是MPI(Message Passing Interface)。 java.util.concurrent模型在SMP机器上是可以用的。但是绝没有OpenMP和MPI在处理大型计算上方便。 在Java上所有的线程同步都要自己来做。而对于OpenMP和MPI来说,只需要分配任务就可以了,多台机器上的同步分别有不同的函数来实现。 |
#
epico 发表于2007-01-24 18:39:53 IP: 59.64.156.*
| 再多说两句,一个由1000台机器组成的大型异构网络并行计算的环境,我不知道作者指的是不是Corba,如果是Corba应用的话,Java的接口是比C++好用很多。 但是相对于科学运算来说,Corba应用稳定性是第一的,而不是速度,当然在商务系统中,是有时限要求的,通常那个时限是由系统架构和数据库决定的,和程序的运行速度关系不大。 Java之所以能够称雄网络应用,是因为在大部分情况下,CPU跑Java比网络快,所以C/C++太快了,没有用武之地。相反,大多数人写Java应用比C写的稳定,开发效率也高。所以,现在Java写网络应用很好,但是不适合于高性能计算。 |
#
healer_kx 发表于2007-01-26 09:51:25 IP: 202.108.130.*
| 是不是用Java来开发未来的程序,这都不是最重要的。可以肯定的是处于未来开发中占据主导地位的是今天这些C++程序员,他们转Java后的能力依然远远强于那些写JSP的。我很难想象对许多算法,网络等等都知之甚少的大多数Java程序员,他们能担当重要的角色。 |
#
chai2010 发表于2007-01-26 16:17:02 IP:
| 我很喜欢C语言。 从上学到现在都一直在用C。 以前在学校的时候也想过java, 主要是看着跨平台。 但是一个IO就搞的我很烦, 就放弃了。 现在发现Qt也是很好的跨平台库, 因此就决定用C++了... |
#
sheismylife 发表于2007-01-28 23:24:35 IP: 58.241.135.*
| C++真的很难掌握,虽然我觉得自己已经算是个高手了。不过既然c++能走到很远的高手,再同时掌握java也是个不错的主意,关键是要克服自己的偏见。没有哪种语言对于所有的事情都是完美的。感觉孟研已经达到了这个境界,技术上精通语言,思想上超越语言。 |
#
a_humble_programmer 发表于2007-01-30 22:25:37 IP:
| > 所以,我的态度明确的,我认为Java替代C是一个进步的想法, C语言在70年后诞生,C++在80年诞生。27年以来C++的目的一直是“一个更好的C”。comp.lang.c上,国外的C语言专家预计在过25年,C语言依然屹立。Java语言比C++更有可取之处,更可能取代C?甚至一锅端,取代了C++? 应该在国内媒体,包括电子媒体,制止博主这样的专家发言。 |
#
thomasnew 发表于2007-01-31 19:00:33 IP:
| 我看Java永远别想取代C, 倒是有可能利用C开发另外一种语言取代Java,比喻说.Net++ --------------- 我顶这个!呵呵 |
#
luyikk 发表于2007-01-31 19:52:08 IP: 60.184.154.*
| 搞来搞去 搞 糊涂了吧 竟然 JAVA 代替C 那么 可能后来 C# 代替 C++吧............................... 这比 JAVA代替C 的可能性更高吧 大家去我的BLOG 看看吧 不是什么 大的原因去我的BLOG 只是为了 "养眼"和学习 . http://blog.csdn.net/luyikk/ |
#
luyikk 发表于2007-01-31 19:56:29 IP: 60.184.154.*
| 反正 可能最后的结果 JAVA 代替C++ (不太可能) 然后呢 C#代替JAVA (完全有可能) 不错的文章 又学到 一课 大家去我的BLOG 看看吧 不是什么 大的原因去我的BLOG 只是为了 "养眼"和学习 . http://blog.csdn.net/luyikk/ |
#
tomweixp 发表于2007-01-31 22:00:11 IP:
| 无论在什么领域里面, 各负其责是一条亘古不变的真理 |
#
meidaolia 发表于2007-02-01 15:31:24 IP: 59.51.47.*
| 说的不错 但是现在大多数java的学习者还是懂一点就会向web方向转,毕竟比要学习java内部运行机制要容易一些。我自己也不是很喜欢java 也许c#是一个不错的选择!希望以后能看到您更精彩的文章!!! |
#
disrupt 发表于2007-02-06 18:46:05 IP:
| hdhmail2000 发表于2007-01-23 09:44:53 IP: 210.21.226.* gameboy007 : Office是vb写得。。。 Flash仅仅是个ocx的控件罢了,什么写得有待考证 引用的时候注意不要想当然的认为,论据要正确 永中office好像是java写的 oracle,db2有很大部分也是java写得 eclipse也是java写的 lumaqq也是java写得 OMFG.. 我看到了什么...本世纪最大的笑话啊 Office是vb写的. Flash仅仅是个ocx的控件. 还"引用的时候注意不要想当然的认为,论据要正确"... 您是文盲吗? |
#
mengxiaolong 发表于2007-02-20 19:59:25 IP: 61.186.114.*
| 我才刚刚学c语言 看了大家的发言,我觉得学到了不少的东西 个人认为java不可能取代c 我想它们应该各有各的长处吧 |
GlietBoy 发表于2007-02-25 00:14:12 IP: | 我学过PACAL,C/C++,JAVA接触过.我对PASCAL和C++情有独钟. 在此,我想说的是:学习语言时,一定要精通最基本最基础的东西.只有精通基础的东西,才可以做强大的东西. 就好象一个人学功夫一样,他首先得扎好马步,学好步法,再者才是拳法,剑法等. 现在很多人大学生往往不好好学基础,到大二,就跟风跑.今天抱framework 2.0,明天抱3.0,今天大谈架构,明天大谈部署.在程序员中也普遍存在.我接过不少人包括同行,都是喜欢谈时髦词.其时,对之知之甚少. 经常有程序员大谈java比c++历害.这就象说剑比刀好一样的说法. 说到并行计算,我不想多说,C++现在有着别的语言无可比拟的优势. 优秀的程序写程序时,要做算法好,考虑执行全面效果,代码清晰,规范化. |
#&n

