問題タブ [bytecode]
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.
language-design - 単純なプログラミング言語を設計するための方法論
より多くのプログラミング知識を求める私の不朽の渇きを癒すための継続的な努力の中で、バイトコードにコンパイルされる(少なくとも今のところ)単純なプログラミング言語を書こうとするアイデアを思いつきました。問題は、言語デザインについて最初にわからないことです。パーサーを構築するための方法論と、すべての言語が持つべき基本的な機能について何かアドバイスはありますか?言語デザインのためにどのような読書をお勧めしますか?どのくらいのレベルで撮影する必要がありますか?インラインアセンブラを許可するgccと同様の方法で、バイトコードをインライン化できる機能を含めることができると期待するのは非現実的ですか?私が主にCとJavaでコーディングしているのを見て、コンパイラーの作成に適していますか?
emacs - .emacs.dディレクトリ内のすべてをバイトコンパイルするにはどうすればよいですか?
私はEmacsをチェックすることにしました、そして私はそれがとても好きでした。今、私はEmacsスターターキットを使用しています。これは、Emacsのデフォルトインストールに、より良いデフォルトといくつかの素晴らしいカスタマイズを提供します。
私はそれを少しカスタマイズし、yasnippet、color-themes、unbound、その他のものを追加しました。githubリポジトリを設定して、すべてのカスタマイズを保持し、複数の場所からそれらにアクセスできるようにしました。何か問題が発生して.emacs.dディレクトリが失われた場合に備えて。
これらはすべて非常に優れていますが、問題があります。Emacsのロードには約1〜2秒かかります。AFAIK Mx byte-compile-fileを使用して個々の.elファイルを.elcにコンパイルでき、動作します。しかし、.elファイルはたくさんあります。Emacsのロードを高速化するために、簡単なコマンドなどでそれらすべてをコンパイルする方法があるのではないかと思います。私のEmacsは常に開いているわけではなく、特にTotal Commanderで編集コマンドのデフォルトエディターとして設定した後は、頻繁に開いたり閉じたりして、より速く慣れるようにしています(ええ、ここではWindows XPです)。
私のEmacsのバージョンは22.3です。そして、はい、カスタマイズなしのデフォルトのEmacsインストールは即座に起動します。
ロード時にどちらのバージョンが優先されるかわかりません。ちなみに、.elまたはコンパイルされた.elcのいずれかです。
それで、Emacsに.emacs.dディレクトリ内のすべてをバイトコンパイルさせるためのelispコマンドまたはEmacsコマンドラインスイッチはありますか?
actionscript-3 - AVM2 バイトコードを編集/作成するために利用できるツールは何ですか?
AS3 を使用せずに、Flash 10 AVM2 用のバイトコードを直接生成したいと考えています。SWF ファイルを生成するアセンブラが理想的です。
これは存在しますか?そうでない場合、アセンブラ → abc → SWF の最も簡単な方法は何ですか?
java - 動的バイトコード計測 - 問題
解決できない問題があります。次の 2 つのクラスと継承関係があるとします。
次のように追加のコードを計測したいと思います。
java.lang.instrument
この目標を達成するために、独自のクラス ファイル トランスフォーマーを備えたエージェントを使用して、パッケージに基づいて実装しました。このメカニズムは、動的バイトコード インストルメンテーションとも呼ばれます。
これまでのところ簡単です。さて、私のテストメソッドは次のことを行います:
コード:
これは、インスツルメンテーション パッケージの次の制限により機能しません。 を呼び出すnew B()
と、インストルメンテーションはクラス B で開始され、スーパー クラス A にはまだ print() メソッドがないため、操作されたクラスをロードするときにコンパイル エラーになります。クラス B の前にクラス A のインスツルメンテーションをトリガーできるかどうか、またどのようにトリガーできるかという問題が生じます。classfiletransformer の transform() メソッドは、クラス A で明示的に呼び出す必要があります。だから私は読み始めて、これにぶつかりました:
のjava.lang.instrument.ClassFileTransformer.transform()
javadocは言う:
トランスフォーマーは、すべての新しいクラス定義とすべてのクラスの再定義に対して呼び出されます。新しいクラス定義のリクエストは ClassLoader.defineClass で行われます。クラスの再定義の要求は、Instrumentation.redefineClasses またはそのネイティブの同等物で行われます。
transform メソッドにはクラスローダーのインスタンスが付属しているので、B のインストルメンテーションが開始されたときにクラス A を使用して自分でloadClass
メソッド ( loadClass
calls )を呼び出してみませんか。defineClass
その結果、instrument メソッドが呼び出されることを期待していましたが、残念ながらそうではありませんでした。代わりに、A
インストルメンテーションなしでクラスがロードされました。(エージェントはロード処理をインターセプトするはずですが、インターセプトしません)
この問題を解決する方法はありますか?一部のバイトコードを操作するエージェントが別のクラスを手動でロードできず、そのクラスがその/任意のエージェントを介して送信される可能性がない理由がわかりますか?
B が操作される前に A が読み込まれ、インストルメント化されているため、次のコードは適切に機能することに注意してください。
どうもありがとう!
java - メソッドの開始/終了のためのASMバイトコードインストルメンテーション
次のことを高レベルで実行するJVMTIエージェントを作成しました。
onClassLoadHookは、ロードされたクラスのバイトコードを、ASMを使用してクラスをインストルメント化する別のJavaプロセスに送信します
バイトコードを取り戻し、それらをロードします
ロードされたJavaクラスをインストルメント化する別のJavaプロセスでは、次のことを行います。
...。
Java Decompilerを使用して、このインストルメンテーションの後に記述されたクラスを逆コンパイルしようとすると、次の逆コンパイルされた関数が間違っていることがわかります。
私の関数は実際には次のようになっているためです:
私がここで何か間違ったことをしたかどうか誰かに教えてもらえますか?私の唯一の手がかりは、関数に引数としてTHISポインターを渡す代わりに、プリミティブ型を渡すと、すべてがうまくいくということです。私が管理する必要があるこのポインターについて何か特別なことはありますか?バイトコードを比較し、ASMIFIERを使用して、適切なバイトコードを生成するために使用する必要のあるステートメントに関する手がかりを得ました。
java - Java バイトコードは異なるバージョンの Java と互換性がありますか?
Java 5 コードを使用してアプリケーションをバイトコードにコンパイルした場合、結果の .class ファイルは Java 1.4 で実行できますか?
後者が機能し、Java 1.4 アプリケーションで Java 5 フレームワークを使用しようとしている場合、注意すべきことはありますか?
python - 任意のローカルを持つ exec() バイトコード?
たとえば、コードを実行したいとします。
私自身の名前空間内(したがって、結果は本質的に ですmydict['value'] += 5
)。function がありexec()
ますが、そこに文字列を渡す必要があります:
ステートメントを文字列として渡すのは奇妙に思えます (たとえば、そのように色付けされていません)。次のようにできますか?
? 最後の行の明らかな候補は でしexec(block.__code__, mydict)
たが、運が悪かった:UnboundLocalError
約value
. block 内のコードblock()
ではなく、基本的に を実行すると思います。そのため、割り当ては簡単ではありません。正しいですか?
もちろん、別の可能な解決策は、分解することblock.__code__
です...
参考までに、このスレッドのために質問を受けました。また、これが一部の(私は未定)が新しい構文を要求する理由です
これがどのようにエラーをスローしないmydict
か、どちらも変更しないことに注意してください。
java - Java バイト コード ビジュアライザー
Javaで非常にコンパクトな(バイトコード数が最小の)プログラムを書くのに役立つものは何ですか。
おそらく私は見ています:
- クラスまたはメソッドが生成するバイト コードの数を教えてくれるツール。
- バイトコードを可視化する。
- このツールは、バイトコード数または CPU サイクルに関して最適化が必要な領域を教えてくれます。
- バイト コード チャートは、Java に存在するバイト コードとそのさまざまなプロパティを示すのにも役立ちます。
これを実現するのに役立つ既存のツールはありますか?
java - Java、最も高価なステートメント?
Java プログラミング言語で最もコストのかかる (バイトコードと CPU サイクルの両方の点で) ステートメントは何ですか?
java - Javaベリファイアエラーを生成するバイトコードインストルメンテーション
Javaプログラムのバイトコードインストルメンテーションを行うためにASMを使用しています。私がしていることは単純です-メソッドをインストルメント化するとき、命令がPUTFIELDの場合、命令の直前にDUP_X1を実行し、次にPUTFIELDにアクセスして、DUPされたスタックエントリを含む引数を使用して関数呼び出しを挿入します。
コードは、それぞれインストルメンテーションの前と後のようになります。
しかし、インストルメント化されたコードを実行すると、次のようになります。
java.lang.VerifyError:スタック上でオブジェクト/配列を見つけることを期待しています
これについて何か助けがありますか?