|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
Что такое side-effects30.12.2015, 18:09. Показов 8352. Ответов 27
Метки нет (Все метки)
Добрый день,
что такое side-effects и с чем их едят? В каких коварных моментах языка стоит помнить про данный термин. Когда незнания его может привести к последствиям. По анализу вопросу понял, что это: если функция не умеет внешних связей и работатет по принципу: вы мне запрос - я вам ответ.То такая функция без side-effect'ов.
0
|
|
| 30.12.2015, 18:09 | |
|
Ответы с готовыми решениями:
27
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое хэндлер файла? Что такое файловый указатель? |
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 30.12.2015, 18:17 | |
|
Так вот же ж:
https://en.wikipedia.org/wiki/... science%29
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
| 30.12.2015, 18:25 [ТС] | ||||||
|
Я прочитал достаточно информации на википедии, stackoverflow и других ресурсах, чтобы нормально так запутаться. Везде вода, зачем не понятно, как использовать знания полученые прочитав ту или инную статью - не понятно. Что это вещь спасёт мир всём понятно, но никто не говорит кейсы дальше чем
0
|
||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 30.12.2015, 18:35 | ||
|
0
|
||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|||||||||||
| 30.12.2015, 19:04 | |||||||||||
Сообщение было отмечено rikimaru2013 как решение
Решение
rikimaru2013, хочешь более нетривиальных примеров?
Например, код:
Ответ: смотря что ими считать. Например, ленивость - можно считать сайдэффектом оператора &&. Если наша логика каким-либо образом завязана на порядок вычислений, например так:
А теперь представим, что у нас появилась перегрузка оператора && для некоторых классов, а операторы ++ примененные к `a`,`b`, `c` возвращает объекты этих классов. Появляются другие сайдэффекты: 1) Пропадает ленивость. 2) Порядок вычисления аргументов теперь не определен. Резюмируя: никогда не полагайся на ленивость оператора && (и подобных с тем же свойством), если существует ненулевая вероятность, что в данном контексте он может быть перегружен. Ленивостью обладает только встроенная версия, а пользовательская перегрузка обладает только свойствами обычной функции.
6
|
|||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 30.12.2015, 23:28 | ||
Сообщение было отмечено rikimaru2013 как решение
Решениелюбая ботва, которая может неявно (скрытно от программиста) влиять на среду. например, первая функция подкрутила гайки глобальной переменной а вторая функция рассчитывает на то, что этой переменной кто-то подкрутит гайки. в чем тут подвох? логика второй функции зависит от логики первой. нельзя поправить первую функцию без учета второй, есть риск, что она поломается. другой пример: какой то идиот вкрячил в конструктор копии сайд эффект: инициализацию базы данных. в релизе компилятор оптимизировал конструкторы копии забив на все побочные эффекты (copy elision) а потом приперся на форум, и выложил километр своего говнокода со словами: "у меня тут чота не работает" третий пример: по стандарту, циклы без побочных эффектов (без изменения внешнего состояния) - UB почитайте про то, как компилятор сумел доказать теорему Ферма: http://habrahabr.ru/post/229963/ там есть ссылки на оригинальный текст. а ниже - перевод на русском.
3
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 30.12.2015, 23:51 [ТС] | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 30.12.2015, 23:57 | ||
|
вашу тему вероятно я даже не видел, поскольку не знаю о чем это вы сейчас. это просто пример. и суть простая - побочные эффекты - этакие "нежданчики". они как бы есть, но как бы прозрачно для программиста. если на них заложилась какая то важная логика - это путь тернистый, странных ошибок. одна из причин, из-за которой считается, что "глобальные переменные - зло", связанна с тем, что манипуляции с глобальными переменными - суть побочные эффекты.
0
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 31.12.2015, 01:15 [ТС] | |
|
hoggy, вызов другого метода в методе является side-effect'ом? Как бы метод зависит от результатов работы др метода (и/или вызов статического метода синглтона)
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 31.12.2015, 01:18 | ||
Сообщение было отмечено rikimaru2013 как решение
Решението есть, если компилятору известно туловище вызываемой функции, то это все равно, что мы код мысленно inline вставили. компилятору доступен контекст, и он сможет оптимизировать. если не доступен, то он должен сделать вызов, не зная к чему это приведет. это "не знание" и есть "побочный эффект" с точки зрения компилятора.
1
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 31.12.2015, 01:34 [ТС] | |
|
hoggy, тогда как компилятор не смог увидить перегрузки для
if(a++ && b++ && c++) {} и соптимизировать код. На этапе компиляции - все поведения определены
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 31.12.2015, 01:39 | ||
|
hoggy, ты тут ошибаешься. Нет такого понятия как "побочные эффекты с точки зрения компилятора". Даже если отвлечься от высокоуровневого термина "побочный эффект", стандарт четко говорит, что это такое:
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 31.12.2015, 01:44 | |||||||||
|
если на этапе компиляции единицы трасляции, компилятору был доступен контекст, значит он использовал эту информацию. в данном случае имеет место быть ленивым вычислениям:
вопрос лишь в том - доступна ли она компилятору. и включены ли режимы оптимизации его работы. Добавлено через 4 минуты как бе понятно, что это именно что понятие, а не формальная терминология. и это понятие существует для того, что бы можно было понять сабж.
1
|
|||||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||
| 31.12.2015, 02:08 | |||
И например тут http://en.cppreference.com/w/c... eval_order со мной согласны.Добавлено через 10 минут Для тех, кто еще не понял, что такое функция без побочных эффектов. Грубо(!) говоря, эта функция, 1) возвращаемое значение которой зависит только от параметров, в нее переданных 2) если все места, где она вызывается, заменить возвращаемым значением, поведение программы не изменится. Зачем такие функции нужны: 1) их легче понимать 2) их легче сопровождать 3) их легче отлаживать 4) их легче тестировать 5) их легче переиспользовать 6) их легче верифицировать.
3
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 31.12.2015, 02:59 | ||
|
но не говориццо, что такое "побочный эффект" поэтому, с точки зрения терминологии (а не понятий), не понятно, что именно оно - "оно". и что с того? ссылку на которую вы дали, это понятие не раскрывает. а если рассуждать с точки зрения "понятия" которое я дал в #10, то уточнениям "точкам следования" с++11 оно никак не противоречит.
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||
| 31.12.2015, 05:10 | ||||
|
К тому же в С++11 уже нет такой штуки как точки следования. Давай не пользоваться старой терминологией.
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 31.12.2015, 14:18 | |||||
там нет определения, что есть "сайт эффект".
0
|
|||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||
| 31.12.2015, 14:33 | |||
|
1
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 31.12.2015, 14:46 | |||||||
|
которое ответ на моё предыдущее сообщение, ключевое слово которого было: с точки зрения компилятора если вас не интересует точка зрения компилятора, тогда мне не очевидно, зачем вообще вы начали развивать эту тему. от этого зависит способность компилятора оптимизировать, например. я конечно согласен с вами, что определение самолета не зависит от оптимизации его маршрута. но мне бы и в голову не пришло думать о подобных бреднях. "самолеты, которые доставляют почту в южные страны..." ахренительное определение самолетов.
0
|
|||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||
| 31.12.2015, 14:57 | |||||
![]() Добавлено через 3 минуты PS И расширь свой кругозор, поучи функциональую парадигму, а то грустно все...
0
|
|||||
| 31.12.2015, 14:57 | |
|
Помогаю со студенческими работами здесь
20
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Ремонт Х-к Teka NF660i side by side нет регулировки температуры в морозильнике Ремонт Холодильник Акаi ARL2522MS side-by-side, доза фреона 600а Холодильник BOSCH KFU 5750/03 (side by side), Подобрать компрессор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|