問題タブ [vm-implementation]
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.
javascript - Python で書かれた JavaScript (ECMAScript) 実装はありますか?
純粋なPythonで記述された JavaScript (ECMAScript) 実装はありますか? 実装が非常に遅くても問題ありません。
c - C 関数をカスタム仮想マシンに公開するにはどうすればよいですか?
私は、C とインターフェイスできるようにしたい仮想マシンで作業しています。逆に、仮想マシンの機能を C コードに公開するのはかなり簡単です。頭を包み込めないのは、C 関数を公開することです。仮想マシン。
次のように、C 関数を仮想マシンに動的に登録できるようにしたいと考えています。
次に、仮想マシンで引数をスタックにプッシュし、次のようにします。
問題は、関数に必要な引数の数と型がわからないため、関数ポインターを使用できるかどうかわからないことです。
この状況で使用できるジェネリック関数ポインター型はありますか? 誰かが私を正しい方向に導くことができますか?
performance - JIT コンパイラで AOT コンパイラを打ち負かすのが難しいのはなぜですか (アプリのパフォーマンスに関して)?
私は、JIT 固有の利点 (実行時にのみ利用可能な情報を使用できる) により、コンパイルされたコードのパフォーマンスに関して、JIT コンパイラーが最終的に AOT コンパイラーに勝ると考えていました。1 つの議論は、AOT コンパイラはコードのコンパイルにより多くの時間を費やすことができるが、サーバー VM も多くの時間を費やす可能性があるというものです。
場合によっては JIT が AOT コンパイラに勝っているように見えることは理解していますが、ほとんどの場合、依然として遅れをとっているようです。
私の質問は、JIT コンパイラーが AOT コンパイラーを打ち負かすのを妨げている特定の困難な問題は何ですか?
編集:
いくつかの一般的な引数:
- AOT コンパイラは、高度な最適化により多くの時間を費やすことができます->サーバー VM を何日も実行している場合は、それ以上ではないにしても、同じ時間を費やすことができます。
- バイトコードの解釈にはコストがかかります->最近ではほとんどの JIT コンパイラがネイティブのマシン命令をとにかくキャッシュします。
さらに別の編集:
特定の例については、次の記事を参照してください: Improving Swing Performance: JIT vs AOT Compilation . この記事から収集できることから、著者は基本的に、ホットスポットがない場合、ランタイム情報を持つことの利点が減少し、JIT のオーバーヘッドのない AOT が勝つと言っています。しかし、40%まで?? それはあまり意味がないようです。比較した JIT コンパイラがこの状況に合わせて調整されていなかったというだけですか? それとももっと根本的なものですか?
dart - Dart VMは利用できますか?
Googleが新しいWebプログラミング言語Dartの初期プレビューを発表したというニュースを読んでください。dartlang.orgのドキュメントには次のように記載されています。
Dartコードはいくつかの方法で実行できます。
Dartコードを最新のブラウザ(Chrome、Safari 5以降、Firefox 4以降)で実行できるJavaScriptに変換します(ブラウザのサポートはまもなく追加されます)。
サーバー側のVMでDartコードを直接実行する
Dartboardを使用して、任意のブラウザウィンドウ内で小さなDartプログラムを作成、変更、および実行します
そして、Dartコードを実行するために利用できるVMがすでにあるのでしょうか?とにかくそれを見つけることができません、多分それはいくつかのベータプログラムを通して利用可能ですか?
multithreading - 優れた組み込み言語とホスティング言語のペアを検索する
私は2つ(1つ?)の言語を探しています。それらの1つは、いくつかの「環境」を実行できるホストであり、2つ目は、この環境で動作する「エージェント」のスクリプトを作成するために使用できます。
いくつかの詳細:
ホストは、複数の「エージェント」(埋め込み言語のスレッド)を実行できる必要があります。理想的には、一度にすべてのスレッドによって実行される命令の数を制限できます(ただし、より高度な制御方法を歓迎します)。
埋め込まれたスレッドは、ホストによって明示的に公開されたオブジェクトにのみアクセスできる必要があります
埋め込まれたスレッドは分離する必要があります。共有メモリなし、すべての通信はホスト経由で行われます
埋め込まれた言語は、動的型付けを使用して、かなり単純にする必要があります
ホスティング言語はかなり高レベルである必要があります
パフォーマンスは主要な関心事ではありません
私はPythonがLuaを埋め込むホスト、たとえばLunatic Python、またはJVM言語のペア(Scala / Groovy?)であると考えていましたが、埋め込まれたスレッドを実際に分離できるかどうかはわかりません(2、3を参照)。だから私はアイデア、フレームワーク、成功した実装などを探しています...
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 の作成方法の学習などではなく)
もしそうなら、実際にエラーなくツールを使い始めるには、さらにどのような準備が必要ですか?
lisp - 8 ビット システムでの Lisp ライクな言語の VM に興味がある
8 ビット マイクロプロセッサで実行でき、動的言語をサポートする、推奨される仮想マシンを探しています。コード密度、移植性、および小さなインタープリターを持つ能力の点で利点を認識しているため、VM ソリューションが必要です。
私の目標は、6502 マイクロプロセッサのようなもので、「Apple II のロゴ」構文に従って、完全なロゴ インタープリタを実行することです。
PyMite 、Java の「マイクロ エディション」への参照を見てきました。もちろん、1970 年代の UCSD p-System ソースが利用可能になりました。
提案は大歓迎です。
language-agnostic - スタックベースの仮想マシンよりもレジスタベースの仮想マシンの方が優れているのはなぜですか?
スタックベースの仮想マシンよりもレジスタベースの仮想マシンの方が優れているのはなぜですか?
具体的には、Parrot VM のドキュメントで、設計者はレジスタ マシンの利点を説明しています。
[...] 高水準言語の多くのプログラムは、ネストされた関数とメソッドの呼び出しで構成されており、中間結果を保持するためのレキシカル変数を使用する場合もあります。非 JIT 設定では、スタックベースの VM は同じオペランドを何度もポップしてからプッシュしますが、レジスターベースの VM は単純に適切な量のレジスターを割り当ててそれらを操作するため、操作量を大幅に削減できます。そしてCPU時間。
しかし、同じオペランドが何度もプッシュされるのはなぜですか?
android - Dalvik VM は、メソッド呼び出し間でレジスタをどのように保存および復元しますか?
意味的には、Dalvik VM にはメソッドごとに新しいレジスタ セットがあり、コール スタックにアクセスするための命令はありません。ただし、その実装に関しては、レジスタはメソッド呼び出しで何らかの方法で保存し、メソッドの戻り時に復元する必要があります。(Google の実装) Dalvik はどのようにこれを行いますか?