Javaには、JavaバイトコードにコンパイルしてJVMで実行できる複数の言語があります。Clojure、Groovy、およびScalaは、私の頭の中で覚えている主要な言語です。
ただし、PythonはPythonインタープリターによって実行される前にバイトコード(.pycファイル)に変わります。私はただ無知かもしれませんが、Pythonバイトコードにコンパイルする他のプログラミング言語がないのはなぜですか?
誰も邪魔しないからか、そうするのを難しくする固有の制限や障壁があるのでしょうか?
Javaには、JavaバイトコードにコンパイルしてJVMで実行できる複数の言語があります。Clojure、Groovy、およびScalaは、私の頭の中で覚えている主要な言語です。
ただし、PythonはPythonインタープリターによって実行される前にバイトコード(.pycファイル)に変わります。私はただ無知かもしれませんが、Pythonバイトコードにコンパイルする他のプログラミング言語がないのはなぜですか?
誰も邪魔しないからか、そうするのを難しくする固有の制限や障壁があるのでしょうか?
回答:
シンプル-前回チェックしたとき、Pythonにはバイトコードを含む正式な仕様がありませんでした。CPythonが仕様であり、バイトコードの移植性はIIRCを必要としません。したがって、これは特定の言語向けに設計された、文書化されていない移動可能なターゲットです。
既存のJavaコードで動作するコードを書きたいが、Javaを書きたくないという才能のある人々がいたため、複数のJVM言語があります。
どうやら、既存のPythonコードを使いたいプログラマーはいないが、Pythonを嫌い、別の言語をPythonバイトコードインタープリターに移植することはできません。
これは2つの方法で見ることができます。Javaが広く普及しているため、JVMの代替言語があるか、Pythonが吸わないのでPythonバイトコードインタープリターの代替言語がありません。
this
パラダイムでは機能しません。
CPythonのGILなどの技術的な欠陥がありますが、言語の欠陥はほとんど認識されていないため、ランタイムはPythonコミュニティのセールスポイントではありません。まったく逆に、GIL / CPython実装に対する不満のために、より多くのバックエンドランタイムオプションがあります。
Java言語は、JVM(Javaコミュニティであっても)よりもはるかに悪性です。
JVMは、ほとんどのサークルでかなり評価されています。したがって、高度に最適化されたバックエンドJVMの利点により、異なる/より良い言語フロントエンドへの要望があります。
私はメイソン・ウィーラーが正しいと言います。これは主に、同時実行を非常に厄介な問題にするグローバルインタープリターロックの問題です。並行処理を比較的うまく行う他のVMがあるため、それらの言語を開発することは理にかなっています。また、最近Pythonは大きな言語シフトを起こし、多くのライブラリーが追いつかず、互換性を軽度の悪夢にすることがあります。たとえば、ビジョン作業にPILを使用しているため、Python 2.7以下でコーディングする必要があります。これは、特に後者の場合、言語相互運用を念頭に置いて設計されたJVMまたはCLIセットアップの場合には当てはまりません。
さらに調査を行いましたが、実際には1つだけでなく、実際には2つのGILがあります。他のコントロールはImportsです。
他の答えは非常に理にかなっていますが、実際にはPythonにコンパイルされる言語が実際にあります。意志があるところ...
これらの言語については何も知りませんが、ソースコードをPython ASTに変換し、Pythonにツリーをバイトコードにコンパイルさせ、他の回答に記載されている問題を回避することで機能するようです。
コメントに基づいて、現在、Python VMを使用する3つの代替言語を知っています(ここに他の言語を自由に追加してください)。
もう1つの理由は、JVMが高度に最適化され、十分に進化し、非常に完全なエコシステムになっていることです。それ自身では、他のコンパイルされた言語のどれとも非常によく競合します。(私はそれが最高の汎用VMであるとは言いませんが、私は確かにそれで私のキャリアを銀行しました。)バイトコードを書くことなく、JVMへのアクセスを得ること自体が望ましいです。
ただし、Python VMは優れていますが、(Pythonに対しては何もありません)重大な欠点がいくつかあります。Pythonランタイム環境は、言語の動的な性質によく適合しますが、そのメモリ使用量、グローバルロック、またはスレッドモデルに慣れると、本当に驚くことができます。
直接比較では、JVMは通常Python VMの2倍の速度です。JVMは(驚くべきことに)実行する「ホットな」最適化に基づいて、ネイティブにコンパイルされたコードとも競合します。そして、それはさらに洗練されたスレッド処理などを数えていません。
私はPythonが大好きで、本当に好きですが、それを言うのは嫌いです。しかし、パフォーマンスが歯をたててしまうことがあります。
言い換えれば、Pythonに惹かれている人は、言語が好きだからそうします。ただし、好みに合わせてまったく新しい言語を作成する場合は、JVMにコンパイルする方がはるかに適切です。これは、新しい特異な言語が、利用可能な最高の(主観的に、おそらく最高の)オペレーティング環境の1つで始まるからです。