OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 12:54

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




Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 09:55 
Аватара пользователя

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

Alexey_Donskoy писал(а):
Неужели Вы всерьёз считаете, что любая задача может быть подвергнута декомпозиции до такой степени, что большие контексты будут не нужны?
Ну, если сформулировать помягче, без абсолютности, -- то да. Обычно громоздкие (не говорю "большие") контексты -- признак плохого понимания структуры задачи/алгоритма и/или неумения пользоваться даже стандартными средствами структурирования вроде записей, не говоря о чуть более "техничных".

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 12:40 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Коллеги!

Что-то вас не в ту степь понесло...

Контекст, в любом случае, отражение (части) состояния программы (моделируемой системы). Никуда от этого не деться. Другой вопрос, как нам то или иное средство позволяет удобно и адекватно вычленить и оперировать с частью этого глобального состояния?...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 12:42 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Alexey_Donskoy писал(а):
Неужели Вы всерьёз считаете, что любая задача может быть подвергнута декомпозиции до такой степени, что большие контексты будут не нужны?

Что значит - БОЛЬШИЕ? :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:09 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Большие - это значит такие, которые невыгодно (накладно) передавать в качестве параметров в локальные процедуры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:18 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Владимир Лось писал(а):
Контекст, в любом случае, отражение (части) состояния программы (моделируемой системы). Никуда от этого не деться. Другой вопрос, как нам то или иное средство позволяет удобно и адекватно вычленить и оперировать с частью этого глобального состояния?...
Так разделение на уровни и является адекватным вычленением контекста. И более низкий уровень мы создали для того, чтобы его контекст не мешался под ногами. Мы сознательно уменьшили контекст верхнего уровня. Зачем же, спрашивается, мы после всего этого снова выковыриваем наверх часть контекста, упроно запихнутого вниз?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:40 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Вообще-то похоже, что все забыли, с чего начали ;)

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

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

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

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

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


Последний раз редактировалось Alexey_Donskoy Вторник, 16 Декабрь, 2008 13:52, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:42 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
PGR писал(а):
Если не использовать параметры, то вариантов хранения такого контекста может быть три:
1. локальные переменные основной процедуры (процедурное программирование);
2. закрытые глобальные переменные модуля (модульное программирование);
3. закрытые поля объекта (ООП).

4. параметры функций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:44 

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

Это уже зависит от особенностей языка, от качества транслятора...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 13:59 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Alexey_Donskoy писал(а):
Тем не менее, на мой взгляд, понятие контекста - одно из важных, базовых понятий при правильном подходе к проектированию сложных систем.
То, что процедуры а Паскале имеют свои локальные контексты (локальные переменные), которые доступны во вложенных локальных процедурах, органично соответствует принципам декомпозиции сложных систем.
То, что замыкания являются полезным и практически востребованным механизмом, также следует отсюда.
Я вот что-то никак не увижу того, как из этого следует полезность замыканий.


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Ну, поправьте мои рассуждения, если ошибаюсь... Рассмотрим конкретный пример - итераторы.

Полагаю, что полезность итераторов (вроде ForEach) у Вас сомнения не вызывает?

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

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

Получается, что мы хотим воспользоваться определённым сервисом (вызвать процедуру-итератор), который должен оперировать с двумя разными контекстами.

Передача одного контекста, как правило, осуществляется автоматически (при вызове метода). А вот как передать итератору второй контекст? Вот и вылезла необходимость т.н. замыканий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 14:47 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Лично я всегда считал итератор методом получения очередного элемента. Как только элемент получен - работа итератора завершена. Остальное - просто цикл, в контексте которого есть очередной элемент последовательности и т.д.

Основным достоинством итератора как части языка является отсутствие необходимости заводить курсор (дополнительную переменную для хранения положения текущего элемента в последовательности). Т.е., основное достоинство итераторов - перевод курсора на более низкий уровень с целью уменьшения текущего контекста. Если не перекладывать эту работу на язык путём добавления новой конструкции и делать всё вручную, то ничего принципиально не изменится (если не считать принципиальным манипуляцию над контекстом). Значит, если есть два контекста в случае с foreach, то их будет два и в случае ручной обработки. Но, как мне кажется, он там один.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 15:23 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Здравая мысль!

Ну, с ForEach всё действительно просто...

А вот с FindFirst уже веселее... потому что цикл поиска придётся прописывать явно... Хотя, конечно, когнитивные затраты на это не особо велики ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 16:19 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А можете привести примеры, где затраты более-менее существенны?


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Не, не могу привести примеры... С итераторами Вы меня убедили, а других случаев у меня не было в практике, чтобы так необходимы стали замыкания.

