問題タブ [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.
python - Pythonでの高速動的コード実行の可能性
ASTの形式で利用できるコードがあり、それを実行したいと思います。
私はこれを行うためのいくつかの方法を考えることができます、例えば:
- 簡単に解釈してください。
- それをPythonAST(
ast
モジュール) に変換し、- Python-
compile
それまたは - Python-
eval
それ。
- Python-
- それをPythonソースコード(純粋な文字列など)に翻訳し、
- Python-
compile
それまたは - Python-
eval
それ。
- Python-
- それを何らかの形の低レベルコードに変換し、それを実行するPythonで単純なVMを記述します。
私はそれをPythonASTに変換することで高速実行を取得し、compile
それを実行すると思います。Esp。PyPyを使用する場合、最適化をコンパイルするPyPys JITによって改善される可能性もあります(そうすることを願っていますか?)。
他の可能性を考えられますか?最善の方法について提案をいただけますか?
smalltalk - ゲーム内で仮想マシンを使用していますか?
私は 3D の「ロボット プログラミング」ゲームを作成する設計段階にあります。Colobot、Robot Odyssey、Cholo などのゲームにインスパイアされています。
ゲーム内のすべてのロボットには、現実世界と同じように、独自の隔離された環境/オペレーティング システム/仮想マシンを持たせたいと考えています。各環境はサンドボックス化して、ロボットがゲームの他の部分とどのように相互作用するかという点で、ロボットにとってローカルになるようにする必要があります。
もともと、本「Elements of Computing Systems」で説明されているように、HACK VM を実装する予定でしたが、このスタイルのゲームのパフォーマンスに関して、より良い解決策があるかどうかに興味を持ちました。
私の質問は、私の目的に十分に役立つ仮想マシン アーキテクチャが既に存在するかどうかです。
Ps 使用する言語とゲームエンジンはまだ決まっていませんが、C# か smalltalk のどちらかになると思います。
c - C では、アセンブリ命令の数がコードの複数のセクションに対して固定されていることを確認してください
私が書いている仮想マシンで、次の擬似コードのような方法でコマンドをディスパッチできるようにしたいと考えています。
ここで、memory はバイトコードを含む配列で、pc はプログラム カウンターです。ただし、これを行うには、ジャンプするこれらの位置のそれぞれが、次のブロックの前に正確に同じ数の命令を持っている必要があります。同じコードを使用して Linux、Mac、および Windows にコンパイルできる、プラットフォームに依存しない優れたアセンブリ コードがない限り、アセンブリにドロップダウンすることはできません。プロセッサに関係なく、それぞれが上に座っています。どんな助けでも大歓迎です。
c# - C#でスタックサイズを割り当てますか?
私が取り組んできたバイトコード言語用の仮想マシンを開発しています。スタックにクラスを使用してSystem.Collections.Generic.Stack
いますが、スタック サイズを割り当てる方法はありますか? それとも、使用する独自のスタック オブジェクトを作成する必要がありますか?
python - インタープリターがいるのになぜ Parrot (または他の VM) を使用するのですか?
既にインタープリターを持っているのに、動的言語 (Python、Perl など) に Parrot のように VM を使用する必要があるのはなぜですか? 自分のコードと自分のマシンの間で異なる VM を使用し、別のインタープリターを使用することによって、潜在的に何を得ることができますか?
(私は VM の問題に慣れていないので、答えは明らかです)
編集
assembly - コンパイラについて学ぶ最良の方法は何ですか?
コンパイラー、オペレーティング・システム、およびコンピューター・システムが内部でどのように機能するかについて学ぼうとしています。これが私の現在の計画です:
- 機械語 (私の仕様のカスタム言語) で記述された入力を受け入れることができる単純な仮想マシンを C で記述します。
- その仮想マシン用のアセンブラを作成します。
- マシン用の基本的な言語の非常に基本的なコンパイラを作成します。
- 画面 (SDL を使用すると思います) と、ビデオ メモリを介したその画面へのインターフェイスを含めることで、仮想マシンの対話性を拡張します。マウス/キーボード機能を追加することもできます。
ヒントや推奨事項は何でもいいでしょう。前もって感謝します!
java - 上書きとルックアップ
私はアンドロイドのクラスを読んでいてSparseArray
、次のメソッドに出くわしました:
明らかに、これも書かれている可能性があります。
Androidの開発者は、配列のルックアップmValues[index]
は配列の書き込みよりも高速であると信じていたようですが、変数のルックアップは変数の書き込みよりも高速ではありませんでした。
これは本当に本当ですか?それはVMに依存しますか、それともコンパイル言語の一般的な知識ですか?
vm-implementation - Rubinius VM での言語の作成
言語を作成するために Rubinius VM をいじってみたいと思っていますが、ドキュメントを読んだだけでは、どうやって始めればよいのかまだよくわかりません。プロジェクトを見ても、vm の解析と使用がどこで行われるのかまだわかりません。誰もこれのためのリソースを持っていますか?
c# - インライン化によって値型を実装できますか?
C# の値の型を初めて見たとき、最初に思ったのは「なんて素晴らしい最適化だろう」ということでした。次に、「本当に新しい言語構造が必要なのだろうか?代わりに注釈を使ってそれを行うことはできないのだろうか?」ということでした。 "。
アイデアは、与えられたクラスをいつものように使用することです
気まぐれに変わるA
よ
そして、コンパイラは自動的にクラスB
を次のように変換します
コンパイラがインスタンスを最適化したくない場合は、最適化する必要がないことに注意してください。どちらの方法でも機能します。
テンプレートで問題が発生する可能性があります。
しかし、現在の状況よりもはるかに悪いかどうかはわかりません。私は実際に今何が起こっているのか分かりません(とf<struct_of_100_bytes>
は別の機能f<int>
ですか?)。