~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 993D3A2F70445304379ABD6C66DF596E__1713973860 ✰
Заголовок документа оригинал.:
✰ Side effect (computer science) - Wikipedia ✰
Заголовок документа перевод.:
✰ Побочный эффект (информатика) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Side-effect_(computer_science) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/99/6e/993d3a2f70445304379abd6c66df596e.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/99/6e/993d3a2f70445304379abd6c66df596e__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:46:48 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 24 April 2024, at 18:51 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Побочный эффект (информатика) — Википедия Jump to content

Побочный эффект (информатика)

Из Википедии, бесплатной энциклопедии

В информатике говорят , что операция, функция или выражение имеют побочный эффект , если они имеют какой-либо наблюдаемый эффект, отличный от основного эффекта считывания значения аргументов и возврата значения инициатору операции. Примеры побочных эффектов включают изменение или чтение нелокальной переменной , статической локальной переменной или изменяемого аргумента, передаваемого по ссылке ; возникновение ошибок или исключений; выполнение ввода-вывода ; или вызов других функций с побочными эффектами. [1] При наличии побочных эффектов поведение программы может зависеть от истории; то есть порядок оценки имеет значение. Понимание и отладка функции с побочными эффектами требует знаний о контексте и ее возможной истории. [2] [3] Побочные эффекты играют важную роль при разработке и анализе языков программирования . Степень использования побочных эффектов зависит от парадигмы программирования. Например, императивное программирование обычно используется для создания побочных эффектов, для обновления состояния системы. Напротив, декларативное программирование обычно используется для сообщения о состоянии системы без побочных эффектов.

Функциональное программирование направлено на минимизацию или устранение побочных эффектов. Отсутствие побочных эффектов облегчает формальную проверку программы. Функциональный язык Haskell устраняет побочные эффекты, такие как ввод-вывод и другие вычисления с сохранением состояния, заменяя их монадическими действиями. [4] [5] Функциональные языки, такие как Standard ML , Scheme и Scala, не ограничивают побочные эффекты, но программисты обычно их избегают. [6]

Программисты на языке ассемблера должны знать о скрытых побочных эффектах — инструкциях, которые изменяют части состояния процессора, не упомянутые в мнемонике инструкции. Классическим примером скрытого побочного эффекта является арифметическая инструкция, которая неявно изменяет коды условий (скрытый побочный эффект), одновременно изменяя регистр (предполагаемый эффект). Одним из потенциальных недостатков набора команд со скрытыми побочными эффектами является то, что если многие инструкции имеют побочные эффекты на одну часть состояния, например коды условий, то логика, необходимая для последовательного обновления этого состояния, может стать узким местом в производительности. Проблема особенно остра на некоторых процессорах, разработанных с конвейерной обработкой (с 1990 года) или с внеочередным выполнением . Такому процессору может потребоваться дополнительная схема управления для обнаружения скрытых побочных эффектов и остановки конвейера, если следующая инструкция зависит от результатов этих эффектов.

Ссылочная прозрачность [ править ]

Отсутствие побочных эффектов является необходимым, но недостаточным условием ссылочной прозрачности. Ссылочная прозрачность означает, что выражение (например, вызов функции) можно заменить его значением. Для этого требуется, чтобы выражение было чистым , то есть выражение должно быть детерминированным (всегда давать одно и то же значение для одних и тех же входных данных) и не иметь побочных эффектов.

побочные эффекты Временные

Побочные эффекты, вызванные временем, затрачиваемым на выполнение операции, обычно игнорируются при обсуждении побочных эффектов и ссылочной прозрачности. В некоторых случаях, например при аппаратном синхронизации или тестировании, операции вставляются специально из-за их временных побочных эффектов, например sleep(5000) или for (int i = 0; i < 10000; ++i) {}. Эти инструкции не меняют состояние, за исключением того, что их выполнение занимает некоторое время.

Идемпотентность [ править ]

Подпрограмма математическом с побочными эффектами является идемпотентной, если несколько применений подпрограммы оказывают такое же влияние на состояние системы, как и одно применение, другими словами, если функция из пространства состояний системы в себя, связанная с подпрограммой, идемпотентна в смысле . Например, рассмотрим следующую программу Python :

