找回密码
 立即注册
搜索
楼主: chronicle

[移动] 机器人是不是就死在这java上面了....还有救不....

[复制链接]
     
发表于 2011-7-17 17:20 | 显示全部楼层
引用第79楼HyperIris于2011-07-17 16:18发表的  :




java 底层有两点注定其无法写出高效率的native编译器
.......
堆栈机只不过是Hotspot实现技术,dalvik就是用的寄存器机,IL都不同了,要做java语言的原生编译并非不可能

内存回收这个不争了,争下去又要战10版
补充一点
java(.net,各种动态脚本, 甚至objc)对象的内存模型里面包含的过多元信息(附带的动态函数表之类都是影响性能的大头,不过objc ruby之类有模块mixin这个概念很少会用到多层继承结构)
C++的做法是把元这类魔法特性丢到预处理阶段,后果是编译慢的蛋疼

个人观点是脚本有其存在的价值,胶水性质的代码,冗杂的业务逻辑用脚本来描述能节约人生,更specific的领域需要专用的DSL
编程语言越通用那么他解决特定问题的能力也就越弱,混合编程才能达到机器和人的平衡点
有句话叫做“提前优化是万恶之源”
回复

使用道具 举报

     
发表于 2011-7-17 17:23 | 显示全部楼层
还得加一条强类型安全检查,总之就是编译器添加的代码拖慢了速度。但更多的还是因为细节过分隐藏让程序员用了错误的算法

比如

string a = "233";

foreach( 10000000 次 )
{
          a += "253874.........一段很长的字符串";
}

没有c和c++ 背景的人可能认为这段代码没问题,但其实每次循环都有内存申请,拷贝和释放。这样不明所以得代码多了,速度自然就慢了
回复

使用道具 举报

     
发表于 2011-7-17 17:31 | 显示全部楼层
引用第81楼精钢魔像于2011-07-17 17:23发表的  :
还得加一条强类型安全检查,总之就是编译器添加的代码拖慢了速度。但更多的还是因为细节过分隐藏让程序员用了错误的算法

比如

string a = "233";
.......
常用脚本都会自动优化成mutable string,用java能写出这种代码的.....那也不能怪语言啊
回复

使用道具 举报

发表于 2011-7-17 17:34 | 显示全部楼层
额,人家只是举例,楼上有点钻牛角尖了……

在不同的领域选择不同的工具反正不会有错的
回复

使用道具 举报

     
发表于 2011-7-17 17:41 | 显示全部楼层
安卓扩张得太快,结果负面的东西全让消费者买单

我很怀疑google 是借安卓把手机市场的水搞浑,自己置身事外看热闹
回复

使用道具 举报

发表于 2011-7-17 17:41 | 显示全部楼层
引用第81楼精钢魔像于2011-07-17 17:23发表的  :
还得加一条强类型安全检查,总之就是编译器添加的代码拖慢了速度。但更多的还是因为细节过分隐藏让程序员用了错误的算法

比如

string a = "233";
.......

就算用JAVA     
也不能这样写   
那就是教学的问题了
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-7-17 17:49 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

发表于 2011-7-17 17:58 | 显示全部楼层
c++ 未来也会有GC的吧?
关键垃圾回收不是万能
有也能内存泄露的
回复

使用道具 举报

发表于 2011-7-17 18:15 | 显示全部楼层
引用第3楼精钢魔像于2011-07-17 17:23发表的  :
还得加一条强类型安全检查,总之就是编译器添加的代码拖慢了速度。但更多的还是因为细节过分隐藏让程序员用了错误的算法

比如

string a = "233";
.......

有像你这样黑的么,就算是自学,稍微好点的教科书都会提到字符串的这种特性吧。
难道说在学习java时学不到的情况下,你还指望那人能学好c++之类呢。
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-7-17 18:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2011-7-17 18:54 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

     
发表于 2011-7-17 19:05 | 显示全部楼层
引用第89楼HyperIris于2011-07-17 18:33发表的  :




把stack模型映射为register模型,这不是一般的蛋疼,对于jit来说就是脱裤子放屁
.......
JSR定义的java是堆栈机模型没错(其实load store跟显式参数也不算严格的堆栈机了),但既然把amdroid也算上那显然这里所说的java只是java的语法,dalvik就是使用java语法的寄存器机,跟真实的处理器区别只是全局寄存器和实例寄存器了
回复

使用道具 举报

     
发表于 2011-7-17 19:30 | 显示全部楼层
引用第90楼茶叶于2011-07-17 18:54发表的  :


初学者强烈不推荐C++,语法太过复杂及累赘,还不如Obj-C简练。
C#也眼看着往C++大而全的路上走了,又是个被微软带坏的东西。
但学会动态语言后,还有心情来啃C++吗
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-7-17 19:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2011-7-17 22:03 | 显示全部楼层
引用第87楼ov_efly于2011-07-17 17:58发表的  :
c++ 未来也会有GC的吧?
关键垃圾回收不是万能
有也能内存泄露的


.......
已入C++11标准
但我觉得C++11的努力方向有点歪,把元编程好好加强下能做到编译期生成代码岂不更给力……
引用第90楼茶叶于2011-07-17 18:54发表的  :


初学者强烈不推荐C++,语法太过复杂及累赘,还不如Obj-C简练。
C#也眼看着往C++大而全的路上走了,又是个被微软带坏的东西。
这扯的
C++有的东西你就都要学都要用么?
能干点事情的东西都简单不了(没有银弹),当初的GWBASIC我都不敢说自己全都掌握了。
回复

使用道具 举报

发表于 2011-7-17 22:20 | 显示全部楼层
问题是,C++本身就鼓励大而庞杂的用法。我很怀疑,有哪一门其他编程语言里面的奇技淫巧有C++这么多。

c和c++确实性能有优势,问题是从c诞生到现在,计算机的运算能力和内存大小提升了至少上百上千倍了吧,而对老板来说,程序员的生产力显然没有提升这么多倍。

比如内存,从最初不到1MB到现在一台2万美金的NT服务器满配的1TB(dell R910好像就能配到这个数目),增长了一百万倍;60年代,ibm360的操作系统花了5000人年(记不太清了),按前面的1百万倍来算,现在一个人就应该能在2,3天写完……

结论很明显,对大部分程序来说,人的时间相比机器的时间要值钱多了,除了一部分利基市场外,用c++的性价比实在不怎么样。
回复

使用道具 举报

发表于 2011-7-17 22:25 | 显示全部楼层
我考,java在droid上那个吊样干php什么事情,躺着也中枪
回复

使用道具 举报

     
发表于 2011-7-17 22:31 | 显示全部楼层
问题就是别人一行能搞定的,你要写一堆。这算不算大而复杂?
或者应该说大而繁琐?
回复

使用道具 举报

发表于 2011-7-17 22:42 | 显示全部楼层
引用第95楼fctt2008于2011-07-17 22:20发表的  :
问题是,C++本身就鼓励大而庞杂的用法。我很怀疑,有哪一门其他编程语言里面的奇技淫巧有C++这么多。
你一定不知道Perl的设计哲学

另外我还真不知道你哪里来的“庞大复杂”、“奇技淫巧”的印象
自己啥复杂用啥就怪语言提供了这么多功能么?
引用第97楼newfaceryo于2011-07-17 22:31发表的  :
问题就是别人一行能搞定的,你要写一堆。这算不算大而复杂?
或者应该说大而繁琐?
例子?
回复

使用道具 举报

     
发表于 2011-7-17 22:47 | 显示全部楼层
JAVA=主流可以卖钱的市场
效率有毛用,能吃饭吗???
回复

使用道具 举报

发表于 2011-7-17 22:50 | 显示全部楼层
C++这东西,用不好带来的危害比带来的好处更多,安全的做法只有忽略一切奇技淫巧。
先不说容易出错的内存指针问题,运算符重载,拷贝构造,自动指针之类的语法便利只会使代码变得复杂难懂。

Obj-C上的autorelease这么简单的内存延迟释放功能带来的便利比C++方便多了。
回复

使用道具 举报

发表于 2011-7-17 23:00 | 显示全部楼层
引用第92楼拜拜于2011-07-17 19:30发表的  :
但学会动态语言后,还有心情来啃C++吗
初学者,视不同的方向的话。
底层或要打基础的从C开始,
OO的话,从Java开始,因为语法比C#简单,异常强制声明的语法可以养成好习惯。
动态语言现在太多了,挑不出典型的,不过个人倾向ruby
回复

使用道具 举报

     
发表于 2011-7-17 23:12 | 显示全部楼层
一贴拖出一堆死程。

非要较真执行效率的话,自然JAVA在C/C++面前死的确实比较惨,不过这也就是复杂运算时会这样。对于语言的运用范围,得从实际需求出发,我在前面的那个例子,至少可以证明一点,I/O和简单处理方面,JAVA和C/C++的差距并不会体现出来。考虑到成本以及开发风险,快速简单的JAVA比C/C++靠谱多了。
回复

使用道具 举报

发表于 2011-7-17 23:29 | 显示全部楼层
我觉得GC这种东西,对于C++而言只会带来更多麻烦
回复

使用道具 举报

     
发表于 2011-7-17 23:33 | 显示全部楼层
引用第91楼venusvsvirus于2011-07-17 19:05发表的  :

JSR定义的java是堆栈机模型没错(其实load store跟显式参数也不算严格的堆栈机了),但既然把amdroid也算上那显然这里所说的java只是java的语法,dalvik就是使用java语法的寄存器机,跟真实的处理器区别只是全局寄存器和实例寄存器了
+1
1.android使用java作为开发语言只是为了吸引原本使用java的developer

2.CLR绝逼算虚拟机

3.各种语言有各自的使用场景,单纯“运行效率”的比较没有意义

4.新版本的Hotspot JVM在GC和JIT上已经优化得很好了,至少服务器端使用C2编译的话性能相当不错
回复

使用道具 举报

发表于 2011-7-18 00:02 | 显示全部楼层

回 94楼(鸡蛋灌饼) 的帖子

C++11有GC?
这楼已经歪了,新开个语言大战贴吧
回复

使用道具 举报

发表于 2011-7-18 07:02 | 显示全部楼层
引用第98楼鸡蛋灌饼于2011-07-17 22:42发表的  :

你一定不知道Perl的设计哲学

另外我还真不知道你哪里来的“庞大复杂”、“奇技淫巧”的印象
自己啥复杂用啥就怪语言提供了这么多功能么?

知道啊,所以我写小程序也不用perl,而用python

至于“庞大复杂”“奇技淫巧”,只需要看看诸如effective c++和more effective c++这一类书有多少就知道了。作为通用语言,内存操作细节之类的东西根本就不应该暴露出来。

其实仔细一想,作为强调前向兼容,流行了20年以上的东西,C++历史沉淀太重了,或者换句话说,架构腐化已经很严重了。流行了15年的JAVA也有同样的问题,不知道下一个根本不考虑现有程序员的,纯粹的新语言会是什么,会在什么时候出现。这样一种语言,估计才能真正带来一些目眩的本质改变,才能摆脱很多已经过时了10年以上的争论。
回复

使用道具 举报

     
发表于 2011-7-18 08:33 | 显示全部楼层
c++有gc了?它还需要gc么?不是有智能指针了么…
回复

使用道具 举报

发表于 2011-7-18 08:37 | 显示全部楼层

Re:回 94楼(鸡蛋灌饼) 的帖子

引用第105楼ts1egats于2011-07-18 00:02发表的 回 94楼(鸡蛋灌饼) 的帖子 :
C++11有GC?
这楼已经歪了,新开个语言大战贴吧

http://en.wikipedia.org/wiki/C%2 ... ted_implementations
0x的编译器支持还是各种..
C++用不好就是悲剧..
引用第107楼uroko于2011-07-18 08:33发表的 :
c++有gc了?它还需要gc么?不是有智能指针了么…
你要所谓的智能指针是什么东西....
回复

使用道具 举报

     
发表于 2011-7-18 08:48 | 显示全部楼层
>>你要所谓的智能指针是什么东西....

scoped_ptr
shared_ptr
weak_ptr

前面和stl那个一样
后两个是带引用计数的,垃圾回收就是引用计数吧?
回复

