Другие языки программирования и технологии

зачем в некоторых языках программирования есть команда, которая ничего не делает???

VB
Viktor Brese
86
На пенсии. Успела.
Иннокентий Кеха
Иннокентий Кеха
39 342
Лучший ответ
Чтобы неучи (в том числе и пишущие "учебники") могли в Pascal ставить точку с запятой перед end.

А если серьёзно, то пустой оператор в языках высокого уровня нужен в тех случаях, когда синтаксис языка требует наличия оператора, но делать в этом месте ничего не нужно. Типичные примеры:

while waiting(val) do; {тело цикла - пустой оператор; просто ждем, пока waiting вернёт false }

if test then else write('что-то'); {между then и else пустой оператор; говнокод, конечно, но отсутствие действий после then попадается достаточно регулярно}
Dima Kainazarov говнокод из такого примера вполне мог быть полуфабрикатом, когда обработку выполнения условия так и не собрались доделать.
Dima Kainazarov или, что ещё вероятнее, шаблоном автозаполнения среды.
это что за команда? В системе команд многих процессоров есть команда "нет операции", она нужна или для маленьких пауз в исполнении программы или для служебных целей (особенности команд ветвления и т. п.).
Ну, в Fortran IV была такая CONTINUE. Можно было метку поставить. Мы её использовали, чтобы обозначить конец стандартной конструкции.
BH
Bahram Hamdamov
80 453
Cucerenco Vanea В Fortran IV оператор CONTINUE (который ничего не делал) обычно использовался в конце цикла, поскольку по синтаксису некоторые операторы делать последними в цикле запрещалось. Но сейчас, например, в C# (и не только) continue используется для перехода на конец цикла, так что оператор этот уже не пустой. Ничто в этом мире не постоянно...
В калькуляторе электроника-57 или как его там нельзя удалить операцию со сдвигом всего кода, вот и применяется пустая операция.
Питон видимо должно расплющить, если после двоеточия не будет операции.
И т. п.
АД
Андрей Дудин
58 788
Александр Цой МК-61, МК-52, не вспоминая более старые.
Ну просто чтоб была
Набор команд многих процессоров содержит инструкцию, цель которой состоит не в том, чтобы изменить состояние какого-либо регистра или ячейки памяти, а в том чтобы затратить определённое число тактов процессора. Для тех процессоров, в которых специальная инструкция отсутствует, NOP имитируется какой-то другой инструкцией с такими параметрами, что регистры и флаги не меняются (например в SPARC-процессорах в качестве NOP рекомендуется инструкция "sethi 0, %g0").

NOP’ы обычно используются:

для создания задержки на определённое время, например, в целях синхронизации с другими устройствами в компьютере. В частности: в микроконтроллерах AVR цифровые порты имеют очень высокое быстродействие, и между коммутацией выходных портов и считыванием входных рекомендуется установить NOP, чтобы схема успела стабилизироваться;
для заполнения памяти программ при выравнивании;
для предотвращения ошибок в аппаратной части процессора;
для передачи управления при конвейерной организации вычислительного процесса;
как заполнитель во время разработки программы;
как заполнитель удалённых инструкций, например, при взломе программ. То есть, проверка регистрационного номера и т. п. заменяется на код, который ничего не делает.
Артурик *
Артурик *
86 632
приведи пример
Viktor Brese команда NOP в ассемблере
очевидно, чтоб ничего не делать какое-то время.
На некоторых процессорах одни команды могут начинаться с любого адреса, другие - только с чётного (кратного 2 байтам), третьи - с кратного 4 байтам и т. д. Длина команд также может быть разной. Для выравнивания очередной команды на нужную границу может применяться команда, которая ничего не делает, но место в памяти занимает. Например, если одна первая команда занимает 1 байт, но вторая должна начинаться с адреса, кратного 4, то между ними надо вставить набор "пустых" команд, чтобы занять "лишние" 3 байта.