Вопрос

В духе последний подкаст где Джоэл упомянул, что ему нужны простые вопросы с, возможно, интересными ответами...

В современных средах, в которых нам приходится программировать, мы не можем полагаться на порядок выполнения наших языковых операторов.Это правда?Стоит ли нам беспокоиться?

Всегда ли значение 30 GOTO 10 приведет к 10?*

*Я не использовал 20 специально ;)

[править] для четырех человек, голосующих за закрытие этого вопроса...

«Компиляторы среды выполнения используют информацию профилирования, чтобы оптимизировать компилируемый код.JVM разрешено использовать информацию, специфичную для выполнения, для создания лучшего кода, а это означает, что метод компиляции M в одной программе может генерировать код, отличный от компиляции M в другой».

(из Java-параллелизма на практике, 2006, Гетц и др.)

..взгляните на «мономорфное преобразование вызовов»

[редактировать]

и еще одно редактирование: вашему процессору разрешено менять порядок выполнения операторов...

Это было полезно?

Решение

Нет, не будет.Но это всегда будет вести себя как будто это так.Одним из основных правил проектирования компиляторов является правило «как если бы».Ваш компилятор может вносить любые изменения, которые ему нравятся, при условии, что результат будет вести себя корректно. будто вы следовали языковым правилам.

GOTO 10 может решить перейти в другое место, если компилятор может гарантировать, что это не изменит результат работы программы.

Так что нет, это не должно вас беспокоить.

Другие советы

Нет, если у тебя есть

40 COMEFROM 30

где-то в вашем коде.

alt text

Ну, этого не произойдет, если он не выполнится, например, если есть 20 GOTO 40.

На БЕЙСИКЕ да.На других языках это приведет к ошибке компиляции.

Что вы пытаетесь сказать?Любой, кто утверждает, что является программистом, должен знать (особенно после вашего намека), что это зависит от того, что написано в строках 10 и 20, и любой, кто работает на SO дольше недели, должен понимать, что этот вопрос, похоже, мало что добавляет.

Мы должны полагаться на то, что код делает именно то, что мы ему указываем.Если мы скажем это GOTO 10 в строке 30, но также скажите ему пропустить строку 30, мы не должны удивляться, когда строка 30 будет пропущена.Мы сказали программе.

Действительно, если вы рассматриваете многоядерные процессоры, выполняющие программу BASIC, одно из ядер может случайно пропустить GOTO (подсказка:«Ошибка TLB») и продолжайте, как будто его и не было.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top