OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 18:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: О локализации состояния
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 12:58 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Geniepro писал(а):
Эта проблема легко решается использованием нормального компилятора, который выдаёт предупреждения о перекрытии переменных объемлющего уровня переменными внутреннего уровня (в Вашем случае перекрытие глобальных переменных локальными).

Ага. И потом половина программёров включают warning off.

Цитата:
Кроме того, от глобальных переменных нужно отказываться. К этому даже Вирт начал призывать.

Одно лишнее слово "даже" - и уже ложь (преднамеренная или непреднамеренная).
Структурное и модульное программирование уже много-много лет в этому призывает. Глобальных вообще переменных как таковых и нет. Все локализованные в том или ином модуле с тем или иным временем жизни.
В большинстве случаев, когда речь не идёт о системе с состояниями, предполагается, что переменные локализуются в процедуре со временем жизни = её активации.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 13:31 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Ага. И потом половина программёров включают warning off.
Наоборот, те, кому надо, включают -Wall

Илья Ермаков писал(а):
Глобальных вообще переменных как таковых и нет. Все локализованные в том или ином модуле с тем или иным временем жизни.
В большинстве случаев, когда речь не идёт о системе с состояниями, предполагается, что переменные локализуются в процедуре со временем жизни = её активации.
Вы играете словами.
Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 13:37 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Нефизично исключать важное понятие, присутствующее в реальном мире. В мат. играх - конечно, можно. Занятно, интересно, иногда познавательно.
Так мы сейчас дойдём до метафизических споров -- что первично, материя или идея...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 14:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
МЕТАфизика тут не причём. А вот без МЕТА - очень даже.
Welcome в реальный мир.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 14:19 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Geniepro писал(а):
Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть.


Суть проста - состояние должно быть локализовано настолько, насколько это возможно (целесообразно, соответствует предметке).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 15:08 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Geniepro писал(а):
Локальные переменные модуля -- это глобальные переменные для процедур в этом модуле. Суть остаётся -- глобальные переменные есть.

А локальные переменные процедуры -- это глобальные переменные для вложенных процедур. ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 15:42 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Все локализованные в том или ином модуле с тем или иным временем жизни.


Нифига они не локализованы. Модуль локализует только область видимости. Да, это может помочь избежать части проблем, типа упоминавшегося только что перекрытия с локальными переменными. Но суть зла в виде "глобальности" - остается. Вы можете даже упрятать все в функции get/set и все равно это не решит основной проблемы.

Илья Ермаков писал(а):
Если Вам не даёт спать идея вообще отказа от состояний - то это проблемы ФП-шников. Нефизично исключать важное понятие, присутствующее в реальном мире. В мат. играх - конечно, можно. Занятно, интересно, иногда познавательно.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 15:56 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Trurl писал(а):
А локальные переменные процедуры -- это глобальные переменные для вложенных процедур. ;)
Вы совершенно правы. Правда, в мейнстриме мало языков поддерживают вложенные процедуры, даже в Зонноне они не реализованы :oops:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 16:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
Проще всего это сделать по примеру ФП-шников - в аргументах и результате. Если это несовместимо с реальной жизнью - да, можно идти на компромиссы, главное понимать, что это компромисс.

На секунду отвлечёмся от конкретных языков (я бы хотел работу с состоянием видеть немного по-другому, чем это делается в настоящий момент в традиционных языках), чтобы не цепляться к их деталям. Так в общем, с чем же там будет компромисс - явное присутсвие состояния, если оно находится на естественном уровне модели? Как раз чистая функциональность - компромисс. Нежелание переходить от традиционной математики статических соотношений к динамическому анализу систем. О чём Дейкстр писал - тщетно. Проще ж дорваться до знакомой вотчины - мат. функций, а далее можно их комбинировать :) Сейчас меня начнут обвинять в догматизации Дейкстры, но нужно ещё и ещё раз тыкать в это носом, ибо его наработки совершенно не изучены и недооценены - притом теми, кто пытается претендовать на "передовость" (типа фп-шников). Не говоря про то, что дейкстровский анализ может иметь общее значение для системного анализа - об этом вообще никто не думал (по той же причине, проще сказать "система - это множество...", а дале поехали по накатанной рельсе в голове).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 16:38 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Так в общем, с чем же там будет компромисс - явное присутсвие состояния, если оно находится на естественном уровне модели?


