問題タブ [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.
python - Pythonのバイトコード(バージョン2.5)で最適化されている場所の数
Pythonのバイトコードで最適化されている場所がいくつあるか教えてもらえますか?最近、Pythonのバイトコードを逆コンパイルしようとしていましたが、Pythonのバージョン2.5には多くの最適化があることがわかりました。たとえば、このコードに対して
version2.5より前の最適化されていないバイトコードは次のようなものです。
バージョン2.5では、最適化されたバイトコードは次のようになります。
これはほんの一例ですが、他にも多くの場所が最適化される可能性があります。それで、これらの最適化を明確にするための、またはそれらすべてを見つけることができる方法を教えてくれるドキュメントがあることを誰かが知っていますか?
java - 何かを解釈し、生成されたバイトコードを Java で実行しますか?
JavaでREPLを使用しておもちゃのインタープリターを作成しています。AST を解釈して代わりに実行する代わりに、言語からバイトコードを生成して実行したいと思います。
私の Java は少し錆びているので、生成されたバイトコードを JVM でオンザフライで実行することは可能ですか?
java - Scala - Java 相互運用性: Scala は Java が消費するバイトコードで列挙型を発行できますか?
Java/Scala が混在するプロジェクトがあります。これは、Scala ライブラリを利用する Java GUI コードです。コンパイル時に Java 列挙型を発行するように Scala コードを記述する方法はありますか? 私がこれまでに試したアプローチ (封印されたケース クラス、列挙型の拡張) は、通常のクラスを生成するように見えます。これにより、Java からのそれらの操作は、列挙型よりもはるかに複雑になります。
java - Java と「前方」の互換性に関する質問
パラメータ-source 1.5および-target 1.5を使用してJavaバージョン1.6でソースをコンパイルしましたが、コンパイラはまったく文句を言いません。
それでも、メソッドが欠落しているため、アプリケーションは Java 1.5 では実行されません。もちろん、ソース コードの一部を 1.5 に準拠するように書き直すこともできますが、理解できないのは次の点です。一番下のJavaバイトコードは「前方」に準拠すべきではありませんか?
メソッドはバイトコードに変換されていませんか? 1.6 のライブラリ/メソッド (以前の String.isEmpty()) を 1.5 バイトコードにコンパイルして、すべてをアーカイブにパックすることは可能ですか?
java - Java バイトコードと JVM について学ぶ
最近の質問で、私の素朴な答えは、Java、JVM、およびコードがどのようにコンパイルされて実行されるかについての私の誤解の多くを浮き彫りにしました。これにより、自分の理解をより低いレベルに引き上げたいという欲求が生まれました。アセンブリのような低レベルの理解に問題はありませんが、バイトコードと JVM が私を混乱させました。オブジェクト指向コードが低レベルでどのように分解されるかは、私にはわかりません。JVM、バイトコード、および Java の下位レベルの機能について学ぶ方法について誰か提案があるかどうか疑問に思っていました。バイトコードを直接記述して実行できるユーティリティはありますか?何かを実際に体験することが、理解を深めるための最良の方法であると私は信じています。さらに、このトピックに関する提案を読んでいただければ幸いです。
編集:二次的な質問。だから私はちょっとサブの質問があります.答えは私にjvmについて学ぶための興味深いアイデアを与えてくれました.brainf ** kやOokのような本当に単純な言語を読みやすい構文だけで書くことの妥当性は何でしょうか.最終的に oo をサポートするには)、それはバイトコードにコンパイルされますか? それは良い学習経験になるでしょうか?
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を使用して、適切なバイトコードを生成するために使用する必要のあるステートメントに関する手がかりを得ました。