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 писал(а):
А локальные переменные процедуры -- это глобальные переменные для вложенных процедур. ;)
Вы совершенно правы. Правда, в мейнстриме мало языков поддерживают вложенные процедуры, даже в Зонноне они не реализованы :oops:

Автор:  Илья Ермаков [ Четверг, 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/