OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 23 Апрель, 2024 14:11

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




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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 00:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Geniepro писал(а):
Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры.

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

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


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

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


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


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

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 08:24 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Info21 писал(а):
Geniepro писал(а):
Я периодически пытаюсь прочесть "Дисциплину программирования" Дейкстры.

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

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

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


Последний раз редактировалось Geniepro Пятница, 31 Октябрь, 2008 08:33, всего редактировалось 1 раз.

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

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


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

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

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


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Geniepro писал(а):
Что это даёт по сравнению с тем же equational reasoning в ФП?

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


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Trurl писал(а):
А Вы часто применяете equational reasoning?
Увы, нет...


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Geniepro писал(а):
... Скажите, Вы сами реально используете эту дисциплину ... методично, от начала до конца?

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 13:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Но суть зла в виде "глобальности" - остается.

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


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Info21 писал(а):
Математики тоже не выписывают полностью свои доказательства, потому что это невозможно.

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

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


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Geniepro писал(а):
Info21 писал(а):
Математики тоже не выписывают полностью свои доказательства, потому что это невозможно.

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 15:53 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Vlad писал(а):
Но суть зла в виде "глобальности" - остается.

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


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


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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 21:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Отсутствие контроля - кто, где и когда имеет доступ к стэйту. В добавок к этому - неочевидные зависимости. В добавок к этому - проблемы в многопоточной среде. Короче, лучше один раз "разгрести", чем сто раз прочитать :)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 22:03 

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


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

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


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

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


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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 23:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Vlad писал(а):
Код:
create_window()->show()
Здесь проблем с "глобальностью" встречаться и не должно.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Valery Solovey писал(а):
Vlad писал(а):
Код:
create_window()->show()
Здесь проблем с "глобальностью" встречаться и не должно.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О локализации состояния
СообщениеДобавлено: Суббота, 01 Ноябрь, 2008 00:04 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Ясно, просто мне показалось, что это фабрика, возвращающая объект window - а его состояния, как известно, инкапсулированы - у которого имеется метод show.


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

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


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

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


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

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