問題タブ [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.

0 投票する
7 に答える
1521 参照

python - 関数出力がPythonの変数に割り当てられているかどうかを確認する方法はありますか?

Python では、それ自体が呼び出された場合に結果をコンソールにきれいに出力する関数を書きたいと思います (ほとんどの場合、対話型またはデバッグ用)。この質問の目的のために、何かのステータスをチェックするとしましょう。私がちょうど呼び出す場合

私は次のようなものを見たいです:

ただし、変数割り当てのコンテキストで呼び出す場合は、出力をリストとして渡すことも必要です。

それで...関数内で、その出力が割り当てられているかどうかを動的に知る方法はありますか? パラメータの受け渡しに頼ったり、専用の別の関数を作成したりせずに、これを実行できるようにしたいと考えています。私は少しグーグルで調べましたが、バイトコードで遊ぶことに頼らなければならないように見えることはほとんどありません。それは本当に必要ですか?

0 投票する
2 に答える
1040 参照

c# - C# を使用して PHP スクリプトを OpCode に変換する最も簡単な方法は?

C#を使用してPHPスクリプト(.php)をOpCode/Bytecode(オペレーションコード)に変換する最も簡単な方法は何ですか? 必要に応じて DLL を使用できます。

PHPコードを簡単に分析するために、私が取り組んでいるプロジェクトでこれを行う必要があります。

どんな考えやアイデアでも大歓迎です。

0 投票する
4 に答える
1608 参照

compiler-construction - バイトコード解析命令と機械語の違いは?

「バイトコード プログラムは通常、一度に 1 つずつ命令を解析することによって実行されます。この種のバイトコード インタープリターは非常に移植性があります。動的トランスレーターまたは「ジャストインタイム」(JIT) コンパイラーと呼ばれる一部のシステムは、バイトコードを機械語に変換します。実行時に必要に応じて: これにより、仮想マシンは移植できなくなります。」

この段落に関する質問は次のとおりです。バイトコードが処理された後、解析された命令と機械語 (または機械コード) の違いは何ですか?

0 投票する
6 に答える
4466 参照

python - なぜPythonは解釈する前にソースをバイトコードにコンパイルするのですか?

なぜPythonは解釈する前にソースをバイトコードにコンパイルするのですか?

ソースから直接解釈してみませんか?

0 投票する
5 に答える
247 参照

bytecode - 解釈された言語のコードは、行に到達するたびに再解釈されますか?

Ruby、Perl、PHPのように、プログラムに対してバイトコードが生成されないとします。この場合、実行が1行目に達するたびに、以下の1行目が再解釈されますか?

つまり、ループが100,000回実行された場合、その行は100,000回再解釈されますか?

もしそうなら、バイトコードの作成は、プログラムの最初の起動だけでなく、実行中も役立ちますか?(コードを再度解釈する必要がないため)

0 投票する
7 に答える
1839 参照

java - 役に立たないgotoを削除するJavaバイトコードオプティマイザーはありますか?

問題:8000バイトを超えるJavaバイトコードにコンパイルするメソッドがあります。HotSpotには、8000バイトを超えるメソッドに対してJITが起動しないようにする魔法の制限があります。(はい、巨大なメソッドを持つことは合理的です。これはトークナイザーループです。)メソッドはライブラリ内にあり、ライブラリのユーザーが魔法の制限を無効にするようにHotSpotを構成する必要はありません。

観察:バイトコードを逆コンパイルすると、EclipseJavaコンパイラが多くの無意味なgotoを生成することがわかります。(javacはさらに悪いです。)つまり、ジャンプからのみ到達可能なgotoがあります。明らかに、後藤にジャンプするジャンプは、代わりに後藤がジャンプする場所に直接ジャンプする必要があり、後藤は削除する必要があります。

質問:無意味なジャンプチェーンをフラット化して不要なgotoを削除するJava 5クラスファイル用のバイトコードオプティマイザーはありますか?

編集:私は次のようなパターンを意味します:

明らかに、2番目のgotoに到達するには、8701にジャンプする必要があります。これは、0に直接ジャンプする場合もあります。

2回目の調査では、この疑わしいパターンがより一般的です。

明らかに、コンパイラーが「等しくない」比較を「等しい」比較に逆にし、8704にジャンプして、gotoを削除するようにしたい場合。

0 投票する
5 に答える
1883 参照

java - Java コード 1.5 を 1.4 にダウングレード (ボーナス ポイント: J2ME、Blackberry!!!)

Blackberry の開発に使用する既存の j2se ライブラリ (Apache Compression ライブラリなど) を移植したいのですが、問題があります (1 つだけではありません)。

まず、ほとんどの Java ライブラリは、j2me プラットフォームでは一般的に欠落している j2se コレクションとデータ型を広く使用していますが、Apache Harmony などのオープンソースの j2se API 実装のおかげで、理論的には解決可能です。より大きな問題は、Blackberry JDK が Java 1.4 に基づいているように思われるため、ジェネリックやその他の 1.5 機能 (Enum など) を使用するコードは、Blackberry で簡単にコンパイルできないことです。

これは、j2me-bastardized バイトコードをサポートしながら、自動 1.5->1.4 変換を行う既存のツールまたはプロジェクトが存在するかどうかという興味深い問題を提起します:)

私が見つけた 1 つのプロジェクトはRetroweaverですが、そのプロジェクトがどれほど活発であるかはよくわかりません。

1.5 から 1.4 への自動変換の問題は固有のものではないと確信しています。

0 投票する
3 に答える
1212 参照

java - Android 上の JiBX (またはその他のビルド時のバイトコード操作ライブラリ)

JiBXBlackberry と RIM の両方で実行する必要があるプロジェクトでの使用を検討しています。(JiBX ジラ チケットによると) の使用がコミュニティによって検討されているようですが、Android は比較的新しいものJ2MEです。JiBX

したがって、問題は次のとおりです。Android で JiBX を使用したり、ビルド時にクラスのバイトコードを変更する必要がある他のライブラリを使用したりして、成功した (または問題が発生した) 人はいますか?

そのようなライブラリを (ランタイム バイトコード インストルメンテーションを使用するものと比較して) Android で実行可能にする方法については議論がありましたが、実際にこれを実行しようとしている人々についての報告はあまり多くありません。

0 投票する
6 に答える
1508 参照

java - Java クラスの逆コンパイルと再コンパイル

いくつかの Java クラスが利用可能なプログラムがあります。それらを逆コンパイルすることは可能ですか?.classクラスのソース コードを変更して、他のすべてのファイルを持たずに再コンパイルすることは可能ですか?

たとえば、dog.classで定義されている animal のサブクラスを実装するファイルがあるとしanimal.classます。

  • dog.javaなしで再コンパイルできanimal.classますか?
  • dog.javaなしで再コンパイルできanimal.javaますか?

私は Java 開発者ではないので、意味が分からない場合は訂正してください。

0 投票する
2 に答える
1001 参照

java - Javaバイトコードで配列サイズを検出する方法(FindBugs)

もちろん、コンパイル時にその情報がわかっている場合は、バイトコードを調べて、割り当てられている配列のサイズを確認したいと思います。

背景:FindBugs検出器(コンパイルされたバイトコードを調べる)を作成し、配列割り当ての特定の発生を報告したいと思います。誤検知を除外するために、私は「小さな」配列には関心がありませんが、コンパイル時にサイズが利用できないか、構成可能なしきい値よりも大きい配列にのみ関心があります。

FindBugsのソースコードはあまり文書化されていないので、始める方法についてのいくつかの指針を探しています-おそらく、私が見ることができるのと同じようなことをしている検出器がすでにあるでしょう。