1

ジョエルが言及した最新のポッドキャストの精神で、彼はいくつかの簡単な質問とおそらく興味深い答えを求めています...

今日のプログラミング環境では、言語ステートメントの実行順序に依存することはできません。本当?心配する必要がありますか?

30 GOTO 10 は常に 10 になりますか?*

*意図的に 20 を使用したわけではありません ;)

[編集] この質問の締めくくりに投票した 4 人に対して ...

「ランタイムコンパイラは、プロファイリング情報を使用して、コンパイル中のコードを最適化します。JVM は、より良いコードを生成するために、実行に固有の情報を使用することが許可されています。つまり、あるプログラムでメソッド M をコンパイルすると、別のプログラムで M をコンパイルする場合とは異なるコードが生成される可能性があります。別"

(Java concurrency in practice、2006 年、Goetz らより)

..「モノモーフィックコール変換」を見てください

[編集]

別の編集では、プロセッサはステートメントの実行順序を入れ替えることができます...

4

7 に答える 7

25

いいえ、それはしません。しかし、それは常にあたかもそうであるかのように振る舞います。コンパイラ設計における基本的な規則の 1 つは、"as if" 規則です。結果が言語規則に従っているのように動作する限り、コンパイラは好きなように変更できます。

GOTO 10 は、コンパイラーがプログラムの結果を変更しないことを保証できる限り、他の場所にジャンプすることを決定する場合があります。

いいえ、心配する必要はありません。

于 2009-05-14T21:35:22.657 に答える
13

あなたが持っている場合ではありません

40 COMEFROM 30

コードのどこかに。

于 2009-05-14T21:29:32.013 に答える
8

代替テキスト

于 2009-05-14T21:47:49.210 に答える
1

実行されない場合、たとえば20 GOTO 40.

于 2009-05-14T21:30:20.513 に答える
1

BASICでは、はい。他の言語では、コンパイル エラーが発生します。

于 2009-05-14T21:30:33.180 に答える
0

何を言おうとしているのですか?プログラマーであると主張する人は誰でも (特にあなたのヒントの後) 10 行目と 20 行目の内容に依存することを知っている必要があり、1 週間以上 SO を使用している人は、この質問があまり追加されていないように見えることを理解する必要があります。

指示したことを正確に実行するコードに依存する必要があります。30 行目でスキップするように指示GOTO 10しても、30 行目をスキップするように指示しても、30 行目がスキップされても驚くことはありません。プログラムに伝えました。

于 2009-05-14T21:37:46.627 に答える