問題タブ [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.
android - Dalvik をどのように改善しますか? Android の仮想マシン
私は現在、Android プラットフォームに関する論文を書いています。いくつかの調査の結果、Dalvik には改善の余地があることが明らかになりました。この目標を達成するために、開発者の時間をどのように使うのが最善だと思いますか?
JIT コンパイルは大きなもののように思えますが、これはリソースの少ないマシンではあまり役に立たないと聞いたことがあります。これを裏付けるリソースまたはデータを持っている人はいますか?
考慮すべき他のオプションはありますか?VM をバイパスするための堅牢なネイティブ開発キットの開発は別として。
興味のある方は、 Dalvik VMに関する講義を録画してオンラインに公開しています。
この質問は主観的に見えるので、どんな考えも歓迎します。私が受け入れる答えには、提案された変更の正当性がなければならないことを明確にします。Sun JVM が導入されたときの改善など、それを裏付けるデータがあれば、非常にプラスになります。
compiler-construction - コンパイラの最適化に関するステートメントを理解できません
VM による実行時およびコンパイル時の最適化に興味があります。私は、最適化はコンパイル時に最も効率的で簡単であるという考えを持っていました。
しかし、私の考えは特定の状況では間違っているようです。これは、ダニエルが引用したスティーブ・イェギーの声明で明らかです
[最適化] は、賢い仮想マシンによって実行時に実行されると、多くの場合簡単になります。
VM によって実行時に最適化を実行すると、コンパイル時よりも最適化が容易になるのはなぜですか?
javascript - ポリモーフィックなインライン キャッシュは可変型でどのように機能しますか?
ポリモーフィック インライン キャッシュ (PIC) は、高価なルックアップ手順 (通常はハッシュテーブル ルックアップ) を回避するために、オブジェクトの型によって実際のメソッドをキャッシュすることによって機能します。
型オブジェクトが変更可能な場合 (つまり、メソッドが実行時に別のものにパッチされたサルである可能性がある場合)、型比較をどのように処理しますか?
私が思いついたアイデアの 1 つは、メソッドが調整されるたびにインクリメントされる「クラス カウンター」です。それらのメソッドが変更されていなくても、そのクラス。
この問題は JavaScript に直接当てはまり、大きな JavaScript 仮想マシンの 3 つすべてに PIC があることがわかっているため、これには適切な解決策があるに違いないと確信しています。
.net - チップベンダーからの.NetJITサポートはありますか?
ARMが実際にJavaとSUNをある程度サポートしていることは明らかですが、.NetJITコンパイラをサポートしているチップベンダーを実際に参照したことはありません。IBMとIntelの両方がCコンパイラをサポートしていること、およびTIと多くの組み込みチップベンダーをサポートしていることを私は知っています。あなたがそれについて考えるとき、すべてのJITコンパイラは、チップベンダーの専門家にぴったりだと思うコンパイルと最適化の最終段階です。おそらく、VM用の標準化されたプラグインコンパイルエンジンは理にかなっています。
Microsoftは.Netを組み込みWindowsプラットフォームにもターゲットにしているので、それらは公正なゲームです。
ピート
neural-network - 仮想マシンをニューラルネットワークとして実装できますか?
免責事項:私は数学の天才ではありません。また、ニューラルネットワークを作成した経験もありません。だから、私がここでたまたま言ったばかげたことを許してください。;)
機械学習に使われているニューラルネットワークについてはいつも読んでいましたが、簡単な仮想マシンを書いて実験をしていると、別の方法で応用できるのではないかと思い始めました。
具体的には、仮想マシンをニューラルネットワークとして作成できますか?もしそうなら、それはどのように機能しますか(必要に応じて、ここで抽象的な説明を自由に使用してください)?
Joycean Machineのことを聞いたことがありますが、非常に漠然とした説明以外の情報は見つかりません。
編集:ここで私が探しているのは、ニューラルネットワークベースのVMがアセンブリをどのように解釈するかについての正確な説明です。入力はどのように処理されますか?個々の入力はメモリアドレスになりますか?ブレーンストーミングしましょう!
.net - CLR は仮想マシンですか?
.net CLR を仮想マシンと呼んだ本を読みましたか? 誰もこれを正当化できますか?一部の開発プラットフォームで仮想マシンの概念が必要な理由は何ですか?
完全にオブジェクト指向で .net と同じくらい強力なネイティブ フレームワーク (仮想マシンを使用しないフレームワーク) を開発することはできないのでしょうか?
CLR を仮想マシンと呼んでいる本は「Professional .Net Framework 2.0」です。
c - リンカの書き方
バイト コードを出力する C 用のコンパイラを作成しました。その理由は、複数のプラットフォームで実行される組み込みプラットフォーム用のアプリケーションを作成できるようにするためでした。
コンパイラとアセンブラがあります。
リンカーを作成する必要があり、立ち往生しています。
オブジェクト形式は、バイト コード インタープリターを中心に設計されたカスタム形式であるため、既存のリンカーを実際に使用することはできません。
私の最大のハードルは、リンクされたバイナリを出力するオブジェクト コードをどのように整理するかです。現時点では、動的リンクは必要ありません。最初に静的リンクを機能させる必要があります。
c - クロスプラットフォームVMのCメモリ管理
Cタイプのサイズについて質問したところ、かなり良い答えが得られましたが、自分の目的に役立つように質問をうまく定式化できない可能性があることに気付きました。
私の経歴は、ソフトウェアエンジニアに移る前はコンピュータエンジニアでした。そのため、コンピュータアーキテクチャが好きで、常にVMの作成を考えています。私は、JavaでVMを作成する興味深いプロジェクトを終えたところです。これは、私が非常に誇りに思っていることです。しかし、現在オープンソース化できない法的な問題がいくつかあり、現在は自由な時間があります。ですから、楽しみと教育のためだけに、Cで別のVMを(より高速に)作成できるかどうかを確認したいと思います。
問題は、私がトリビア以外のCの問題を最後に書いたのは、10年以上前のCプログラムではないということです。私はPascal、Delphi、そして今ではJavaとPHPのプログラマーでした。
私が予見できる多くの障害があり、私は1つに取り組もうとしており、それは既存のライブラリにアクセスしています(Javaでは、リフレクションがこの問題を解決します)。
データのバッファ(スタックと同様)を用意することで、これを解決する予定です。VMのクライアントは、ネイティブ関数へのポインターを指定する前に、これらのスタックにデータを配置するようにプログラムできます。
ネイティブ関数のプッシュ、プル、および呼び出しは、バイトコード(VMが後で作成される方法)によってトリガーできます。
完全を期すために(マシンで試すことができるように)、Stackのコードは次のとおりです。
ネイティブ関数側では、テスト目的で次のものを作成しました。
p>実行すると、上記のコードは次を返します。
これは私のマシン(Linux x86 32ビットGCC-C99)でうまく機能します。これが他のOS/アーキテクチャでも機能する場合は非常に便利です。しかし、私たちが注意しなければならない少なくとも3つのメモリ関連の問題があります。
1)。データサイズ-同じアーキテクチャで同じコンパイラを使用してVM関数とネイティブ関数の両方をコンパイルする場合、サイズタイプは同じである必要があるようです。
2)。エンディアン-データサイズと同じ。
3)。メモリアライメント-これは構造体にパディングバイトが追加される可能性があるため問題ですが、パラメータスタックを準備するときに同期するのは困難です(ハードコーディング以外にパディングがどのように追加されるかを知る方法はありません)。
私の質問は次のとおりです。
1)。タイプのサイズがわかっている場合、構造体のパディングと正確に同期するようにプッシュおよびプル関数を変更する方法はありますか?(コンパイラがデータサイズやエンディアンの問題のように処理できるように変更します)。
2)。構造を1つずつパックすると(を使用#pragma pack(1)
); (2.1)パフォーマンスペナルティは許容されますか?(2.2)プログラムの安定性は危険にさらされますか?
3)。2、4、または8でパディングするのはどうですか?一般的な32ビットまたは64ビットシステムにはどちらが適していますか?
4)。x86上のGCCの場合など、正確なパディングアルゴリズムのドキュメントを教えていただけますか?
5)。より良い方法はありますか?
注:クロスプラットフォームは私の究極の目標ではありませんが、抵抗することはできません。また、それほど醜くないので、パフォーマンスは私の目標ではありません。これらはすべて楽しみと学習のためのものです。
私の英語と非常に長い投稿でごめんなさい。
よろしくお願いします。
vm-implementation - 仮想マシンを作成するにはどうすればよいですか
私は仮想マシンのプログラミングに興味があります.virtualboxやvmwareほど派手なものではありませんが、ciscであろうとriscであろうと、Zilog、SPARC、MIPS、または80686アーキテクチャモデルなどの単純なアーキテクチャをエミュレートできるものです。
これを行うことで、同じ種類のエミュレーターを作成するのは比較的簡単になると思います。これを他の何よりも経験のために使用することに興味があります (私の最初の C プロジェクトなので、他に何か)。