問題タブ [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++ - Cのサブセット用のスタックベースの仮想マシンの実装
みなさん、こんにちは。現在、学習体験のための簡単なプログラミング言語を実装していますが、アドバイスが必要です。現在、通訳者を設計していますが、問題が発生しました。
私の言語はCのサブセットであり、スタックインタープリターの実装に関して問題があります。この言語では、以下がコンパイルされます。
これで問題ありませんが、「1 + 2」が計算されると、結果がスタックにプッシュされ、関数が返されますが、スタックにはまだ数値があり、存在しないはずです。この問題を回避するにはどうすればよいですか?
関数呼び出しの前にスタックの「状態」を保存し、関数呼び出しの後に「状態」を復元することを考えました。たとえば、スタック上の要素の数を保存し、関数コードを実行して戻り、以前と同じ要素数になるまでスタックからポップします(または、関数が何かを返した場合は+1になる可能性があります)。
何か案は?ヒントをありがとう!
c++ - オープンソースの仮想マシン
次のようなオープン ソースの仮想マシンを探しています。
- 可能な限り高速かつ軽量
- 最小セットのバイトコードをサポート (LLVM IR など)
- C++ アプリケーションから簡単に組み込み可能
- クロスプラットフォーム (Linux、Windows、OS X)
- x86 サポート
java - 異なる仮想マシン間でオブジェクトを効率的にコピーする
「ばかげた」質問をする気がしますが、質問しなければなりません...
2 つの仮想マシンがあります。
オブジェクトのインスタンスをあるインスタンスから別のインスタンスにコピーしたいのですが、
このオブジェクトを表すビットを VM のヒープにコピーし、それを他の VM に送信することは可能ですか? 他の VM はメモリ内のビットを割り当て、そのスタック内の参照をこのメモリ スロットに追加するだけで済みます。 .?
現在、そのようなことを行うために、オブジェクトをシリアル化してからシリアル化を解除します。これは、インスタンスをそのままコピーするよりもはるかに効率的ではありません (計算上)... 解析は計算上の無駄です...
JSシリアライゼーション_ JSON.stringify
_ var myObject = eval('(' + myJSONtext + ')');
) .. (ここでは JavaScript は単なる例です。これはある種のシリアル化です)
optimization - 動的言語の実行時間を最適化するためにバイトコードをどのように使用できますか?
AST の解釈と比較して、VM を使用した実行の高速化に役立つ可能性がある、いくつかの最適化方法または一般的なバイトコード設計に興味があります。
jvm - Java VM に代わるものは何ですか?
Oracle が Dalvik VM をめぐって Google を訴えているため、Oracle からのライセンスがなければ Java VM を実装できないことが明らかになりました (編集: Matthew Flaschen は、Oracle の主張は有効ではない可能性があると指摘しています。脅威 VM 実装)。これは、Java のオープンソース実装 ( Apache Harmonyなど) の死となる可能性があります。
この訴訟の影響や正当性について議論したくありません。しかし、Java プログラマーとして、あらゆるケースに備えて、代替手段をより深く調べたいと思っています。コンパイラの作成は小さな問題だと考えているので、私の主な関心は、JVM と同様の目的を果たす代替の VM 実装です。
私が探している VM は、いくつかの条件を満たす必要があります。
- 特許の問題がない
- オープンソース実装が存在する
- 最適化/良好なパフォーマンスの可能性
- プラットフォームに依存しない (大きなハードルなしで、VM をさまざまなプラットフォームに移植できます)
いくつかの推奨事項を追加してください。
java - JVMがコードに適用した最適化を確認するにはどうすればよいですか?
JVM(特にHotSpot VM)は、実行時に適用できる最適化の数が非常に多いことで有名です。
特定のコードを調べて、JVMが実際にそれに対して何をしたかを確認する方法はありますか?
c++ - C++ コーディング仮想マシン
私は C++ であまりコーディングをしたことがありませんが、私は? すべてに対してこれらのビルド スクリプトを実行する必要があることに気付きました。Windowsマシンでこれらをどのように行うのですか? とにかく仮想マシンを実行することを考えているので、自分のマシンを python やその他のインストールでいっぱいにする必要はありません。
Windowsの他の人はどのようにそれをしますか?
php - PHP は、使用する (または使用する) 変数の型をどのように認識しますか?
私は多くの言語で多くのプログラミングを行ったことがありませんが、C(++) では変数の型 ( 、など) を宣言する必要があることは知っていint
ますchar
。
もちろん、PHP ではその必要はありません。$str = "something";
あなたは後で始めることができ$str = array("something" => "smells");
、彼女は幸せです.
PHP はどのようにコンパイルしますか? 変数の型がどうなるかをどのように知るのでしょうか? それも気にしますか?
この質問は、私がしていることとは何の関係もありません。ただ興味があるだけ。
編集。
この質問を少し明確にする必要があります。
C では、次のように言います。
用に x バイト量を予約しますy
。y
オーバーフローした場合は、悪いニュースです。
PHP にはこのような性質はありません (少なくとも私はそうは思いません)。
言語に関してはすべて同じです。予約する金額をどのように知るのですか? それともリンゴとオレンジを比較しているのでしょうか? 私がこれについて間違っているとしたら、理解を深めるために読むことができる良いトピックはありますか?
python - Python バイトコード、インタープリター、および仮想マシン
これは非常に広大な質問であり、主に次のことについて詳しく学べるリソースを探しています。
Python インタープリターは C で記述されており、これも C で記述された Python 仮想マシンで実行されるバイトコードを生成します (右?)。私の質問は、Python自体でこれらの両方を実装することは可能でしょうか? 私がこれでどこに行くのかは、特に何も静的にコンパイルせずに、PythonでOSのようなものを書く(技術的な)可能性だと思いますか?
私の理解が正しければ、Python には、同様に Python で書かなければならないアセンブラがありません。これらのことは、技術的に (実現可能に?) 実行できるものですか? それとも、Python の動的型付けが何らかの問題を引き起こすのでしょうか?
最近の EE 卒業生が学校で学ぶ、マイクロプロセッサ アーキテクチャ、アセンブリ、およびマシン コードについて少し知っています。しかし、Python のような高水準言語の全体像を見ると、私は迷子になります。
java - Javaとは正確には何ですか?
この質問は最初はばかげているように聞こえるかもしれませんが、まったくそうではないかもしれません。
Java は Java 言語ではありません。Java はScala や Groovy などの他の多くの言語でプログラミングできるため、ほとんどの人はそのことを知っています。
Java は具体的な VM の実装ではありません。SUN、Microsoft、IBM だけでなく、他の実装もあるからです。
Java はクラス フレームワークではありません。多くの実装では、自由にクラスを追加したり除外したりします。
一般的な VM 仕様や Java バイトコードを使用する必要さえありません。Dalvik VMを参照してください。
それが何であれ、それは彼らが共有する一連の原則に過ぎないのかもしれません。これは、少なくとも Dalvik と Microsoft VM/J# には当てはまらないため、「一度書けばどこでも実行できる」というわけではありません。
問題は、Java とは正確には何なのかということです。正確な定義さえありますか?
EDIT 多くの人が、Java はプログラミング言語のみを意味するという意見を持っているようです。したがって、Java 対応の携帯電話は、Java 言語のみで作成されたクラス ファイルで構成されるプログラムをユーザーが使用できる電話でなければなりません。これが本当なら、Java 仮想マシン / Java ランタイム環境 / Java 開発キットは Java 専用に作られ、他の jvm 言語には独自の対応する xvm / xre / xdk があります。