使用道具 举报

     
发表于 2011-7-18 08:52 | 显示全部楼层
引用第75楼darklight于2011-07-17 15:57发表的  :
JAVA也好,C也好,C++也好,甚至JavaScript也好,写出来不过是源代码而已,有什么执行效率不效率的说法.
机器执行的只能是机器码。至于将源代码转化成机器码,那是编译器的事情,就C来说,不同的编译器编译出来的机器码执行效率都不一样。
java的编译器的目标只是JVM,经过了一道中间层,比不过直接的机器码那是当然的。如果有兴趣,有人写一个对特定平台的JAVA直接编译成该平台机器码的编译器,编译出的机器码执行效率高于其它语言的编译器也很正常。
语言是没有什么高下的。
问题是编译器没那么智能,优化能力还没有比人强,一般而言表达能力更强的语言能有更好的效率。因为表达能力强大,所以可以做更多的手工优化。
回复

使用道具 举报

发表于 2011-7-18 08:57 | 显示全部楼层
C/C++的执行效率目前还没有高级语言能达到的,在需要从语言层面上挖掘性能的时候,不得不用C/C++,而且历史积累的这么多代码库,也不是说抛弃就能抛弃的。

从VLC for android这个项目来看,NDK在开发多媒体应用上还是没啥问题的
回复

使用道具 举报

     
发表于 2011-7-18 09:00 | 显示全部楼层
引用第100楼茶叶于2011-07-17 22:50发表的  :
C++这东西,用不好带来的危害比带来的好处更多,安全的做法只有忽略一切奇技淫巧。
先不说容易出错的内存指针问题,运算符重载,拷贝构造,自动指针之类的语法便利只会使代码变得复杂难懂。

Obj-C上的autorelease这么简单的内存延迟释放功能带来的便利比C++方便多了。
⋯⋯RAII要比autorelease优雅多了好不好。
scope_ptr,auto_ptr,shared_ptr哪个不比autorelease强?
就语法来说,objc实在是一个error-prone的语言,连父类的析构都要显式调用,有这么麻烦么?
回复

使用道具 举报

     
发表于 2011-7-18 09:03 | 显示全部楼层

Re:回 94楼(鸡蛋灌饼) 的帖子

引用第105楼ts1egats于2011-07-18 00:02发表的 回 94楼(鸡蛋灌饼) 的帖子 :
C++11有GC?
这楼已经歪了,新开个语言大战贴吧
optional的吧我记得。
不过0x里面没有varadic template实在太不爽了。
回复

使用道具 举报

     
发表于 2011-7-18 09:06 | 显示全部楼层
引用第106楼fctt2008于2011-07-18 07:02发表的  :


知道啊,所以我写小程序也不用perl,而用python

至于“庞大复杂”“奇技淫巧”,只需要看看诸如effective c++和more effective c++这一类书有多少就知道了。作为通用语言,内存操作细节之类的东西根本就不应该暴露出来。
.......
正是因为通用,所以才应该暴露。各种细节的隐藏是各种库应该干的事情。如果不支持在语法中表达这些细节,那么很多需要精细操作的领域就无法使用c++了。c++的问题不是繁杂,相反,c++里面到处是各种“统一”的概念。比如用操作符重载支持原生类和class的统一,支持function object,这些都是“统一”的概念。理解了这点以后我觉得c++反而是一门相对简单的语言,至少需要理解的核心概念比其他语言,不说少,至少一点也不多。
至于各种语言细节,其实养成少数良好的习惯以后基本上可以不考虑了。只有库的作者才需要费尽心思考虑各种奇技淫巧。
回复

使用道具 举报

     
发表于 2011-7-18 09:18 | 显示全部楼层
JAVA设计之初就不是把性能放第一位的,和这样的对手比性能你们害臊么……
JAVA的侧重点是跨平台,一次编译到处运行,免去日后移植来移植去的重复劳动……
回复

使用道具 举报

     
发表于 2011-7-18 09:33 | 显示全部楼层
引用第115楼cxn于2011-07-18 09:18发表的  :
JAVA设计之初就不是把性能放第一位的,和这样的对手比性能你们害臊么……
JAVA的侧重点是跨平台,一次编译到处运行,免去日后移植来移植去的重复劳动……
结果呢?
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-7-18 10:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-7-18 10:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2011-7-18 10:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-16 04:01 , Processed in 0.295553 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表