LINUX.ORG.RU
ФорумTalks

Инженерия и программированние

 ,


0

1

Инженерные системы, если не все, то почти все, используют побочные эффекты в реализации, более того, любая система состоит из побочных эффектов чуть менее чем полностью. Поясню на примере.

Возьмем ДВС. как работает ГРМ? Он использует побочный эффект от вращения коленвала, синхронизируя газообмен с положениями поршней. генератор использует побочный эффект вращения, вырабатывая энергию. Турбонаддув использует побочный эффект движения газа. Карбюратор (я знаю, что сейчас используются инжектора, а ты сделал уроки?) использует вакуум создаваемый в цилиндрах. Этот список можно продолжать до бесконечности. Использование побочных эффектов создает гениально-простую систему.

В современном программировании наблюдается обратный процесс — анальное отгораживание от побочных эффектов. Стимулируется создание не гениально-простых, а уродливо-сложных систем. Вы представляете себе ДВС, работающий без побочных эффектов? Если такое и возможно, то это была бы бесполезная тарахтелка размером в пол-евразии, и побочные эффекты все равно бы остались.

К сожалению, современный разработчик — это не инженер, а пользователь. Для него важней «семантика» — рули и педали, нежели то, как все действительно устроено. Он далек от понимания систем, которые он проектирует или создает, если данные определения вообще тут уместны, он создает что-то в том же смысле, что оператор станка ЧПУ — нажимает кнопки.


Наблюдается тенденция не к избавлению от сайд-эффектов, а к жесткому контролю над ними.

Недостаточно тонко.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Жесткий контроль над сайд-эффектами вполне можно реализовать без специальных средств, которые вынуждают это делать.

phill
() автор топика

Насколько нужно быть упоротым баклажаном, чтобы сравнивать ДВС и программу? Крайне толсто, да.

hateyoufeel ★★★★★
()
Ответ на: комментарий от phill

Жесткий контроль над сайд-эффектами вполне можно реализовать без специальных средств

Пруф.

hateyoufeel ★★★★★
()

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

ilammy ★★★
()
Ответ на: комментарий от phill

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

На примере того же ДВС — побочный эффект — это например шум двигателя. «Кручение коленвала» — это как раз очень даже прямая функция, то, ради чего всё это собсвенно и затевалось.

Направленная цепь преобразования энергии: химическая → тепловая → механическая. А вот тот же «шум»: химическая → тепловая → акустическая — вот это side-effect.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от ilammy

Чистые наблюдения, в «квантовом» смысле, невозможны, ибо процесс наблюдения — есть часть наблюдаемого, тот самый побочный эффект создаваемый наблюдателем. Это, вообще ересь, в дзенском смысле. Интуиция рулит.

phill
() автор топика
Ответ на: комментарий от beastie

На примере того же ДВС — побочный эффект — это например шум двигателя. «Кручение коленвала» — это как раз очень даже прямая функция, то, ради чего всё это собсвенно и затевалось.

+1

dikiy ★★☆☆☆
()

программирования без побочных эффектов не существует, как тут кто-то уже писал в девелопменте, как минимум побочным эффектом выполнения функции будет потребление ресурсов процессора и памяти

Harald ★★★★★
()
Ответ на: комментарий от beastie

Это правильный взгляд, я поддерживаю, но проблема в том, что согласно сегодняшней моде, побочный эффект, например IO, объявлено depricated, вне зависимоcти от его полезности или вредности, принесено в жертву универсальности интерфейса, как бы. Не программист решает, что считать побочным эффектом, а ЯП за него решает.

phill
() автор топика
Ответ на: комментарий от Harald

Это правильно, но в семантику это не заложено, поэтому пользователю об этом знать вообще не обязательно.

phill
() автор топика
Ответ на: комментарий от beastie

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

phill
() автор топика
Ответ на: комментарий от phill

Смотрим википедию:

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

