it-swarm.com.de

Warum gibt es keine anderen Programmiersprachen, die zu Python Bytecode) kompiliert werden?

In Java gibt es mehrere Sprachen, die zu Java Bytecode) kompiliert werden und auf der JVM ausgeführt werden können - Clojure, Groovy und Scala sind die wichtigsten, die ich kann erinnere mich aus meinem Kopf.

Python wird jedoch auch zu Bytecode (.pyc-Dateien), bevor es vom Interpreter Python) ausgeführt wird. Ich bin vielleicht nur unwissend, aber warum nicht Gibt es noch andere Programmiersprachen, die zu python Bytecode?

Liegt es nur daran, dass sich niemand darum gekümmert hat, oder gibt es eine inhärente Einschränkung oder Barriere, die dies erschwert?

51
Michael0x2a

Einfach - als ich das letzte Mal nachgesehen habe, Python hatte keine formale Spezifikation, einschließlich des Bytecodes. CPython ist die Spezifikation, und die Bytecode-Portabilität ist IIRC nicht erforderlich. Daher handelt es sich um ein sich bewegendes, undokumentiertes Ziel, das für a entwickelt wurde spezifische Sprache.

78
p_l

Es gibt mehrere JVM-Sprachen, weil es talentierte Leute gab, die Code schreiben wollten, der mit vorhandenem Java Code funktioniert, aber sie wollten kein Java schreiben.

Anscheinend gibt es keine Programmierer, die mit vorhandenem Python Code arbeiten möchten, aber Python genug hassen, um eine andere Sprache auf den Python Bytecode-Interpreter zu portieren.

Sie können dies auf zwei Arten betrachten: Es gibt alternative Sprachen für die JVM, weil Java so weit verbreitet ist, oder es gibt keine alternativen Sprachen für den Bytecode-Interpreter Python, weil Python saugt nicht.

55
kevin cline

Es gibt technische Mängel wie die GIL in CPython, aber nur wenige wahrgenommene Sprache Mängel, sodass die Laufzeit nicht das Verkaufsargument der Python Community) ist. Genau das Gegenteil Aufgrund der Unzufriedenheit mit der GIL/CPython-Implementierung gibt es mehr Backend-Laufzeitoptionen.

Die Java Sprache ist viel bösartiger als die JVM (selbst in der Java Community)).

Die JVM wird in den meisten Kreisen sehr geschätzt. daher der Wunsch nach verschiedenen/besseren Sprach-Frontends mit den Vorteilen der hochoptimierten Backend-JVM.

26
user7519

Ich sage, dass Mason Wheeler Recht hat. Es handelt sich hauptsächlich um ein Problem mit der globalen Interpreter-Sperre, das die Parallelität zu einem sehr heiklen Problem macht. Da es andere VMs gibt, die Parallelität wirklich sehr gut vergleichsweise gut machen, ist es sinnvoll, Sprachen für diese zu entwickeln. Außerdem Python hat in letzter Zeit eine große Sprachverschiebung erfahren, und viele Bibliotheken haben es nicht geschafft, die Kompatibilität zu einem leichten Albtraum zu machen. Zum Beispiel, weil ich PIL für die Bildverarbeitung verwende, muss ich codieren Python 2.7 oder niedriger. Dies ist nicht der Fall bei JVM- oder CLI-Setups, die insbesondere im letzteren Fall unter Berücksichtigung der Sprachinterop entwickelt wurden.

Habe noch etwas recherchiert und anscheinend gibt es tatsächlich zwei GILs, nicht nur die eine. Die anderen Steuerelemente Importe .

10
World Engineer

Die anderen Antworten sind sehr sinnvoll, aber es gibt tatsächlich Sprachen, die jetzt zu Python kompiliert werden. Wo ein Wille ist...

Ich weiß nichts über diese Sprachen, aber sie scheinen zu funktionieren, indem sie ihren Quellcode in Python ASTs) transpilieren und Python die Bäume zu Bytecode kompilieren lassen, Vermeidung der in anderen Antworten genannten Probleme.

Basierend auf den Kommentaren kennen wir derzeit drei alternative Sprachen, die Python VM (Sie können hier weitere hinzufügen)) verwenden:

  • Mochi Beschreibt sich selbst als eine dynamisch typisierte Programmiersprache für die funktionale Programmierung und die Programmierung im Schauspielerstil .
  • Hy : Beschreibt sich selbst als einen in Python eingebetteten LISP-Dialekt .
  • dg : Beschreibt sich selbst als eine (technisch) einfache Sprache, die zu CPython-Bytecode kompiliert wird.
8
Carl Smith

Ein weiterer Grund ist, dass die JVM ein hochoptimiertes, gut entwickeltes und äußerst vollständiges Ökosystem ist. Allein konkurriert es sehr gut mit allen anderen kompilierten Sprachen. (Ich werde nicht sagen, dass es das beste allgemeine Ziel ist VM da draußen, aber ich habe meine Karriere sicherlich darauf gesetzt.) Also Zugriff auf die JVM , kurz vor dem Schreiben von Bytecode, ist an sich wünschenswert.

Die Python VM ist gut, aber (nichts gegen Python)) weist einige schwerwiegende Mängel auf. Die Python Laufzeitumgebung) passt gut zur Dynamik der Sprache, kann Sie aber wirklich überraschen, wenn Sie sich mit der Speichernutzung, der globalen Sperrung oder dem Threading-Modell vertraut machen.

Bei Kopf-an-Kopf-Vergleichen ist die JVM in der Regel doppelt so schnell wie die Python VM. Die JVM konkurriert (überraschenderweise) sogar gut mit nativ kompiliertem Code, basierend auf den "heißen" Optimierungen führt. Und das zählt nicht einmal die anspruchsvollere Thread-Handhabung usw.

Ich liebe Python, das tue ich wirklich und hasse es, es zu sagen, aber manchmal tritt mich die Aufführung einfach in die Zähne - sonst, warum sollten kritische Python -Bibliotheken wie numpy oder scipy zurückfallen müssen) in C-Code?

Mit anderen Worten, Leute, die sich für Python) interessieren weil sie die Sprache mögen. Aber wenn Sie eine brandneue Sprache schreiben möchten, die Ihren Vorlieben entspricht, sind Sie ' Es ist viel besser, in die JVM zu kompilieren, da Ihre neue eigenwillige Sprache in einer der besten (subjektiv vielleicht besten) Betriebsumgebungen startet.

6
Rob