А вот большие и сложные контексты (локальные, временные), попадаются частенько... Ну да вложенными процедурами всё решается без проблем, а вот если не будет вложенных процедур, то я не знаю, что делать... То есть знаю, конечно (как и говорил Info21), но это не всегда удобно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 16:53 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Ну да, с этим согласен.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 18:05 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 151
Видя, что обсуждение пришло от замыканий к взаимодействию контекстов, прошу
коллег взглянуть на эту тему


Последний раз редактировалось Рэйлвэй Каген Вторник, 16 Декабрь, 2008 18:46, всего редактировалось 1 раз.

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

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

P.S. И начните, пожалуйста, обсуждение в разделе Дракона. Тут можно оставить ссылку. Раздел не подходящий - с образованием Ваш вопрос не связан.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 23:27 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Valery Solovey писал(а):
Владимир Лось писал(а):
Контекст, в любом случае, отражение (части) состояния программы (моделируемой системы). Никуда от этого не деться. Другой вопрос, как нам то или иное средство позволяет удобно и адекватно вычленить и оперировать с частью этого глобального состояния?...
Так разделение на уровни и является адекватным вычленением контекста. И более низкий уровень мы создали для того, чтобы его контекст не мешался под ногами. Мы сознательно уменьшили контекст верхнего уровня. Зачем же, спрашивается, мы после всего этого снова выковыриваем наверх часть контекста, упроно запихнутого вниз?


Хм... А Вам не кажется, что ПО УРОВНЯМ КОНТЕКСТ делить как-то совсем кошет?
Контекст - он, по-моему, просто "ЕСТЬ" и он - просто - "ДАННЫЙ".
В него могут входить части и отображения иерархий совершенно разных (скорее всего - соседних) уровней представления глобального состояния системы, но сам он "имеет уровень" только благодаря "приписке" к той или иной функции...

К тому же, с "уровнями", как всегда, как-то надо всё же поосторожней... Алгоритм (обобщённый) sort() из STL - он из какого уровня? Смотря - что сортируем ( на коком уровне) - да? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Вторник, 16 Декабрь, 2008 23:42 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
По большому счёту оно и есть, это глобальное состояние всей системы в целом...
Контекст появляется тогда, когда мы строим частную модель этой системы (выделяем подсистему) и решаем при помощи этой модели частную подзадачу.
Так, если мы вызываем процедуру, в которой есть локальные переменные, то они и составляют контекст этой процедуры. В то же время они в текущий момент присутствуют в оперативной памяти, и если сделать дамп этой памяти - он и будет являться описываемым Вами состоянием всей системы в целом.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сюда?
СообщениеДобавлено: Среда, 17 Декабрь, 2008 11:24 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Alexey_Donskoy писал(а):
По большому счёту оно и есть, это глобальное состояние всей системы в целом...
Контекст появляется тогда, когда мы строим частную модель этой системы (выделяем подсистему) и решаем при помощи этой модели частную подзадачу.
...
Однако ж отталкиваться от глобально-философского понятия нецелесообразно.
...


Алексей, у нас с Вами, видимо, несколько разнится понимание контекста (отношение к нему :) )...

Как раз-таки, основным моментом всегда была именно "стартовая точка" - "философия базиса", от чего отталкиваются, при решении той или иной задачи (класса задач)...

Alexey_Donskoy писал(а):
Контекст появляется тогда, когда мы строим частную модель этой системы

Контекст НЕ ПОЯВЛЯЕТСЯ!
Он СУЩЕСТВУЕТ ВСЕГДА, применительно к тому или иному участку выполнения тех или иных действий.
ОВЕЩЕСТВЛЕНИЕ составляющих контекст "имён", присваивание им конкретных значений, - да - происходит при вызове функции (активизации алгоритма).

Вы решаете задачу ГОТОВЫМИ, ИЗВЕСТНЫМИ методами. Методы (способы, последовательности действий) оперируют "абстрактными" понятиями и отношениями между ними. Конкретизация - это ВАШ произвол, когда ВЫ решаете, что тот или иной алгоритм "подходит" на том или ином этапе решения вашей задачи.

Заметьте, что в данном случае это - НЕ "часть модели нашей системы". Это нечто, что непосредственно к модели НЕ относится. Да, оно помогает изменить состояние нашей системы, но это что-то существующие априори и окремо.

Искусство "натравливания" алгоритмов на участки модели как раз и заключается в увязке части состояния системы с "подготовленными местами" контекста, для проведения с частями модели каких либо преобразований или их анализа. По сути, контекст - набор псевдонимов, "алиасов", масок, за которыми от конкретного алгоритма прячется реальные элементы модели. Алгоритм,по большому гамбургскому счёту, про "модель" ничего знать не должен.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.

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


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

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


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

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