問題タブ [parrot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - LLVM、オウム、JVM、PyPy + Python
LLVM / Parrotの一部を使用した最適化された手法のpythonなど、一部の言語の開発における問題は何ですか。
PyPy、LLVM、Parrot は、共通プラットフォーム開発の主要なテクノロジです。
私はこれを次のように見ます:
- PyPy - Python 用に最適化された VM をビルドして VM を構築するためのフレームワーク
。非常に一般的なソリューションです。プロセスは次のとおりです。
- dynamic_language_code ->
- PyPy フロントエンド ->
- PyPy 内部コード - バイトコード ->
- PyPy の最適化 ->
- PyPy コードを残し、次
のことを行います。一部の VM (jvm など) の PyPy バックエンド
b. 独自の VM を作成するための som キット
c. PyPy 内部コードの処理/実行
- dynamic_language_code ->
このプロセスについて私は正しいですか? Pythonの場合、最適化されたVMがありますか? 特にデフォルトでは、最適化された PyPy コード (ステップ 5.c) 用の VM が組み込まれています。これは Python 用であり、すべての言語処理がそこで停止し、それによって実行されますか?
- オウム- PyPy によく似ていますが、5.a と 5.b はありませんか? 動的処理 ( Parrot Magic Cookies ) のいくつかの内部改善。
ParrotとPyPyはどちらも、共通の動的言語ランタイムを作成するプラットフォームを作成するように設計されていますが、PyPy はさらに多くの VM を作成することも望んでいます。
PyPy の感覚はどこにありますか? より多くの VM を作成する必要があるのは何ですか? (parrot のように) 1 つの VM に集中するのは良いことではありません - PyPy 内部バイトコードまたは Parrot のもののいずれかの共通の 1 つのコード レベルがあるためです。PyPy VM で新しく作成された PyPy バイトコードに変換するのに勝るものはないと思います。
- LLVM - これは PyPy と非常によく似ていますが、VM ジェネレーターはありません。
PyPy と同様のターゲット (ただし VM ジェネレーターはありません) を備えた成熟した適切に設計された環境ですが、低レベルの構造に取り組んでおり、優れた最適化/JIT 手法が実装されています。
これは次のように見えます: LLVMは一般的に使用されますが、Parrotと **PyPy* は動的言語用に設計されています。PyPy / Parrot では、LLVM よりも高レベルであるため、いくつかの複雑な手法を簡単に導入できます。たとえば、高レベルのコードをよりよく理解し、より優れたアセンブラー コードを生成できる洗練されたコンパイラー (人間が合理的な時間で作成できない) などです。 LLVMのもの?
質問:
私は正しいですか?いくつかの動的言語を移植する方が、たとえば Parrot よりも llvm に適している理由はありますか?
Parrot での Python 開発の活動は見られません。python C拡張機能を使用するとオウムが機能しないためですか?同じ問題が PyPy にあります
他の VM が LLVM / オウムに移行したくない理由。例: ruby -> オウム、CLR/ JVM -> LLVM。より洗練されたソリューションに移行する方がよいのではないでしょうか? LLVM は高度な開発プロセスにあり、大企業が投資しています。
バイトコードを変更する必要がある場合、リソースの再コンパイルに問題がある可能性があることはわかっていますが、必須ではありません。古いバイトコードを新しいバイトコードに移植しようとすることができ、新しいコンパイラは新しいバイトコードを生成します独自のバイトコードを解釈したため、フロントエンドはそれをチェックして新しいバイトコードに変換できます)?
たとえば、llvm 内の jvm ライブラリをリンクする際の問題は何ですか (何らかの方法で java/jvm/scala を llvm に移植する場合)?
どこか間違っていたら訂正してもらえますか
いくつかの追加:
=============
明確化
私は、このソフトウェアがどのように構成されているかを理解したいと思っています。
python - インタープリターがいるのになぜ Parrot (または他の VM) を使用するのですか?
既にインタープリターを持っているのに、動的言語 (Python、Perl など) に Parrot のように VM を使用する必要があるのはなぜですか? 自分のコードと自分のマシンの間で異なる VM を使用し、別のインタープリターを使用することによって、潜在的に何を得ることができますか?
(私は VM の問題に慣れていないので、答えは明らかです)
編集
compiler-construction - Linux にインストールされた parrot-devel パッケージから Parrot Compiler Tools を使用できますか?
Parrot VM を使用して独自の言語を作成することに興味があります。
parrot-devel パッケージを parrot と依存関係と共にインストールしました (Linux Mint 11 で Synaptic パッケージ マネージャーを使用)。
実行するように言っているチュートリアル ( http://en.wikibooks.org/wiki/Parrot_Virtual_Machine/Squaak_Tutorial/Introduction ) を見つけました:
そして最終的にそのスクリプトを /usr/lib/parrot/2.6.0/tools/dev/mk_language_shell.pl で見つけました
実行したときの様子は次のとおりです。
パッケージがこれらのファイルを正しい場所に配置したかどうかはわかりません。その前に「sudo」を置くこともできますが (?)、それは私が parrot をインストールした方法に関する実際の問題を無視している可能性があります。
質問:
インストールしたこれらのパッケージから Parrot コンパイラ ツールを使用できますか (パッケージのアンインストール、git リポジトリのクローン作成、ソースからの parrot の作成方法の学習などではなく)
もしそうなら、実際にエラーなくツールを使い始めるには、さらにどのような準備が必要ですか?
raku - ParrotVMと静的言語
Parrot VMで静的に型付けされた言語を作成できますか、それとも動的に型付けする必要がありますか?
parrot - Parrot VM のポート
Parrot 仮想マシンを構築できるオペレーティング システムのリストはありますか? それを理解するために、すべてのバージョンのリリース ノートを調べたくはありません。
raku - Parrot にはマルチスレッドの並列ガベージ コレクタがありますか?
私の質問は、Parrot Virtual Machine ( http://www.parrot.org ) のガベージ コレクターについてです。
マルチスレッドですか?
android - レジスタベースの仮想マシンはどのようにレジスタを実装しますか
レジスタベースの仮想マシンはどのようにレジスタを実装しますか。
私は、レジスタ ベースの仮想マシンに関する多くのオンライン情報を読んでおりint r[16];
、レジスタを実装する方法として が使用されているのを見てきました。これは、このようなマシンがロングまたはフロートをどのように処理できるかなど、いくつかの質問を引き起こします。
Parrot と Dalvik はどちらもレジスタ ベースの仮想マシンです。Parrot は、無制限の数のレジスタを許可するレジスタ ウィンドウがあり、dalvik は最大 65,536 のレジスタをサポートすると述べています。これらの仮想マシンでレジスタがどのように実装されているか知りたい
実際に実装されたコードを見たいと思います。なぜなら、それらが異なる値をどのように格納できるのか、そしてそれらがオペコードの呼び出し時に作成されるのか、それとも常にそこにあるのかに興味があるからです。
ありがとうございました