« 给脚本加入字符串类型 | 返回首页 | 实现一个系统堆栈无关的虚拟机 »

闲话 java

今天收到一封读者来信,顺着 email 找到了他的 blog 。看到上面扯到 java ,<a href="http://dreamhead.blogbus.com/logs/2005/12/1676755.html">http://dreamhead.blogbus.com/logs/2005/12/1676755.html</a> 忍不住也闲话两句。

最初,作为一个 die-hard 的 C++ 程序员,我曾经是很瞧不起 java 的。不知道时候还有朋友保留我在 5 年前,作为一个自由程序员印过的私人名片。当时便直接把自己对 java 的不屑一顾签写在上面。

日子过了好久,人的思想也在一步步改变。在我写那本书的时候,对 java 的态度已经好了许多。至于现在,离那些文字又过去一年,java 于我,可以说很有好感的,了解也逐渐增多。

记得在前不久的 C++ 会议上,曾有对 C++ 的批评。说是对于设计模式这些于现代程序员应该耳熟能详的名词,居然有许多 C++ 高手还很陌生,至少在碰到问题时,脑子里闪现的第一个念头不是这些。而换作一个 java 程序员,即使使刚入门不久,就可以对一个问题该用哪种设计模式而争论不休了。

我们可以看到不同语言的使用者观察问题的层面和角度居然可以有这么大的不同。

或许真的如朋友笑谈,java 封装和统一了太多东西,导致程序员的智慧无初发挥,只能集中到设计模式上发泄了 :) 而 C++ ,却有无数的方法证明你的聪明。

另一个例子也很恰当:如果在 java 社区,宣布了一向新特性,会使整个社区的开发效率明显提高,即使这个特性会使世界上所有的 java 程序效率损失 10% 。大多数 java 程序员还是会拍手称快。反正 java 在运行效率上的名声已经臭名招著了,大家也不再在乎。而换到 C++ 社区,即使这个新特性只有 0.1% 而不是 0 的性能损失,必然招至一片唾骂声,吵上10年也不可能写进 ISO 标准。在效率问题上,java 程序员更加指望那些为他们写虚拟机的人做出新的发明,然后发布一个报告,谈即新的技术可以使 java 程序运行速度加快即可。

不得不说,C++ 和 java 是在两个层次上的语言。一个从机器模型延续而来,一丝一环紧紧相扣。而 java 语言却从机器层面向上一跃,中间留下一个空挡。阻止程序员去跨越。这使整个社区的人力集中于更高的层面,未尝不是一件好事啊。

我在书中,思想毕竟还是局限了一点。用 C++ 角度考虑问题还是偏多了些。或许,慢慢的,游戏行业真的要演变为 C++ 社区最大的根据地了。

ps. 我隐隐感觉, .net 技术有超越 java 之势。
关于 SIMD ,新的 intel 编译器正在重点考虑向量化技术,让C++编译器自动产生使用 SIMD 的代码,成果显著。

Comments

除非你和机器编程,否则动态语言和jit类语言和functional类以后肯定是王道

性能在复杂度面前往往要低头,尤其是一般人,更不要说蓝领,技术高的人没有金钱支持还是没有坚持下去的动力。

也许提高那么50%之类的什么性能而需要增加25x的实现难度,500x的工作量可能吸引力并不大

而且性能区别还在硬件升级上逐渐缩小,以至忽略

上面说鄙视一门语言的兄弟,你们真有能力去鄙视吗?不知天高地厚。

有没有java接口的3D引擎呢

我想问一个问题,为什么游戏行业不能用java来开发呢?需要代码优化的地方再用C/C++/汇编来写就好了。

java 初学者留言

java是成功的商业化语言,但我依然喜欢C++,它的发展虽然可能离开发越远,但它的发展或多或少地在预言着软件工业的发展吧

我不蔑视 java 语言,相反,我还是挺欣赏的 :)

能否详细说说你对java蔑视的原因,因为我和你一样的蔑视一种语言,但相反我蔑视c++

