Arp*_*hah 1 c++ python interpreted-language compilation
我想了解解释语言和编译语言之间的区别.在网上找到了很多解释,我理解了所有这些解释.
但问题是,软件作为exe(在Windows上)作为最终产品分发.
因此,如果我用Python/Java编写程序并将其编译为exe,那么它的运行速度是否与我在C/C++中编写和编译的速度一样快?
不,它不会.它不是文件格式,而是语言编写的基本构建块的复杂性.
实际上,大多数语言都是编译的.Java和python,在解释器内部,实际上也是如此.但是,目标二进制代码的构建块的复杂执行方式存在差异.
对于C++,所有概念都直接映射到CPU理解的低级概念.缺点是竞争条件之类的事情是不确定的行为.代码根本没有定义在各种角落情况下应该发生什么,程序员有责任处理它们.程序员也有责任管理资源,因为没有收集器等.
对于Java,概念映射到虚拟机的指令.这些可以被解释(这涉及一些开销解码它们),或者它们可以进一步按照机器指令进行编译(或者像标准桌面VM一样)或提前编译(作为当前的Android运行时)确实如此),但每个执行仍然会更复杂.赋值将具有锁定前缀,以确保它们不会在竞争条件中生成无效值,垃圾收集器在内存中运行,寻找有效的指针并复制内容,对象有相当多的额外开销,很多东西都是检查所以它可以很好,并在错误上抛出异常,而不是像C++那样崩溃.
而python则更复杂.它实际上并没有并行运行python代码(除了阻塞系统调用),因为语言提供了保证,还有收集器,这次更新每个操作中的引用计数,对象有更多的开销,因为大多数成员访问实际上是哈希表查找 - 与带有偏移量的指针的C++简单加载形成对比.而且还有更多的检查.速度差异的数量级.事实上,Java和Python之间的差异比C++和Java之间的差异要大得多.
由CPU直接解释的机器代码编译确实有点帮助.但是更高级别的语言增加了由于它们的语义而导致的开销,而不是由于它们被解释的事实.
也就是说,@ linuxuxuser是正确的,转换Java或Python代码实际上并没有将它转换为机器代码,而是简单地将解释器和代码捆绑在一个包中运行,因此没有任何好处只是因为实际上没有区别.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |