OberonCore
https://forum.oberoncore.ru/

О локализации состояния
https://forum.oberoncore.ru/viewtopic.php?f=27&t=1226
Страница 2 из 4

Автор:  Илья Ермаков [ Пятница, 31 Октябрь, 2008 00:32 ]
Заголовок сообщения:  Re: О локализации состояния

Не понял вопроса. Не туда лезем, по-моему.

Я высказываю простую мысль: что все взаимодействующие активные сущности системы инкапсулируют в себе некоторое состояние. В совершенно простом и понятном смысле. Автоматном, например.

Автор:  Info21 [ Пятница, 31 Октябрь, 2008 00:39 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Geniepro писал(а):
Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры.

Сердечно одобряю.

Действительно, Дейкстра может быть и трудноват для начинающих.
Поробуйте Д.Гриса ("Наука программирования").
Там помягче, поподробней.
А примеры другие, так что пересечений не будет.

Автор:  Vlad [ Пятница, 31 Октябрь, 2008 00:55 ]
Заголовок сообщения:  Re: О локализации состояния

Илья Ермаков писал(а):
Я высказываю простую мысль: что все взаимодействующие активные сущности системы инкапсулируют в себе некоторое состояние. В совершенно простом и понятном смысле. Автоматном, например.


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

Автор:  Илья Ермаков [ Пятница, 31 Октябрь, 2008 02:30 ]
Заголовок сообщения:  Re: О локализации состояния

В общем-то, можно и так назвать в первом приближении.

При внимательном рассмотрении: не будем вводить методов и сквозного управления (когда вызов "гуляет насквозь"). Тогда у нас уже не переменнная (и не объект), а некий активный агент, который сам решает, менять ему своё состояние и как, и или не менять. А окружение только ему что-то посылает.

Далее. Уберём глобальность. Т.е. нет глобальных описателей-указателей. Активные сущности организуются в уровни. Каждая система знает свои подсистемы. Но ничего не знает про свою надсистему, кроме того, что туда можно выталкивать и оттуда можно получать сообщения. (не обязательно дерево. Более адекватен даг уровней). Это уже совсем далеко от "глобальных переменных". Это в чём-то похоже и на ФП. Это в чём-то похоже на dataflow. И, наконец, самое главное, что это в чём-то похоже на реальные системы.

P.S. Во многом это есть в Композите. Но кое-в-чём не так. У меня вот мысли идут другим путём, хотя было интересно вдруг увидеть сходное у швейцарцев.

Автор:  Geniepro [ Пятница, 31 Октябрь, 2008 08:24 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Info21 писал(а):
Geniepro писал(а):
Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры.

Сердечно одобряю.

Действительно, Дейкстра может быть и трудноват для начинающих.
Поробуйте Д.Гриса ("Наука программирования").
Там помягче, поподробней.
А примеры другие, так что пересечений не будет.

Да, эта книга у меня тоже есть, её я тоже пытался изучить... Попробую ещё раз... :oops:

Автор:  Geniepro [ Пятница, 31 Октябрь, 2008 08:27 ]
Заголовок сообщения:  Re: О локализации состояния

Илья Ермаков писал(а):
Миль пардон. Как раз уж с БД Вы никуда не денетесь от состояния. Один и тот же запрос Вам может вернуть разные данные.
Так и я про это же. Пусть это состояние БД остаётся в этой самой БД. БД -- это внешний мир, пусть он меняется как угодно -- его проблемы...

Автор:  Geniepro [ Пятница, 31 Октябрь, 2008 08:31 ]
Заголовок сообщения:  Re: О локализации состояния

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

Хорошо. Скажите, Вы сами реально используете эту дисциплину? Не один раз на десяток программ, что бы побаловаться или решить серьёзную проблему в программе, а так, что бы методично, от начала до конца? Или Вы считаете, что конкретно Вы можете ограничиться редкими ассертами, а полностью все эти предикаты выписывать необязательно?
Что это даёт по сравнению с тем же equational reasoning в ФП?

Автор:  Trurl [ Пятница, 31 Октябрь, 2008 09:40 ]
Заголовок сообщения:  Re: О локализации состояния

Geniepro писал(а):
Что это даёт по сравнению с тем же equational reasoning в ФП?

А Вы часто применяете equational reasoning?

Автор:  Geniepro [ Пятница, 31 Октябрь, 2008 10:02 ]
Заголовок сообщения:  Re: О локализации состояния

Trurl писал(а):
А Вы часто применяете equational reasoning?
Увы, нет...

Автор:  Info21 [ Пятница, 31 Октябрь, 2008 13:12 ]
Заголовок сообщения:  Re: О локализации состояния

Geniepro писал(а):
... Скажите, Вы сами реально используете эту дисциплину ... методично, от начала до конца?

Математики тоже не выписывают полностью свои доказательства, потому что это невозможно.

Суть не в том, чтобы все обоснования выписывать "методично, от начала до конца", а в том, чтобы написать доказательство (программу) так, чтобы в любом месте можно было в случае необходимости уточнить.

Автор:  Сергей Губанов [ Пятница, 31 Октябрь, 2008 13:18 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Vlad писал(а):
Но суть зла в виде "глобальности" - остается.

А в чём, собственно, зло?

Автор:  Geniepro [ Пятница, 31 Октябрь, 2008 13:20 ]
Заголовок сообщения:  Re: О локализации состояния

Info21 писал(а):
Математики тоже не выписывают полностью свои доказательства, потому что это невозможно.

Суть не в том, чтобы все обоснования выписывать "методично, от начала до конца", а в том, чтобы написать доказательство (программу) так, чтобы в любом месте можно было в случае необходимости уточнить.

Математики опираются на ранее доказанные теоремы. В программировании такой опоры практически нет. На что программистам-то опираться?

Автор:  AVC [ Пятница, 31 Октябрь, 2008 13:36 ]
Заголовок сообщения:  Re: О локализации состояния

Geniepro писал(а):
Info21 писал(а):
Математики тоже не выписывают полностью свои доказательства, потому что это невозможно.

Суть не в том, чтобы все обоснования выписывать "методично, от начала до конца", а в том, чтобы написать доказательство (программу) так, чтобы в любом месте можно было в случае необходимости уточнить.

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

Что касается конкретно Дейкстры, увы, не чувствую благодати... :roll:

Автор:  Vlad [ Пятница, 31 Октябрь, 2008 15:53 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Сергей Губанов писал(а):
Vlad писал(а):
Но суть зла в виде "глобальности" - остается.

А в чём, собственно, зло?


Отсутствие контроля - кто, где и когда имеет доступ к стэйту. В добавок к этому - неочевидные зависимости. В добавок к этому - проблемы в многопоточной среде. Короче, лучше один раз "разгрести", чем сто раз прочитать :)

Автор:  Илья Ермаков [ Пятница, 31 Октябрь, 2008 21:16 ]
Заголовок сообщения:  Re: О локализации состояния

Geniepro писал(а):
Хорошо. Скажите, Вы сами реально используете эту дисциплину? Не один раз на десяток программ, что бы побаловаться или решить серьёзную проблему в программе, а так, что бы методично, от начала до конца? Или Вы считаете, что конкретно Вы можете ограничиться редкими ассертами, а полностью все эти предикаты выписывать необязательно?

Большинство циклов, например, в моей практике тривиально - полный проход и лин. поиск. Когда необходимо построить более сложный случай (например, сортировку какую-нибудь) - выписываю инвариант; прогоняю в уме, как цикл будет приближаться к постусловию и т.п. Это стиль даже не мышления, а ощущения, что ли, алгоритма. В отличие от "наивного" стиля, когда мы пытаемся в уме по шагам выполнять (а в предельном случае - гоняем отладчиком). "Способность выполняться на компьютере является только приятным побочным эффектом" (С) Дейкстра :-)

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

Автор:  Сергей Губанов [ Пятница, 31 Октябрь, 2008 21:24 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Vlad писал(а):
Отсутствие контроля - кто, где и когда имеет доступ к стэйту. В добавок к этому - неочевидные зависимости. В добавок к этому - проблемы в многопоточной среде. Короче, лучше один раз "разгрести", чем сто раз прочитать :)

Так ведь он для того и сделан глобальным, что бы доступ к нему имел кто угодно. Он реализован потокобезопасным, так как доступ к нему имеет кто угодно. Про неочевидные зависимости не понял.

Автор:  Vlad [ Пятница, 31 Октябрь, 2008 22:03 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Сергей Губанов писал(а):
Так ведь он для того и сделан глобальным, что бы доступ к нему имел кто угодно.


Вот это и плохо. Это и есть "компромисс".

Сергей Губанов писал(а):
Он реализован потокобезопасным, так как доступ к нему имеет кто угодно.


Вы не понимаете. Понаставить EXCLUSIVE - мало для того, чтобы все работало :) Тут упоминался пример парсера, который использует глобальную переменную для индикации ошибки. Толку с того, что вы сделаете эту переменную потокобезопасной - парсер все равно будет глючить в многопотоковой среде. Проэкстраполируйте все это на большую систему со сложными "глобальными переменными" и все станет еще хуже.

Сергей Губанов писал(а):
Про неочевидные зависимости не понял.


Это когда вы пишите:
Код:
create_window()->show()


И у вас все падает, потому что коннект к БД не был заранее засетаплен.

Автор:  Valery Solovey [ Пятница, 31 Октябрь, 2008 23:01 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Vlad писал(а):
Код:
create_window()->show()
Здесь проблем с "глобальностью" встречаться и не должно.

Автор:  Vlad [ Пятница, 31 Октябрь, 2008 23:23 ]
Заголовок сообщения:  Re: О разделе описаний в модуле (из ветки про PascalABC)

Valery Solovey писал(а):
Vlad писал(а):
Код:
create_window()->show()
Здесь проблем с "глобальностью" встречаться и не должно.


Если create_window() - свободная функция, то полезть в базу она может только через глобальную переменную. И это проблема. Потому что:
- неявная зависимость от БД
- неизвестно в какую именно БД она полезет, как только приложение начнет поддерживать несколько БД.

Вот этот код избавлен от всех этих недостатков:
Код:
create_window(db)->show()

Автор:  Valery Solovey [ Суббота, 01 Ноябрь, 2008 00:04 ]
Заголовок сообщения:  Re: О локализации состояния

Ясно, просто мне показалось, что это фабрика, возвращающая объект window - а его состояния, как известно, инкапсулированы - у которого имеется метод show.

Страница 2 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/