我还是一名在校的计算机系学生,学了c++和java,现在正在为把哪个作为自己的发展方向烦恼,想多了解这两个语言的应用领域,优劣等!baidu到这里,路过!!

我在.NET和Java两个平台上都有几年的应用开发经验,觉得Java的特点在于开放和跨平台。估计未来的几年中,.NET在这两方面都不会有优势。所以.NET不大可能超越Java。

Java社区的资源比.NET社区资源要多得多!

呵呵,技术这东西无法评价哦

我想看看!谢谢

其实国内很多人误人为java只是写企业级应用的,但pc上的上层应用java同样可以很好地胜,甚至越来越好地胜任!国外开源社区这方面的软件应有尽有,如ImageJ等图像处理软件,它可以几乎不改动的移植到一些PDA上,您读读它们的java源代码,相信您对java会更有好感.

我不是做游戏的, 主要是在LINUX下用C 写底层,还有用JAVA 写应用层,
C++ 很少用到;

我现在在把自己写的 VM 改成 stackless 的,可以不依赖于系统的 stack。下一步些调试器的时候就很容易做单步跟踪了。

现在是这样的,从 vm 类继承一个 vm_debug 类出来。派生类是 stack_less 的,但是效率低一点。高效的代码可以用基类跑。

自己维护调用栈的话,有两种方案,一种是额外建一个调用栈。可以用一个保留的 global table 模拟,另一种是把入口地址作为限定的第一个参数压栈传递给被调用函数。两个方案各有利弊。

不知道 JVM 用的哪种,我估计是后者吧。

既用过DDK做项目,又用过.net做项目的人,可能都应该很深刻的明白,为什么微软会去发明.net这个平台,除去那些商业上的因素以及开发方便的因素以外。我想说的是——调试,不是指本机调试(有symbol和source code),而是从dump文件调试。metadata的作用在这个时候才发挥到极致。

另外,商业应用,还是少用C++为好,毕竟不是每个公司都有C++高手的,任何一个指针隐患,都可能让整个项目搁浅或者延期很久。

JVM的callstack看不到吧,很多时候,也不是件好事。

现在讨论软件技术,就不能脱离其应用领域。Java的兴起,是在企业应用领域,Java在架构上的长项也只是在企业应用领域里特别有用,而其在性能上的弱项也只是在企业应用领域里才特别容易克服。我想云风如果继续做游戏,那么相当长的时间之内,Java都仅仅只是一个他山之石而已。

我这两年关注企业应用比较多,我的看法是,Java在这个领域的最高峰已经过去了。随着SOA的兴起,Java、.NET、C++以及一些新兴的动态语言的地位会重归平等。

一个优秀的程序设计师要出得厅堂,还要入得厨房,如果把厅堂比喻成上层构架设计,那么厨房就是机器底层了。

其实我觉得现在的游戏编程也在细分.毕竟不是所有人都有能力钻到底层去研究引擎的.有人努力提高引擎的效率,有人努力更好地使用引擎,不能说谁比谁的工作重要.如果使用不好,在NB的引擎也只能制造垃圾了.

另外:12月18号 郑智化在北京展览管开演唱会,好想去啊,不过现在可能已经买不到票了吧?知道消息太晚了,郁闷啊~~以前不明白他唱的那么火怎么就不唱了?后来听说是因为唱<大国民>给抓到监狱里去了...

主要是做了这么多脚本相关的工作,对于低效语言也能接受了。不过对VB还是有些看不起吧

呵呵,以前我的确是个语言沙文主义者。现在感觉这方面自己做的好些了。就上面这篇看,我觉得对 C++ 和 java 都没有做褒贬。

失望,失望,想不到你也是个语言沙文主义者,不能免俗啊....

梁肇新的《编程高手箴言》就是鼓吹底层。难道说写底层代码的就是牛叉的?不见得

我觉得Java最大的优点是,是创新和开源的地方。众多的framework.简直跟春秋时期差不多。百家齐放

.net再厉害,不过是微软的技术,不是群众的技术。

第一次登门拜访

Post a comment

非这个主题相关的留言请到:留言本