x   =   0 

 def   setx  (  n  ): 
     global   x 
     x   =   n 

 setx  (  3  ) 
 утверждать   x   ==   3 
 setx  (  3  ) 
 утверждать   x   ==   3 

setx является идемпотентным, поскольку второе применение setx до 3 оказывает такое же влияние на состояние системы, как и первое приложение: x уже было установлено значение 3 после первого применения и по-прежнему установлено на 3 после второго применения.

Чистая функция идемпотентна, если она идемпотентна в математическом смысле . Например, рассмотрим следующую программу Python:

def   abs  (  n  ): 
     вернуть   -  n,   если   n   <   0,   иначе   n 

 утвердить   abs  (  abs  (  -  3  ))   ==   abs  (  -  3  ) 

abs является идемпотентным, поскольку второе применение abs к возвращаемому значению первого приложения до -3 возвращает то же значение, что и первое приложение до -3.

Пример [ править ]

демонстраций поведения побочных эффектов является оператор присваивания в C. Одной из распространенных Назначение a = b это выражение, которое имеет то же значение, что и выражение b, с побочным эффектом сохранения R- значения b в L- значение a. Это позволяет множественное назначение:

а   =   (  б   =   3  );     // b = 3 оценивается как 3, которое затем присваивается 

Поскольку право оператора связывает , это эквивалентно

а   =   б   =   3  ; 

Это представляет собой потенциальное зависание для начинающих программистов, которые могут запутать

while   (  b   ==   3  )   {}    // проверяет, имеет ли значение b значение 3 

с

while   (  b   =   3  )   {}    // b = 3 оценивается как 3, что затем приводит к true, поэтому цикл бесконечен 

См. также [ править ]

Ссылки [ править ]

  1. ^ Спулер, Дэвид А.; Саджив, А. Сайед Мухаммед (январь 1994 г.). Обнаружение компилятором побочных эффектов вызова функций . Университет Джеймса Кука . CiteSeerX   10.1.1.70.2096 . Термин «побочный эффект» относится к модификации нелокальной среды. Обычно это происходит, когда функция (или процедура) изменяет глобальную переменную или аргументы, передаваемые ссылочными параметрами. Но есть и другие способы изменения нелокальной среды. Мы рассматриваем следующие причины побочных эффектов при вызове функции: 1. Выполнение ввода-вывода. 2. Изменение глобальных переменных. 3. Изменение локальных постоянных переменных (например, статических переменных в C). 4. Изменение аргумента, передаваемого по ссылке. 5. Изменение локальной переменной, автоматической или статической, функции, расположенной выше в последовательности вызова функции (обычно с помощью указателя).
  2. ^ Тернер, Дэвид А. , изд. (1990). Темы исследований по функциональному программированию . Аддисон-Уэсли . стр. 17–42. С помощью Хьюз, Джон. «Почему функциональное программирование имеет значение» (PDF) . Архивировано (PDF) из оригинала 14 июня 2022 г. Проверено 6 августа 2022 г.
  3. ^ Коллберг, Кристиан С. (22 апреля 2005 г.). «CSc 520 Основы языков программирования» . Департамент компьютерных наук Университета Аризоны . Архивировано из оригинала 06 августа 2022 г. Проверено 6 августа 2022 г.
  4. ^ «Отчет Haskell 98» . 1998.
  5. ^ Джонс, Саймон Пейтон; Уодлер, Фил (1993). Императивное функциональное программирование . Протокол конференции 20-го ежегодного симпозиума ACM по принципам языков программирования. стр. 71–84.
  6. ^ Феллизен, Матиас ; Финдлер, Роберт Брюс; Флэтт, Мэтью; Кришнамурти, Шрирам (1 августа 2014 г.). «Как разрабатывать программы» (2-е изд.). МТИ Пресс .
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 993D3A2F70445304379ABD6C66DF596E__1713973860
URL1:https://en.wikipedia.org/wiki/Side-effect_(computer_science)
Заголовок, (Title) документа по адресу, URL1:
Side effect (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)