問題タブ [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.
programming-languages - メソッド内の一連の命令を操作できるプログラミング言語は何ですか?
実行時にメソッドが機能する方法を変更することがコア要件となる次のプロジェクトがあります。実際の効果は似ていますが、「あるメソッドを別のメソッドにシャドウイングする」などの高レベルのオブジェクト指向の概念について話しているのではないことに注意してください。
私が求めている主なプロパティは次のとおりです。
新しい式を追加したり、既存の式を削除したり、メソッド内で発生する式を変更したりできるように、メソッドを変更できる必要があります。
メソッドを変更した後、そのメソッドを呼び出すと、新しい一連の操作が呼び出されます。(または、言語が毎回評価するのではなくメソッドをバインドする場合は、新しいメソッドのバインドを解除/再バインドする方法を提供してください。)
理想的には、アセンブリを直接操作するのではなく(たとえば、「これら3つのパラメーターをスタックにポップする」)、言語のアトミックユニットを操作したい(たとえば、「
foo
オブジェクトのメソッドを呼び出すbar
」)。言い換えれば、私が構築する操作がその言語で意味的に意味があることを確信できるようにしたいと思います。しかし、私は私が得ることができるものを取ります。
候補言語がこれらの基準を満たしているかどうかわからない場合は、簡単なリトマス試験を次に示します。
clean
whichと呼ばれる別のメソッドを記述できますか?
メソッド
m
を入力として受け入れます
m2
と同じ操作を実行する別のメソッドを返しますm
と
m2
同じですがm
、ご使用の言語(puts、System.Console.WriteLn、printlnなど)でのprint-to-standard-outメソッドの呼び出しは含まれていませんか?
今から予備調査をして、最強の候補者を見つけたいと思います。大規模で活発なコミュニティを持つことは、私がやりたいことを実行することの実用性と同じくらい重要です。バイトコードを直接操作することは通常、公開する必要のある操作ではないため、ここには偽造されていない領域が存在する可能性があることを認識しています。
私が利用できる選択肢は何ですか?可能であれば、あなたが推奨する1つ以上の言語でおもちゃの例を提供できますか、それとも最近の例を教えてください。
更新:私がこの後の理由は、新しい情報に応じて実行時に自分自身を変更できるプログラムを書きたいからです。この変更は、単なるパラメーターや構成可能なデータを超えていますが、動作の本格的で進化した変更です。(いいえ、私はウイルスを書いていません。;))
functional-programming - 言語ごとのJVMでのオプトイン末尾呼び出しのサポート?
特にSunを購入した後は、末尾呼び出しの最適化が一般的な最適化手法として追加されることはないようですが、VMで実行されている言語に、コンパイラがtailcall
命令を出力するかどうかを自分で決定させることは技術的に可能ではありません。バイトコード?
例:Java、Groovyは命令を使用しないことを決定できますが、ScalaやClojureなどのより機能的な言語は命令を発行でき、HotSpot VMはtailcall
?でマークされたもののみを最適化します。
c - Cで実装され、コンパイルされたコードサイズが100〜200K未満のクリーンな自己完結型VM?
次の機能を備えたVMを探しています。
- コンパイルされたコードのフットプリントが小さい(200K未満)。
- 外部依存関係はありません。
- Unicode(またはraw)文字列のサポート。
- クリーンなコード/よく整理されています。
- C(99)コード、C++ではありません。
- C/Javaのような構文。
- 演算子/ビット単位:AND/ORなど。
- スレッドのサポート。
- 汎用/ポータブルバイトコード。バイトコードは、エンディアンなどが異なる異なるアーキテクチャでコンパイルされた場合でも、異なるマシンで動作するはずです。
- Barebones、特別なものは必要ありません。基本的な言語のサポートのみ。
- レクサー/パーサーとコンパイラーはVMとは別のものです。プログラムにVMを埋め込み、バイトコードを個別にコンパイルします。
これまで、 Lua、Squirrel、Neko、Pawn、Io、AngelScript ...を確認しましたが、仕様にやや近いのはLuaだけですが、構文はひどく、ビット単位のサポートがなく、コードスタイルもありません。一般的には最悪です。リスとIOは、ほとんどが巨大です。ポーンは問題があり、小さいですが、バイトコードはクロスプラットフォームではなく、実装にはいくつかの重大な問題があります(たとえば、バイトコードはまったく検証されておらず、ヘッダーAFAIKも検証されていません)。
私はそこに適切なオプションを見つけたいと思います。
ありがとう!
更新: Javascriptインタープリターは...インタープリターです。これはバイトコードベースのVMのVMの質問であるため、コンパイラ/バイトコードのVM分離要件です。JSは解釈され、JITによってコンパイルされることはめったにありません。必ずしもJITは必要ありません。また、現在のすべてのECMAScriptパーサーはほとんど小さいです。
compiler-construction - カスタムバイトコードVMにLLVM/CLANGを使用するプログラムのサイズはどれくらいですか?
カスタムVMのさまざまな可能性を評価していますが、別の質問からLLVMを除外しました。私はまだ組み込み言語VMの評価に取り組んでいるので、今のところこれを自分でテスト/チェックすることはできません。LLVM/CLANGに関する次の情報を知りたいです。
- Windowsでうまくサポートされていますか?またはSolaris?(クロスプラットフォームは私にとってプラスです)
- Cのような言語で独自の/カスタムVMを作成したい場合、プロジェクトに何を含める必要がありますか?(LLVM / CLANGセクションまたはコンポーネントなど)
- 明らかな理由(インタープリターを作成しない)のために、コンパイラーをVMから分離しておきます。必要なコンポーネントのサイズはどのくらいですか?それらに動的にリンクする代わりに、プログラム内でそれらを構築できますか?
- JITを回避できますか?必ずしもネイティブコードに変換されないバイトコードVMが欲しいのですが。これは、プラットフォームでJITがサポートされていない場合に役立ちます(たとえば、wx / rwxメモリマッピングを許可しない制限付きメモリ権限を持つシステム)。
たとえば、clamavアンチウイルスは、LLVM / clangに裏打ちされたバイトコードを使用して、動的/ランタイム署名をサポートしていることを知っています。ただし、これを実装するための既存の機能や、そのようなものを実装するプロセスをガイドするチュートリアルまたはドキュメントがあるかどうかはわかりません。
ありがとう!:)
java - Java VMでは、オブジェクト参照はどのように処理されますか
Javaアプリケーションの実行中に、オブジェクト参照はランタイムによって使用されますか、それともコンパイル時に削除されますか?
クラスファイルを逆コンパイルして、ローカル変数およびメンバー変数としてどのように使用されるかを確認できると思います。
必要のないときにオブジェクト参照を作成するのは無駄ですか、それともコンパイラは不要な参照を削除しますか?
例えば
最終的な文字列abc="abc"; method(abc);
とは対照的に:
method( "abc");
compiler-construction - マシンコードにはランタイム環境が必要ですか? MoSync SDK
MoSyncのランタイム アーキテクチャについて説明できる人はいますか?
VM コアは問題ではありません。Java vmで実行され、コードを1行ずつ解釈する仮想マシンだと思います。
しかし、Recompiler Core はどのように機能しているのでしょうか? それは、実行時にネイティブ コードでアプリをコンパイルする一種の Ahead-Of-Time コンパイラですか? しかし、私は写真を理解していません。または、マシンコードであっても、ランタイムの他のモジュールが必要になる可能性はありますか?
ありがとう
python - x86 上のアセンブリに実装された仮想マシン
x86 アセンブリ (できれば Fasm) で記述されたシンプルな仮想マシンをどこで見つけられるか知っている人がここにいるかどうか疑問に思っていましたが、シンプルであるか、少なくとも十分にコメントされている限り、何でも例として役立ちます。前もって感謝します。
parsing - カスタムプログラミング言語: どうやって?
願わくば、この質問が複雑すぎたり、あいまいすぎたりしないことを願っています。私は自分の頭の中で何が欲しいかを知っているので、指を交差させてテキストでこれを理解することができます.
独自仕様の構文を持つ言語を探しているので、自分で作成する必要があると思います。ここ数日、コンパイラ、レクサー、パーサー、アセンブリ言語、仮想マシンなどについて読んでいましたが、目標を達成するために必要なものに関してすべてを整理するのに苦労しています (ファイルの最後に添付されている一部仕様)。基本的に、先に進むために具体的にどのツールを使用する必要があるかについて、私はひどく混乱しています。
ちょっとした背景: 作成された言語は、マルチプレイヤーのテキストベースの MUD サーバーを実装するために使用されることを願っています。したがって、クライアントの TCP/IP 接続、ノンブロッキング IO、SQL などを介したデータベース アクセスを作成/維持するための簡単な組み込み機能が必要です。セキュリティにも関心があります。この言語用に書かれたコードが盗まれて、専門のソフトウェアを使わずに一般大衆に使われることを望まないからです。これはおそらく、オブジェクト コードにコンパイルする必要があることを意味します。
では、これらの仕様に適合する言語を作成するための最良のオプションは何ですか
私の結論は以下です。これは私の最善の知識に基づいた推測に過ぎないので、私が間違った方向に向かっていると思われる場合は、私に異議を唱えてください. 専門家がコメントをしに来たとき、私がどれほど混乱しているかを確認するために、これを含めているだけです.
コードのセキュリティのために、コンパイルして仮想マシンで実行できる言語が必要です。こうなったら、めちゃめちゃ仕事が増えるじゃないですか。既存のモジュールを使用するのではなく、下位レベルで仮想マシン、アセンブラー言語を作成し、次に上位レベルでコードライブラリを作成して、IO、ソケットなどを自分で処理しますか?
私はただ混乱しています。
私が理にかなっているのかどうかはわかりません。
少しでも私の頭を落ち着かせてくれる方がいらっしゃいましたら、よろしくお願いします!または、私がコースから外れていて、これを行うためのより簡単な方法がある場合は、お知らせください!
c# - C ++-マクロをどのように排除しますか?(アプリをie c#に移植するため)
単純な仮想マシンを作成しました。命令バイトとスイッチを作成するためにc++マクロを使用すると、次のようになります(簡略化された例)。
そして、巨大なスイッチがあります:
わずかな労力で生成されたコードがたくさんあることを確認する方法(10種類の変数(8つのintと2つのfloat)と4つの関数の10 * 10 * 4行のコード)が、将来的には移動したいと思いますマクロをサポートしていない言語にそれを(私はc#またはJavaを考えています)。私が思いついた唯一のアイデアは、vmコードに貼り付けるコードを生成するコードジェネレーターを作成することでしたが、コードが読み取れなくなり、sthを変更して維持するのが困難になります。多分あなたは共有するいくつかの素晴らしいアイデアを持っていますか?:)
smalltalk - Squeak / Pharo / Newspeak Smalltalk VMの違いは何ですか?
Smalltalkについて学びながら、3つの異なるVMを見ました。彼らはSqueak/Pharo/Newspeakです。それらの違いは何ですか?