在Java中,有多种语言可以编译为Java字节码,并且可以在JVM上运行-Clojure,Groovy和Scala是我能记住的主要语言。
但是,在由Python解释器运行之前,Python也会转换为字节码(.pyc文件)。我可能只是一无所知,但是为什么没有其他可编译为python字节码的编程语言呢?
仅仅是因为没有人打扰,还是因为某种固有的限制或障碍使得这样做变得如此困难?
在Java中,有多种语言可以编译为Java字节码,并且可以在JVM上运行-Clojure,Groovy和Scala是我能记住的主要语言。
但是,在由Python解释器运行之前,Python也会转换为字节码(.pyc文件)。我可能只是一无所知,但是为什么没有其他可编译为python字节码的编程语言呢?
仅仅是因为没有人打扰,还是因为某种固有的限制或障碍使得这样做变得如此困难?
Answers:
JVM语言有多种,因为有一些才华横溢的人想编写可与现有Java代码一起使用的代码,但他们不想编写Java。
显然,没有程序员想使用现有的Python代码,但又讨厌Python足以将另一种语言移植到Python字节码解释器中。
您可以通过两种方式看待这种情况:由于Java如此广泛,因此JVM有替代语言,而Python字节码解释器没有替代语言,因为Python不烂。
this
范例。
尽管存在技术缺陷,例如CPython中的GIL,但是几乎没有语言缺陷,因此运行时并不是Python社区的卖点。恰恰相反,由于对GIL / CPython实现的不满意,有更多的后端运行时选项。
Java语言比JVM更加残酷(即使在Java社区中)。
JVM在大多数圈子中都广受好评。因此,通过高度优化的后端JVM带来的好处结束了对不同/更好语言前端的需求。
我说梅森·惠勒是对的。全局解释器锁主要是一个问题,这使得并发成为一个非常棘手的问题。相对而言,由于还有其他VM确实能够很好地实现并发,因此为这些VM开发语言是有意义的。另外,Python最近发生了重大的语言变化,许多库都没有赶上兼容性,有时使兼容性成为一场噩梦。例如,因为我使用PIL进行视觉工作,所以我必须使用Python 2.7或更低版本进行编码。JVM或CLI设置不是这种情况,尤其是在JVM或CLI的情况下,设计时要考虑语言互操作。
做了更多的研究,显然有两个GIL,而不仅仅是一个。其他控件Imports。
其他答案很有道理,但实际上实际上已经有一些语言可以编译为Python。有意愿的地方...
我对这些语言一无所知,但是它们似乎可以通过将其源代码转换为Python AST并让Python将树编译为字节码来工作,从而避免了其他答案中提到的问题。
根据评论,我们目前知道使用Python VM的三种替代语言(可在此处随意添加其他语言):
另一个原因是,JVM是高度优化,完善且极其完整的生态系统。就其本身而言,它与任何其他编译语言都具有非常好的竞争能力。(我不会说这是目前最好的通用VM,但是我当然将自己的职业归功于此。)因此,不需编写字节码即可获得对JVM的访问本身是可取的。
但是,Python VM很好,但是(没有Python反对)有一些严重的缺点。Python运行时环境非常适合该语言的动态性质,但是当您熟悉其内存使用情况,全局锁定或线程模型时,确实会让您感到惊讶。
在面对面的比较中,JVM通常是Python VM的两倍。基于JVM所执行的“热”优化,它甚至与本机编译的代码竞争良好。甚至还不包括更复杂的线程处理等。
我真的很喜欢Python,但我讨厌这样说,但是有时候性能让我大吃一惊-否则,为什么重要的Python库(例如numpy或scipy)必须退回到C代码中?
换句话说,喜欢 Python的人之所以这么做是因为他们喜欢该语言。但是,如果您想编写一种适合自己喜好的全新语言,则最好编译到JVM,因为新的特有语言将在可用的最佳(主观上,也许是最佳)操作环境之一中开始。