OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 01:41

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




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 12:41 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Код:
VAR p:POINTER TO ARRAY OF INTEGER;
PROCEDURE Bad(VAR a:INTEGER);
BEGIN
  p:=NIL;
  ...здесь срабатывает сборщик мусора, и вызывается NEW для чего-то ещё.
  a:=10;
END Bad.

BEGIN
  NEW(p,100);
  ...
  Bad(p[10])
END


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 13:50 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 13:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl писал(а):
...


Блеск!

Надо понимать, трюк невозможен извне, т.е. если указатель недоступен на присваивание?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 17:13 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
info21 писал(а):
Надо понимать, трюк невозможен извне, т.е. если указатель недоступен на присваивание?

Конечно. Да его и изнутри не так-то легко использовать.

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

Чтобы было заметно, небходимо "счастливое" совпадение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 20:40 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Нефиговая бага... Для агрегированных записей оно тоже актуально?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 20:51 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Это не бага... ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 21:30 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Trurl писал(а):
Это не бага... ;)


Думается, зависит от реализации сборщика мусора.
Ему имеет смысл быть немножко "консервативнее" и проверять ссылочные (VAR) переменные на принадлежность к куче. Области памяти, в которые они попадают, должны помечаться как используемые.
Вроде бы, тогда проблем быть не должно. :?:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 22:08 

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

Что-то у меня тихое подозрение, что это из "былого и пережитого"... :wink:
И как себя система вела?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 22:43 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Владимир Лось писал(а):
Trurl писал(а):
Код:
 ...

Что-то у меня тихое подозрение, что это из "былого и пережитого"... :wink:
И как себя система вела?


Подозреваю, что "бага" пока сугубо теоретическая. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 30 Октябрь, 2007 02:45 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Trurl писал(а):
Это не бага... ;)


А что это, если не бага рантайма?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 30 Октябрь, 2007 09:30 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Vlad писал(а):
А что это, если не бага рантайма?

Это фича рантайма. :-)

AVC писал(а):
Подозреваю, что "бага" пока сугубо теоретическая. :)

Ага, я же не дурак - такие процедуры писать.

AVC писал(а):
Думается, зависит от реализации сборщика мусора.
Ему имеет смысл быть немножко "консервативнее" и проверять ссылочные (VAR) переменные на принадлежность к куче.

В начале Kernel есть констатнта, регулирующая степень консервативности.
Код:
CONST strictStackSweep = TRUE;

Если поставить FALSE, всё, напоминающее адрес в куче, будет рассматриваться как адрес в куче.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 30 Октябрь, 2007 10:22 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Trurl писал(а):
Vlad писал(а):
А что это, если не бага рантайма?

Это фича рантайма. :-)


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

Trurl писал(а):
В начале Kernel есть констатнта, регулирующая степень консервативности.
Код:
CONST strictStackSweep = TRUE;

Если поставить FALSE, всё, напоминающее адрес в куче, будет рассматриваться как адрес в куче.


А что при этом с производительностью GC становится (который в ББ и так не блещет)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 30 Октябрь, 2007 12:34 
Аватара пользователя

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

Цитата:
А что при этом с производительностью GC становится (который в ББ и так не блещет)?

Еще как блещет. Только в реальных задачах, а не в дурацких тестах.


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Trurl писал(а):
Если поставить FALSE, всё, напоминающее адрес в куче, будет рассматриваться как адрес в куче.


Интересно, почему там стоит TRUE... :?:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 30 Октябрь, 2007 18:44 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
info21 писал(а):
Оберон что, стал опасней, чем Ц?


С обероном все хорошо. А вот конкретная реализация (в лице ББ) с конкретно этой "фичей" подвержена опасным эффектам, типичным для C. Но главная опасность в том, что такого никто не ожидает от оберон системы.

info21 писал(а):
Цитата:
А что при этом с производительностью GC становится (который в ББ и так не блещет)?

Еще как блещет. Только в реальных задачах, а не в дурацких тестах.


Понятно, значит доказать вы опять не можете.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 31 Октябрь, 2007 09:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Vlad писал(а):
info21 писал(а):
Vlad писал(а):
А что при этом с производительностью GC становится (который в ББ и так не блещет)?

Еще как блещет. Только в реальных задачах, а не в дурацких тестах.

Понятно, значит доказать вы опять не можете.

Понятно, что Вы не понимаете проблематику понятия "доказательство".[/quote]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 31 Октябрь, 2007 10:22 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
AVC писал(а):
Trurl писал(а):
Если поставить FALSE, всё, напоминающее адрес в куче, будет рассматриваться как адрес в куче.


Интересно, почему там стоит TRUE... :?:


Кстати, до конца непонятно, а есть ли на самом деле "бага"?
Я вчера сделал несколько попыток, но заставить таким способом ББ ошибиться не смог.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 31 Октябрь, 2007 10:29 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
AVC писал(а):
Я вчера сделал несколько попыток, но заставить таким способом ББ ошибиться не смог.


Я там немного подправил текст: ввел цикл, обернул массив в запись, для нее ввел финализатор, и т.д.
Возможно, я был недостаточно изобретателен.
Кому-нибудь удалось на практике воспроизвести сконструированную Трурлем ошибку?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 31 Октябрь, 2007 17:00 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Понял почему не получается. Теперь не могу понять, как у меня получилось.
При передаче a[k] по ссылке, компилятор размещает адрес a в дополнительной локальной переменной.


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

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Trurl писал(а):
Понял почему не получается. Теперь не могу понять, как у меня получилось.
При передаче a[k] по ссылке, компилятор размещает адрес a в дополнительной локальной переменной.

Теперь понятно.
1) Оборачиваем массив в запись.
2) Перед ним добавляем несколько переменных.
3) передаем (как прежде) по ссылке элемент массива.
Т.о. ошибку мне удалось воспроизвести ошибку.
Так что "бага" теперь "доказана".


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

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


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

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


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

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