русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Побочный эффект в программировании

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

Побочные эффекты наиболее привычный способ взаимодействия с внешним миром (людьми, файловой системой, другими компьютерами в сети). Степень использования побочных эффектов зависит от парадигмы программирования. Императивное программирования известное частым использованием побочных эффектов. В функциональном программировании побочных эффектов используют редко. Функциональные языки такие как Standard ML или Scheme не запрещают побочные эффекты, но обычно программисты избегают их. Функциональная язык Haskell ограничивает побочные эффекты из-за статического систему типизации ; она использует концепцию монад.

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

 

Прозрачность ссылок

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

 

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

На побочные эффекты связаны с тем необходимым для выполнения действия, обычно не учитывают, когда речь идет о побочных эффектах или прозрачность ссылок. В большинстве программ желательно заменять длинные действия на более короткие, например, (60 / 3 * 2) на 40. Иногда, когда речь идет о синхронизации или тестирования, умышленно вставляются такие коды, имеющие часовой побочный эффект, например, Sleep (5000) или for (i = 0; i <10000; i ++){}. Эти инструкции не изменяют состояние кроме необходимости ожидания до их завершения.

Просмотров: 17344

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.