Т.е. добро пожаловать в чудный мир undefined behavior. Согласись — поведение в зависимости от погоды на Марсе — это совсем не то, чего хочется и ожидается от языка программирования и программ в частности.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Согласись — поведение в зависимости от погоды на Марсе — это совсем не то, чего хочется и ожидается от языка программирования и программ в частности

Это зависит от того, что конкретно я хочу контролировать. Я сам это определяю. Плюс к этому, всегда есть соизмеримость опасности с эффективностью. если у ковбоя на яйцах висит пистолет, он может в один прекрасный момент отстрелить ему яйца (чудный мир undefined behavior), но он же может и спасти жизнь perl-ковбою.

phill
() автор топика

В современном программировании наблюдается обратный процесс — анальное отгораживание от побочных эффектов. Стимулируется создание не гениально-простых, а уродливо-сложных систем.

Вот тут-то у тебя прокол в логике. Из «отгораживание от побочных эффектов» не следует «создание уродливо-сложных систем». А как раз таки наоборот.

alexeiz
()

Он далек от понимания систем

Бывает...

sin_a ★★★★★
()

Опять двадцать пять.

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

При желании можно сделать в хаскеле и изменяемое глобальное состояние. Не приветствуется, но можно, и делают иногда.

dave ★★★★★
()
Ответ на: комментарий от sin_a

А это упростит отладку?

Скорей наоборот:) Но если относится к программированию как к речи, с отладкой тоже проблемка-с. Если кто-то скажет «корова плюс 1» небо не упадет на землю. С другой стороны, отладчик тебе будет мешать складывать баранов с коровами, хотя в контексте получения количества или массы мяса это то, что нужно.

phill
() автор топика

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

dave ★★★★★
()

Царя кастани, у него каждый такт в дело идет. Это без подначки.

Ну и вообще, в околожелезячном программировании этого добра навалом. Хотя бы в ГПУ, в эмбеддед, да и в дровах любого железа.

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

Представь себе, ты под капот жигуленка засунешь движок от камаза. Поедет жигуленок? Ну поедет, но как-то херовато. А java поедет.

anto215 ★★
()
Ответ на: комментарий от dave

В хаскеле есть побочные эффекты.

Естественно. Это же основа, без них вообще нихрена не напишешь.

должны быть явно прописаны

А это и есть отгораживание. Внушается некая мысль о «необходимости» прокладки, а прокладка эта не нужна. К тому же на каждый финт с объявлением типа — тонны лишнего кода, что тоже не айс.

phill
() автор топика
Ответ на: комментарий от dave

да теми же рекурсивными вычислениями

Как это связано с рекурсивными вычислениями? (я не опровергаю, а просто интересуюсь).

phill
() автор топика
Ответ на: комментарий от phill

Если кто-то скажет «корова плюс 1» небо не упадет на землю.

Потому что избыточность. Которая потому что цена речи — жизнь. Когда тебе объясняют что вспышка ^W леопард справа, то лучше не делать вид что плохо понял.

Но вот по мере усложнения материала и требования к речи растут.

PS: да, а говядину с бараниной лучше не смешивать.

sin_a ★★★★★
()
Ответ на: комментарий от phill

Для рекурсивных вычислений в той же императивной монаде IO (механизм общий через MonadFix) нужна ленивость и лучше глобальная. Для вездесущей ленивости нужна чистота. Последнюю можно обеспечить через ссылочную прозрачность. Чтобы была прозрачность, побочные эффекты можно загнать в монаду. В таком виде все прекрасно работает.

dave ★★★★★
()
Ответ на: комментарий от sin_a

Это, на самом деле, довольно скользкий и сложный вопрос. Он касается контекстозависимости грамматик, детерменированности вычислений и много чего еще. В принципе, в общем случае, мы выбираем между мощностью (выразительностью) языка и возможностью статического анализа (построение деревьев, графов и пр.). На сегодняшний день крен в сторону последнего.

phill
() автор топика

«побочный эффект» в двс это излишнее тепло отдаваемое атмосфере, что негативно сказывается на КПД.

int13h ★★★★★
()

Клапана открывают специально от КВ, но не как из-за побочного эффекта. Их можно открывать и с помощью электромагнитного привода, как форсунки во впрыске.

int13h ★★★★★
()

По вашей логике мозг человека работает из-за «побочного эффекта» работы других органов.

int13h ★★★★★
()
Ответ на: комментарий от int13h

Вы не совсем понимаете значение понятия «побочный эффект» в данном контексте, а мне лень объяснять, я сплю уже:)

phill
() автор топика
Ответ на: комментарий от phill

вы не поняли суть. ГРМ и обогрев салона немного разные вещи. Очень-очень грубо - без ГРМ вы не проедите - это часть ДВС. А без печки (отопителя) будете ездить.

int13h ★★★★★
()
Ответ на: комментарий от phill

Газовыведение и питание ДВС одни из основных систем. Привод клапанов может быть любым. Самый простой - цемной/ ременной привод от КВ. Можно использовать и электромагнитный привод. Насколько я понимаю, Вы хотите сказать, что одна система приводится в действие другой системой,с устанавленно жесткой связью (перекиньте пару зубьев на ремне ГРМ :))? Да, так. но называть это «побочным эффектом» алогично.

int13h ★★★★★
()
Ответ на: комментарий от sin_a

Я мельком глянул, озвучу свою предварительную версию, пока автор не пояснил. Там были установлены какие-то турбины, видимо в коллектор, я так понял, что-то вроде турбонаддува. Из-за этого, звук приглушился. Возможно, автор имеет в виду, что звук, это тоже частный случай вибрации, и, в данном случае, звук ушел в энергию.

phill
() автор топика
Ответ на: комментарий от phill

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

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

И BTW,ничего удивительного в использовании вибрации машин нет. Например, если на какой нибудь агрегат с сильной вибрацией установить форму с бетоном, она будет компенсировать вибрацию, и выполнять полезное, трамбовать бетон. Взаимовыгодный симбиоз, прямо как в природе. Другое дело, что такие вещи не слишком распространены из-за сложности реализации тех процесса. Но ничего невозможного нет...

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

phill
() автор топика
Ответ на: комментарий от sin_a

Нет, он как бы намекает что машина должна реветь

Да намекает, в контексте зрелищности, но это не отменяет того, что звук поглощается турбиной и идет «в дело».

phill
() автор топика

Отчасти соглашусь, но думаю дело не в целеноправленном отказе от использования побочных эффектов, а во внедрении академизмов, умствований как чего-то самого главного. То есть кто-то придумал красивую модель, тот же ООП и всё стали в неё упаковывать, подавляя любые не сходящие с этой моделью явления. Даже если где-то явления изначально асинхронные они стали синхронными ну и тд. А потом, поняв, что таки этого недостаточно, придумали другую модель, чтобы получить что нужно и так до бесконечности.

Но нельзя сказать что инженерия нынче уж совсем вот такая вся естественная, тенденция всё делать через жопу и печь лепёшки в нанопечке из японии вместо обычного тандыра делающегося на раз - она вездесуща, просто что-то где-то в головах пошло не так)))

ixrws ★★★
()
Ответ на: комментарий от ixrws

Абсолютно согласен во всем.

Но нельзя сказать что инженерия нынче уж совсем вот такая вся естественная, тенденция всё делать через жопу и печь лепёшки в нанопечке из японии вместо обычного тандыра делающегося на раз - она вездесуща, просто что-то где-то в головах пошло не так)))

Это я какбэ, рассматривал идеальную модель:) Само-собой, в реальной инженерной дисциплине тоже жопа.

phill
() автор топика

современный разработчик — это не инженер, а пользователь.

Это вы сами придумали?

В каких реальных enterpriZe проектах сами участвовали, кроме «Хелловорд» в вашем радиотехническом техникуме?

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

ixrws ★★★
()

Ты хоть пытался понять, зачем они это делают? Зачем пытаются добиться моноидальных свойств?

buddhist ★★★★★
()

Открой для себя советские программируемые калькуляторы.

DNA_Seq ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.