問題タブ [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.
c++ - JITを使用した仮想マシンの設計
私は、独自の仮想マシン用にコンパイルするスクリプト言語を開発しています。これは、ポイント、ベクトル、フロートなどのある種のデータを処理する命令を持つ単純な言語です。メモリセルは次のように表されます。
命令は一般的であり、多くの異なるオペランドで機能します。例えば
オペランドに応じて適切な宛先のタイプを設定するフロート、ベクトル、ポイント、カラーを操作できます。
メインの実行サイクルは、命令のオペコード(あらゆる種類の命令を定義するためのユニオンを含む構造体)をチェックして実行するだけです。私は、レジスターを持たず、メモリーセルの大きな配列だけを持っている単純化されたアプローチを使用しました。
JITが最高のパフォーマンスを得るのに役立つかどうか、そしてそれをどのように達成するかを考えていました。
私が言ったように、これまでに到達した最良の実装は次のようなものです。
jitコンパイルを試すのは簡単/便利ですか?しかし、私は本当にどこから始めればよいのかわからないので、私はいくつかのアドバイスを求めています。
それとは別に、それを開発する際に考慮すべき他のアドバイスはありますか?
この仮想マシンは、レイトレーサーのシェーダーを計算するのに十分な速度である必要がありますが、私はどのような種類のベンチマークも実行していません。
windows - VMを使用せずにSmalltalkで開発する方法はありますか?
私は本当にSmalltalkを学び始めています。現在、 Squeakを使用していますが、VMを使用せずにSmalltalkで開発する方法はありますが、IDEのようなものはありますか?
c - VM を実装するためのチュートリアル/リソース
独学の目的で、動的言語用の単純な仮想マシンを実装したいのですが、C を好みます。Lua VM、Parrot、または Python VM のようなものですが、より単純です。既存の VM のコードと設計に関するドキュメントを参照する以外に、これを達成するための優れたリソースやチュートリアルはありますか?
編集:なぜ投票を閉じるのですか?わかりません-これはプログラミングではありませんか。私の質問に特定の問題がある場合はコメントしてください。
jvm - 趣味の言語を開発するのに適した VM は何ですか?
私は自分の小さな言語を書くことを考えています。
いくつかのオプションを見つけましたが、もっと提案してください。
- JVM
- オウム
- OSA
多くの言語が JVM を使用していますが、Java っぽい言語を作成しない限り、stdlib が提供するすべての機能は見苦しく感じられます。動的なものもあまり得意ではありません。
Parrot は言語を開発するのに適した VM のようですが、放棄された/未完成の/趣味のプロジェクトの匂いが少しあります。
OSA は Applescript の動力源であり、特に有名な VM ではありませんが、私は Mac を使用しており、優れたシステム統合を提供します。
CLR+Mac は良い組み合わせではないようです...
私の言語は、強力な型付けと Python と Lisp の構文を組み合わせた、オブジェクト指向の関数型並行データフロー言語になる予定です。いいですね。
[編集]
今のところ Python を受け入れましたが、OSA と Parrot についてもっと知りたいです。
architecture - BEAMとJVMの基本的な機能/アーキテクチャの違いは何ですか?
BEAMとJVMの基本的な機能/アーキテクチャの違いは何ですか?
- はい、わかっています。1つは元々Javaを中心に構築され、もう1つはerlangを中心に構築されました。
- JVMを(ある程度)理解していて、それらの構造を比較したい
- たとえば、JVMにはグローバルGCが1つあり、BEAMにはプロセスごとに1つあることがわかっています。
c++ - 仮想マシンをアプリケーションの一部として実装する主な利点は何ですか?
私が最近調べたいくつかのデータベースは、仮想マシンを内部に実装して、それぞれのデータの読み取りと書き込みを実行しています。たとえば、「VDBE」と呼ばれる SQLite の仮想マシンに関するこの記事を確認してください。そのようなアーキテクチャの利点が何であるかについて興味があります。パフォーマンスは 1 つであると思いますが、なぜこのような仮想マシンがより高速に実行されるのでしょうか? 実際、この余分なレイヤーが実行速度を低下させる可能性があるようです。もしかしてセキュリティのため?それとも携帯性?とにかく、これについては興味があります。
virtual-machine - 動的再コンパイルをどのように使用しますか?
一部のエミュレーターと仮想マシンは動的再コンパイルを使用していることに気づきました。彼らはどのようにそれをしますか?Cでは、型キャストを使用してRAM内の関数を呼び出す方法を知っていますが(試したことはありませんが)、オペコードを読み取ってそのコードを生成するにはどうすればよいですか?その人は事前に作成されたアセンブリチャンクを持っていて、それらを一緒にコピー/バッチ処理する必要がありますか?アセンブリはCで書かれていますか?もしそうなら、どのようにしてコードの長さを見つけますか?システム割り込みをどのように説明しますか?
-編集-
システム割り込みとデータの(再)コンパイル方法が私が最も興味を持っているものです。さらに調査したところ、ある人(ソースが利用できない)がjsを使用し、マシンコードを読み取り、jsソースを出力し、evalを使用して「コンパイル」したと聞きました。 jsソース。面白い。
virtual-machine - LLVMのVMはどこにありますか?
注:コミュニティウィキとしてマークされています。
LLVMの低レベル仮想マシンはどこにありますか?
llvm-g ++とc-langがあるように見えますが、私にとって、LLVMはシミュレーターのValgrindに似ており、命令が実行され、特定の条件で実行中のコード/割り込みを計測するプログラムを作成できます。起こる/など..。
LLVM上に構築されたこのようなツールはどこにありますか?
ありがとう!
vm-implementation - 高級言語で記述されたアプリケーション仮想マシンはどれですか?
高水準言語で記述されたアプリケーション仮想マシンには、どのようなものがありますか? C/C++ は (明らかな理由で) 最適な言語のように見えます。
私がグーグルで見つけたのは、Javaで書かれた少なくとも2つです(両方ともメタサーキュラー):JikesRVMとMaxineです。
他に見つけたものはありますか?
jvm - JVM がスタックベースで Dalvik VM がレジスタベースなのはなぜですか?
興味深いのですが、なぜ Sun は JVM をスタックベースにし、Google は DalvikVM をレジスタベースにすることにしたのですか?
JVM は、ターゲット プラットフォームで特定の数のレジスタが利用可能であると想定できないと思います。これは、プラットフォームに依存しないことが想定されているためです。そのため、レジスタの割り当てなどをJITコンパイラに延期するだけです。(間違っていたら訂正してください。)
それで、Android の連中は、「それは効率が悪い。すぐにレジスタ ベースの vm に行きましょう...」と考えましたか? しかし、待ってください。複数の異なる Android デバイスがあります。Dalvik がターゲットにしたレジスタの数は? Dalvik オペコードは、特定の数のレジスタに対してハードコードされていますか?
現在市場に出回っているすべての Android デバイスには、ほぼ同じ数のレジスタがありますか? または、dex の読み込み中にレジスタの再割り当てが実行されますか? これらすべてがどのように組み合わされるのでしょうか。