Компромисс между явным тасканием состояния через всю систему и между неконтролируемым влиянием одной части системы на другую посредством общедоступного состояния.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Компромисс - это вынужденное смешение (смирение с чем-то), из-за невозможности разрулить основательно проблему (с исключением её как класса) в текущий момент времени.

С какой поры чувство меры и соответствия модели задаче называется компромиссом? Только потому, что трудно найти? А думать вообще легко? :-)

P.S. А общедоступным состояние не должно быть вообще. Полная его изоляция в активных взаимодействующих частях системы. Но: оно есть. На всех уровнях системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:13 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
P.S. А общедоступным состояние не должно быть вообще. Полная его изоляция в активных взаимодействующих частях системы. Но: оно есть. На всех уровнях системы.


Что такое "активные взаимодействующие части"? Вот есть у нас БД и соответствующий интерфейс доступа к ней. Это "активная часть"? Как с ней будут взаимодействовать другие компоненты системы (получать доступ)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Software Isolated Processes, как пример.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Software Isolated Processes, как пример.


Ой, глубоко копнули. Давайте помельче пример рассмотрим. Вот есть компонента, которая выковыривает из базы информацию о юзерах в системе. Как ей лучше получить доступ к базе? Через глобальный стэйт получит интерфейс к базе или через аргумент?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Глобальные стэйты изводим под корень как класс.
Через ответ на запрос, конечно (будь то вызов метода или обмен сообщениями).

Но состояние-то у этого интерфейса к базе есть! И пусть будет - про что и речь.
ФП же предполагает, что любой интерфейс в системе (кроме некоторых "на краях", типа ввода-вывода любого как раз) является чистым от состояния (всегда ведёт себя как функция, т.е. не помнит истории; история эмулируется через передачу ему доп. аргументов с этой историей).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:45 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Глобальные стэйты изводим под корень как класс.
Через ответ на запрос, конечно (будь то вызов метода или обмен сообщениями).


Запрос куда?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:46 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Запрос через интерфейс к тому агенту, который за ним стоит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 20:40 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
О чём Дейкстр писал - тщетно. Проще ж дорваться до знакомой вотчины - мат. функций, а далее можно их комбинировать Сейчас меня начнут обвинять в догматизации Дейкстры, но нужно ещё и ещё раз тыкать в это носом, ибо его наработки совершенно не изучены и недооценены - притом теми, кто пытается претендовать на "передовость" (типа фп-шников). Не говоря про то, что дейкстровский анализ может иметь общее значение для системного анализа - об этом вообще никто не думал...

Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры, и, кажется, я понимаю, почему его наработки остались такими невостребованными: эта дисциплина накладывает на программиста слишком высокие требования к математическому образованию, и, собственно, к дисциплинированности, самоконтролю. ФП в этом плане гораздо демократичнее...

Илья Ермаков писал(а):
Но состояние-то у этого интерфейса к базе есть! И пусть будет - про что и речь.
Пусть это состояние остаётся в самой базе. Самому интерфейсу это состояние не нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О локализации состояния
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 20:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Миль пардон. Как раз уж с БД Вы никуда не денетесь от состояния. Один и тот же запрос Вам может вернуть разные данные.

Цитата:
эта дисциплина накладывает на программиста слишком высокие требования к математическому образованию

Да ну. Знание основ исчисления предикатов и приобретённый с опытом навык анализа состояний процессов. Куда уж до лямбда-исчислений и теорий категорий.
Или Вы всё про то же - про то, что ФП лучше защищено "от дурака"? Не разломаешь? Можно посмотреть образцы и ваять, а язык будет бить по рукам? Ну, что ж Вы хотите: Дейкстра - это анализ. С большой буквы Анализ. Инструмент понимания задач, а не просто формальная система.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О разделе описаний в модуле
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 00:20 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Запрос через интерфейс к тому агенту, который за ним стоит.


Хорошо. Откуда компонента возьмет этот интерфейс?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB