OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 11:04 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 11:16 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Задача "Читатели-писатели" в параллельных процессах имеет множество вариантов-разновидностей...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 13:13 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Валерий Лаптев писал(а):
Задача "Читатели-писатели" в параллельных процессах имеет множество вариантов-разновидностей...
Да нету здесь никаких параллельных процессов. Два райтера в примере Александра пишут в текст ПО ОЧЕРЕДИ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 14:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Info21 писал(а):
Нелегко понять, зачем могут быть нужны два писателя в один текст при такой интерференции.
Прояснение этого вопроса помогает ответить на другой: достаточно ли завести один глобальный Writer в модуле, или нужно каждый раз создавать новый. В Системе Оберон Writer был не указательным типом, и его часто объявляли статически - один на весь модуль. Но там Writer писал в собственный Buffer, который очищался (на самом деле - перемещался) при записи в Text. Там было бы так:
Код:
Texts.OpenWriter(wrA);
Texts.OpenWriter(wrB);
Texts.Write(wrA, 'A');
Texts.Write(wrB, 'B');
Texts.Write(wrB, 'B');
Texts.Write(wrA, 'A');
Texts.Append(t, wrA);
Texts.Append(t, wrB);
Поэтому и вопроса бы не возникло : )
А в ББ, стало быть, надо на каждый сеанс записи открывать (или позиционировать) Writer заново. Такие тонкости просто надо знать, чтобы правильно работать с текстами, и чтобы правильно дробить эту работу на процедуры, отвечая на вопросы типа "что надо передавать в подпрограмму формирования части текста - ссылку на Writer или на сам Text?.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 18:57 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 18:59 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
igor писал(а):
К слову будет сказать, имя процедуры WriteChar следовало бы заменить на InsertChar, чтобы не вводило в заблуждение. А потом добавить новую процедуру WriteChar, которая писала бы поверх символа.
Это зависит от режима записи в текст, поэтому самим текстом и решается. Для простого Writer-а знать таки вещи - слишком жирно будет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 19:04 

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

Это зависит от задачи, поэтому такое решение в общем случае не подходит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 19:46 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Valery Solovey писал(а):
А если бы они оба писали в один буфер?
Невозможно by design.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 21:17 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Valery Solovey писал(а):
igor писал(а):
...
Это зависит от задачи, поэтому такое решение в общем случае не подходит.
Согласен. И Евгений Темиргалеев тоже прав, такие навороты слишком слабо обоснованы. Невозможно заранее прописать все решения на все случаи жизни. Будет конкретная задача, будет и решение :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 21:23 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Valery Solovey писал(а):
igor писал(а):
К слову будет сказать, имя процедуры WriteChar следовало бы заменить на InsertChar, чтобы не вводило в заблуждение. А потом добавить новую процедуру WriteChar, которая писала бы поверх символа.
Это зависит от режима записи в текст, поэтому самим текстом и решается.
А подсистема текст разве отслеживает, нажимал пользователь на клавишу Insert или нет? Вроде, WriteByte() всегда пишет в текст в режиме вставки (безусловно), или я не прав?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 16 Ноябрь, 2009 21:40 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 17 Ноябрь, 2009 08:51 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Так в ББ режим замены вообще отсутствует (т.к. является лишней модальностью, модальности в интерфейсах обычно зло).
Отсутствует режим замены, включаемый при помощи клавиатуры? Так и я про это. В реальных-то задачах оба эти режимы нужны. Значит нужны две функции записи: одна в режиме вставки, другая в режиме замены. Почему в этом "нету смысла"?
А, ну да! Груз уже написанных программ :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 17 Ноябрь, 2009 10:10 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
igor писал(а):
В реальных-то задачах оба эти режимы нужны.

По моим наблюдениям, 95% пользователей режим вставки не используют.
Сам тоже не использую, уж очень редко возникает необходимость.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 17 Ноябрь, 2009 10:26 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
hothing писал(а):
По моим наблюдениям, 95% пользователей режим вставки не используют.
Сам тоже не использую, уж очень редко возникает необходимость.
Напомню, что процедура WriteChar() из модуля TextModel пишет символ в текст в режиме вставки. И, если верить Вашей статистике, то 95% пользователей должны быть неудовлетворены.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 17 Ноябрь, 2009 13:45 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
2igor Пардон, очепятка. Имелся ввиду режим замены.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 17 Ноябрь, 2009 15:04 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
hothing писал(а):
2igor Пардон, очепятка. Имелся ввиду режим замены.
Тогда Ваш аргумент принимается :). Действительно, режим замены применяется не часто.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 18 Ноябрь, 2009 01:09 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
igor писал(а):
В реальных-то задачах оба эти режимы нужны. Значит нужны две функции записи: одна в режиме вставки, другая в режиме замены.
Есть операция удаления указанного куска модели. Также как пользователь выделяет кусок текста, который нужно заменить и начинает вводить текст.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 18 Ноябрь, 2009 06:25 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Евгений Темиргалеев писал(а):
igor писал(а):
В реальных-то задачах оба эти режимы нужны. Значит нужны две функции записи: одна в режиме вставки, другая в режиме замены.
Есть операция удаления указанного куска модели. Также как пользователь выделяет кусок текста, который нужно заменить и начинает вводить текст.
Вы о том, что есть возможность заменить операцию "вставка в режиме замены" на две элементарные операции: "удаление символа в текущей позиции" и "вставка нового символа в текущую позицию"?
Но в этом случае будет произведено много лишней работы: первая операция сдвинет хвост на одну позицию влево, а вторая на одну позицию вправо. Ясно, что если мы просто хотим заменить символ, то двигать хвост туда-сюда нет никакой необходимости.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 18 Ноябрь, 2009 07:42 
Аватара пользователя

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


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

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


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

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


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

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