为什么计算机语言会有性能的差异?

2016-01-06 16:29:43 +08:00
 temberature
8349 次点击
所在节点    程序员
86 条回复
temberature
2016-01-06 17:30:07 +08:00
@leavic 但这两件事结果不一样,相信跳过的都知道
MiguelValentine
2016-01-06 17:30:14 +08:00
作为游离于一个实模式/保护模式的开发者 性能差异产生于编译后的逻辑 在汇编模式查看,高级语言写出来的东西,都是在曲线救国啊。误国啊。真的= =
KyleMeow
2016-01-06 17:30:16 +08:00
其实楼主可以去了解下语言的翻译( translate )、编译( compile )、解释( interpret )的区别。并不是所有语言都有完全等价的写法,即相互翻译。
temberature
2016-01-06 17:32:17 +08:00
@loading 语言和个人确实都是影响因素,而且语言还会影响到人
temberature
2016-01-06 17:34:46 +08:00
@MiguelValentine 似懂非懂,不明觉厉
temberature
2016-01-06 17:47:34 +08:00
@KyleMeow 恩呢,虽然具体不清楚,但能感觉到不同语言表达力的区别。想问的还是能不能对二进制做精确的抽象
whitefable
2016-01-06 17:49:10 +08:00
um...我觉得一种理解嘛...就看你怎么定义一件事情了
如果说只是实现你所需要的要求...自然方法是不一样的...过程不一样所消耗的资源也是不一样...但最终你看到的结果是一样的...大概就是大家所说的编译的过程什么的啦
如果说你要定义到汇编或者机器码都是一样的话...其实貌似执行起来也是不可能完全一致的=.=在我的学科内...电子电路这种东西嘛...就没啥说一定是确定的...你回到电路的最基本层次最基本结构大概也就知道那个执行起来是不可能完全一样的或者说只会在一定范围内是对的但你要精确解还真没有...因此你也无法预测到下一次执行所需时间的精确解...自然就会产生效率差异...当然这部分就不是高级语言 or 程序层次上的效率差异了...所以我觉得语言上的那层差异来自于编译那部分=.=
honam
2016-01-06 17:51:50 +08:00
这事就好比不同人用同一种语言写的程序效率不一样那么简单
KyleMeow
2016-01-06 17:52:43 +08:00
@temberature 连 C++ 这一门语言的各编译器都无法做到 ABI 统一,其他语言之间等价语句生成的二进制代码可以说是 100% 不同。遇到 JIT 动态优化的语言,同样代码每次执行的指令都可以不同。
aisk
2016-01-06 17:58:20 +08:00
其实最关键的是变量类型是否确定,如果不确定这个开销怎么也不能省了,不管你是解释执行,还是 JIT 😂
aisk
2016-01-06 17:58:35 +08:00
还有 GC 的问题,对性能影响也很大。
sandideas
2016-01-06 18:04:32 +08:00
我老师以前上 JAVA 课又说过一个例子。。
就是大致相当于我们人吃饭, JAVA 相当于是把锅里的饭装到碗里吃。而 C 相当于是直接趴锅里吃。。
当然 C 的效率高。
JAVA 的 class 文件虽然也是二进制的,但是不能够直接在 CPU 上执行,需要 JVM 。。相当于是套了个虚拟机。
然后 js 这样的语言需要检查语法,编译这样的。。而且这些语言设计的时候就是想要易用性,而不是效率。为了易用性通用性所以用计算机资源去完成。
CRVV
2016-01-06 18:04:45 +08:00
个人观点,不同语言效率不同的主要原因是语义不同

比如 C 和 Python 里类似的语句
int i = 0;
i++;

i = int(0)
i += 1
这两句的意思不一样,速度也不一样

再比如 std::sort 和 qsort ,都是快速排序,但 std::sort 的速度快

如果语义完全一样,编译器 /解释器就可以用相同的方式来执行,效率就可以一样。
当然实际情况是不同语言的编译器 /解释器的实现不一样,速度也总会有差别的
b821025551b
2016-01-06 18:05:54 +08:00
手工切图和 dreamweaver 切图的区别
georgetso
2016-01-06 18:06:49 +08:00
不同的性能代价,换来不同的其它效率的收益,比如常见的开发效率
temberature
2016-01-06 18:17:50 +08:00
@KyleMeow 这也是学编译原理的作用吧
temberature
2016-01-06 18:20:41 +08:00
@georgetso 一般事都是不可兼得,但在这件事上好像有可能
wy315700
2016-01-06 18:20:51 +08:00
同样一个意思,中文可能 20 个字,英文要 200 个字母,还有其他语言,

打个比方而已,性能差距就是这么来的,

同样一个功能,可能汇编只要 20 条指令, C 编译出来的要 50 条,其他语言需要 200 条或者更多
contmonad
2016-01-06 18:21:54 +08:00
主要还是语言实现有性能差异,在理想情况下,如果编译器足够聪明最后优化得到的机器码都差不多。但是不同的语言设计导致“理想编译器”的实现难度不一。如果你业余时间设计一种跟 JavaScript 类似的动态类型语言,你肯定没法像财大气粗的 Google 一样搞一个 V8 这种级别的 JIT ,然后就会发现 JS 的性能比你的玩具语言高到不知道哪里去了
temberature
2016-01-06 18:24:57 +08:00
@wy315700 说不定有一天,人类的语言和计算机语言在发展到极致的时候能融合,也是黑客帝国来临的一天

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248811

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX