据我了解,造成编译语言与python之间速度差异的原因是,第一个方法将代码一直编译到本机计算机的代码,而python编译为python字节码,由PVM解释。我看到这种方式python代码可以在多个操作系统上使用(至少在大多数情况下),但是我不明白,为什么没有额外的(和可选的)python编译器,其编译方式与传统编译器相同。这将留给程序员选择,这对他们来说更重要。本机上的多平台可执行性或性能。一般来说; 为什么没有可以同时编译和解释的语言?
据我了解,造成编译语言与python之间速度差异的原因是,第一个方法将代码一直编译到本机计算机的代码,而python编译为python字节码,由PVM解释。我看到这种方式python代码可以在多个操作系统上使用(至少在大多数情况下),但是我不明白,为什么没有额外的(和可选的)python编译器,其编译方式与传统编译器相同。这将留给程序员选择,这对他们来说更重要。本机上的多平台可执行性或性能。一般来说; 为什么没有可以同时编译和解释的语言?
Answers:
不会。Python和C ++之类的语言之间存在速度差异的原因是因为静态类型的语言为编译器提供了大量有关程序结构及其数据的信息,从而使程序可以优化计算和内存访问。因为C ++知道变量的类型为int,所以即使在程序运行之前,它也可以确定操作该变量的最佳方式。另一方面,在Python中,运行时直到解释器到达该行才知道变量中的值。这对于结构非常重要,因为在C ++中,编译器可以在编译过程中轻松分辨出结构的大小及其字段在内存中的每个位置。这使它在预测如何使用数据方面具有强大的功能,并可以根据这些预测进行优化。
要有效地编译Python之类的语言,您需要:
eval
,以及其他许多特性,使编译器编写者感到沮丧。它没有达到gcc的水平,但是肯定比CPython的解释器快。
有两个概念可以帮助我们更好地理解为什么编译为本机代码的Python可能不如编译后的C或其他常用编译语言运行得那么快。它们被称为早期绑定和后期绑定。
首先,我不是Python专家,而我是无意中来到了此站点。但是我喜欢这个网站。
如此处的另一个答复中所述,C ++编译器可以对程序有很多了解,并可以决定对特定数据结构使用哪些操作。例如,如果需要将两个整数变量加在一起,则编译器知道它们是本地整数,例如32位宽,并且可以将它们与一条“ ADD”指令加在一起。因此,它将ADD指令编译为代码。它已锁定,并且在程序运行时无法更改。那是早期的约束力。
另一方面,在像Python这样的语言中,我们可以期望程序以复杂的方式将不同类型的数据组合在一起。现在,编译器不知道我们的2个变量是整数,浮点数,字符串还是列表。因此,它必须编译在运行时确定该信息的代码,并在程序运行时选择正确的操作。这是后期绑定,我们可以理解,在程序运行时进行额外的工作会对性能产生影响。这是保持这些选项以Python之类的语言开放所要付出的代价,但它提供了最大的运行时灵活性。
我认为它与Python细节本身有关,这与您无法将C#编译为机器代码的原因相同。即使由于语言的性质,特定于语言的内容实际上也会使您的程序有错误。为什么不只是学习C语言呢?它比C ++容易得多,比Python稍先进,但仍然可以实现。