OberonCore https://forum.oberoncore.ru/ |
|
О локализации состояния https://forum.oberoncore.ru/viewtopic.php?f=27&t=1226 |
Страница 1 из 4 |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 12:58 ] |
Заголовок сообщения: | О локализации состояния |
Geniepro писал(а): Эта проблема легко решается использованием нормального компилятора, который выдаёт предупреждения о перекрытии переменных объемлющего уровня переменными внутреннего уровня (в Вашем случае перекрытие глобальных переменных локальными). Ага. И потом половина программёров включают warning off. Цитата: Кроме того, от глобальных переменных нужно отказываться. К этому даже Вирт начал призывать. Одно лишнее слово "даже" - и уже ложь (преднамеренная или непреднамеренная). Структурное и модульное программирование уже много-много лет в этому призывает. Глобальных вообще переменных как таковых и нет. Все локализованные в том или ином модуле с тем или иным временем жизни. В большинстве случаев, когда речь не идёт о системе с состояниями, предполагается, что переменные локализуются в процедуре со временем жизни = её активации. Если Вам не даёт спать идея вообще отказа от состояний - то это проблемы ФП-шников. Нефизично исключать важное понятие, присутствующее в реальном мире. В мат. играх - конечно, можно. Занятно, интересно, иногда познавательно. |
Автор: | Geniepro [ Четверг, 30 Октябрь, 2008 13:31 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Илья Ермаков писал(а): Ага. И потом половина программёров включают warning off. Наоборот, те, кому надо, включают -WallИлья Ермаков писал(а): Глобальных вообще переменных как таковых и нет. Все локализованные в том или ином модуле с тем или иным временем жизни. Вы играете словами.В большинстве случаев, когда речь не идёт о системе с состояниями, предполагается, что переменные локализуются в процедуре со временем жизни = её активации. Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть. |
Автор: | Geniepro [ Четверг, 30 Октябрь, 2008 13:37 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Илья Ермаков писал(а): Нефизично исключать важное понятие, присутствующее в реальном мире. В мат. играх - конечно, можно. Занятно, интересно, иногда познавательно. Так мы сейчас дойдём до метафизических споров -- что первично, материя или идея...
|
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 14:16 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
МЕТАфизика тут не причём. А вот без МЕТА - очень даже. Welcome в реальный мир. |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 14:19 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Geniepro писал(а): Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть. Суть проста - состояние должно быть локализовано настолько, насколько это возможно (целесообразно, соответствует предметке). |
Автор: | Trurl [ Четверг, 30 Октябрь, 2008 15:08 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Geniepro писал(а): Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть. А локальные переменные процедуры -- это глобальные переменные для вложенных процедур. ![]() |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 15:42 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Илья Ермаков писал(а): Все локализованные в том или ином модуле с тем или иным временем жизни. Нифига они не локализованы. Модуль локализует только область видимости. Да, это может помочь избежать части проблем, типа упоминавшегося только что перекрытия с локальными переменными. Но суть зла в виде "глобальности" - остается. Вы можете даже упрятать все в функции get/set и все равно это не решит основной проблемы. Илья Ермаков писал(а): Если Вам не даёт спать идея вообще отказа от состояний - то это проблемы ФП-шников. Нефизично исключать важное понятие, присутствующее в реальном мире. В мат. играх - конечно, можно. Занятно, интересно, иногда познавательно. Не, состояние само по себе здесь не причем. Локализуйте состояние и делайте с ним что хотите. Проще всего это сделать по примеру ФП-шников - в аргументах и результате. Если это несовместимо с реальной жизнью - да, можно идти на компромиссы, главное понимать, что это компромисс. |
Автор: | Geniepro [ Четверг, 30 Октябрь, 2008 15:56 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Trurl писал(а): А локальные переменные процедуры -- это глобальные переменные для вложенных процедур. Вы совершенно правы. Правда, в мейнстриме мало языков поддерживают вложенные процедуры, даже в Зонноне они не реализованы ![]() ![]() |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 16:26 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Vlad писал(а): Проще всего это сделать по примеру ФП-шников - в аргументах и результате. Если это несовместимо с реальной жизнью - да, можно идти на компромиссы, главное понимать, что это компромисс. На секунду отвлечёмся от конкретных языков (я бы хотел работу с состоянием видеть немного по-другому, чем это делается в настоящий момент в традиционных языках), чтобы не цепляться к их деталям. Так в общем, с чем же там будет компромисс - явное присутсвие состояния, если оно находится на естественном уровне модели? Как раз чистая функциональность - компромисс. Нежелание переходить от традиционной математики статических соотношений к динамическому анализу систем. О чём Дейкстр писал - тщетно. Проще ж дорваться до знакомой вотчины - мат. функций, а далее можно их комбинировать ![]() |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 16:38 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Илья Ермаков писал(а): Так в общем, с чем же там будет компромисс - явное присутсвие состояния, если оно находится на естественном уровне модели? Компромисс между явным тасканием состояния через всю систему и между неконтролируемым влиянием одной части системы на другую посредством общедоступного состояния. |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 17:00 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Компромисс - это вынужденное смешение (смирение с чем-то), из-за невозможности разрулить основательно проблему (с исключением её как класса) в текущий момент времени. С какой поры чувство меры и соответствия модели задаче называется компромиссом? Только потому, что трудно найти? А думать вообще легко? ![]() P.S. А общедоступным состояние не должно быть вообще. Полная его изоляция в активных взаимодействующих частях системы. Но: оно есть. На всех уровнях системы. |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 17:13 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Илья Ермаков писал(а): P.S. А общедоступным состояние не должно быть вообще. Полная его изоляция в активных взаимодействующих частях системы. Но: оно есть. На всех уровнях системы. Что такое "активные взаимодействующие части"? Вот есть у нас БД и соответствующий интерфейс доступа к ней. Это "активная часть"? Как с ней будут взаимодействовать другие компоненты системы (получать доступ)? |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 17:20 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Software Isolated Processes, как пример. |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 17:27 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Илья Ермаков писал(а): Software Isolated Processes, как пример. Ой, глубоко копнули. Давайте помельче пример рассмотрим. Вот есть компонента, которая выковыривает из базы информацию о юзерах в системе. Как ей лучше получить доступ к базе? Через глобальный стэйт получит интерфейс к базе или через аргумент? |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 17:43 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Глобальные стэйты изводим под корень как класс. Через ответ на запрос, конечно (будь то вызов метода или обмен сообщениями). Но состояние-то у этого интерфейса к базе есть! И пусть будет - про что и речь. ФП же предполагает, что любой интерфейс в системе (кроме некоторых "на краях", типа ввода-вывода любого как раз) является чистым от состояния (всегда ведёт себя как функция, т.е. не помнит истории; история эмулируется через передачу ему доп. аргументов с этой историей). Кстати, тоже нарушение локализации в обратную сторону - теперь состояние, которое относится к одному уровню системы, должно протаскиваться через другие её уровни (хотя, конечно, оно может быть защищено от доступа типизацией-сокрытием, но... Факт остаётся фактом - гуляет оно по системе). |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 17:45 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Илья Ермаков писал(а): Глобальные стэйты изводим под корень как класс. Через ответ на запрос, конечно (будь то вызов метода или обмен сообщениями). Запрос куда? |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 17:46 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Запрос через интерфейс к тому агенту, который за ним стоит. |
Автор: | Geniepro [ Четверг, 30 Октябрь, 2008 20:40 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле (из ветки про PascalABC) |
Илья Ермаков писал(а): О чём Дейкстр писал - тщетно. Проще ж дорваться до знакомой вотчины - мат. функций, а далее можно их комбинировать Сейчас меня начнут обвинять в догматизации Дейкстры, но нужно ещё и ещё раз тыкать в это носом, ибо его наработки совершенно не изучены и недооценены - притом теми, кто пытается претендовать на "передовость" (типа фп-шников). Не говоря про то, что дейкстровский анализ может иметь общее значение для системного анализа - об этом вообще никто не думал... Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры, и, кажется, я понимаю, почему его наработки остались такими невостребованными: эта дисциплина накладывает на программиста слишком высокие требования к математическому образованию, и, собственно, к дисциплинированности, самоконтролю. ФП в этом плане гораздо демократичнее... Илья Ермаков писал(а): Но состояние-то у этого интерфейса к базе есть! И пусть будет - про что и речь. Пусть это состояние остаётся в самой базе. Самому интерфейсу это состояние не нужно.
|
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 20:59 ] |
Заголовок сообщения: | Re: О локализации состояния |
Миль пардон. Как раз уж с БД Вы никуда не денетесь от состояния. Один и тот же запрос Вам может вернуть разные данные. Цитата: эта дисциплина накладывает на программиста слишком высокие требования к математическому образованию Да ну. Знание основ исчисления предикатов и приобретённый с опытом навык анализа состояний процессов. Куда уж до лямбда-исчислений и теорий категорий. Или Вы всё про то же - про то, что ФП лучше защищено "от дурака"? Не разломаешь? Можно посмотреть образцы и ваять, а язык будет бить по рукам? Ну, что ж Вы хотите: Дейкстра - это анализ. С большой буквы Анализ. Инструмент понимания задач, а не просто формальная система. |
Автор: | Vlad [ Пятница, 31 Октябрь, 2008 00:20 ] |
Заголовок сообщения: | Re: О разделе описаний в модуле |
Илья Ермаков писал(а): Запрос через интерфейс к тому агенту, который за ним стоит. Хорошо. Откуда компонента возьмет этот интерфейс? |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |