Автор Тема: Упорядочение указателей в O7/11  (Прочитано 14060 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Упорядочение указателей в O7/11
« : Май 21, 2013, 05:27:22 am »
Согласно репорту указатели можно сравнивать только на равенство. На больше/меньше - нельзя. В чем глубокий смысл такого ограничения? Недостаток вполне очевиден - указатели нельзя использовать в качестве ключа поиска.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #1 : Май 21, 2013, 05:32:55 am »
В чем глубокий смысл такого ограничения?

Причем даже в ББ такая фигня.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #2 : Май 21, 2013, 05:57:51 am »
Согласно репорту указатели можно сравнивать только на равенство. На больше/меньше - нельзя. В чем глубокий смысл такого ограничения? Недостаток вполне очевиден - указатели нельзя использовать в качестве ключа поиска.
А какой смысл использовать указатели в качестве ключей для поиска? :o
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #4 : Май 21, 2013, 08:17:11 am »
С точки зрения Оберона, сравнение указателей совершенно бессмысленное занятие.

DddIzer

  • Гость
Re: Упорядочение указателей в O7/11
« Ответ #5 : Май 21, 2013, 01:04:08 pm »
Согласно репорту указатели можно сравнивать только на равенство. На больше/меньше - нельзя. В чем глубокий смысл такого ограничения? Недостаток вполне очевиден - указатели нельзя использовать в качестве ключа поиска.
дело в том, что Оберон на уровне языка не определяет структуру адресного пространства (то есть в качестве указателя (значения) может использоваться обьект произвольной сложности (структуры)), в отличии от более низкоуровневых яву (например,  язык си постулирует линейное адресное пространство с ячейками размером в байт  которое можно представить в виде ленты начинающейся с 0 ячейки ... в ней адрес некоторой переменной (содержимое переменной указателя) - есть номер ячейки с которой начинается переменная в этом пространстве, в этой модели имеют смысл расширенные операции сравнения).

DddIzer

  • Гость
Re: Упорядочение указателей в O7/11
« Ответ #6 : Май 21, 2013, 01:19:39 pm »
.... по ссылке ниже С. Губанов приводит возможные проблемы которые можно огрести развлекаясь с  ручными преобразованиями  ЗНАЧЕНИЙ  указателей
http://oberspace.dyndns.org/index.php/topic,214.0.html
...  эти проблемы
1. Предполагается, что адреса можно  упорядочить в некотором линейным пространстве
2. Сборщик мусоре НЕ МЕНЯЕТ эти адреса (во время сборки мусора и выделения памяти под обьекты)..

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #7 : Май 21, 2013, 01:31:13 pm »
.... по ссылке ниже С. Губанов приводит возможные проблемы которые можно огрести развлекаясь с  ручными преобразованиями  ЗНАЧЕНИЙ  указателей
http://oberspace.dyndns.org/index.php/topic,214.0.html
...  эти проблемы
1. Предполагается, что адреса можно  упорядочить в некотором линейным пространстве
2. Сборщик мусоре НЕ МЕНЯЕТ эти адреса (во время сборки мусора и выделения памяти под обьекты)..
Вообще говоря, сборщик мусора может перемещать объекты (то есть менять адреса) и не собирая мусор (то есть не имея целью освобождение памяти). Компактификация/дефрагментация памяти.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #8 : Май 21, 2013, 02:29:13 pm »
А какой смысл использовать указатели в качестве ключей для поиска? :o

А что в этом такого странного? Как еще задать связь между существующим объектом и еще чем-то (неинтрузивно)?

P.S. Перемещающий GC (пусть даже и теоретический применительно к оберонам) все объясняет, всем спасибо :)

DddIzer

  • Гость
Re: Упорядочение указателей в O7/11
« Ответ #9 : Май 21, 2013, 03:06:01 pm »

P.S. Перемещающий GC (пусть даже и теоретический применительно к оберонам) все объясняет, всем спасибо :)
нет (это только пример) (заметьте, что в Паскале  аналогично определена только часть операций).. второй пример... возможная реализация виртуального адресного пространства (пусть даже линейного) на нескольких  физически различных хранилищах... т.е. когда с точки зрения программиста память выделяется  под переменные а и b  как обычно  но сами эти ячейки расположены в физически различных пространствах (например , на разных машинах)  - здесь, возможна такая ситуация, что адреса этих переменных ОДИНАКОВЫ (разумеется в своих адресных пространствах) - как следствие универсальный указатель НЕЛЬЗЯ задать одним лишь адресом ( но можно задать парой (номером виртуального пространства и адресом в нем)) - в этом случае над указателем имеют смысл только операции идентификации (т.е. совпадения - равно , не равно).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #10 : Май 21, 2013, 05:00:12 pm »
нет (это только пример) (заметьте, что в Паскале  аналогично определена только часть операций).. второй пример... возможная реализация виртуального адресного пространства (пусть даже линейного) на нескольких  физически различных хранилищах...

Это что-то сильно экзотическое. А мы тут про квинтэссенцию императивного программирования говорим :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #11 : Май 21, 2013, 05:06:35 pm »
А какой смысл использовать указатели в качестве ключей для поиска? :o

А что в этом такого странного? Как еще задать связь между существующим объектом и еще чем-то (неинтрузивно)?

Хеш-код, конечно же.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DddIzer

  • Гость
Re: Упорядочение указателей в O7/11
« Ответ #12 : Май 21, 2013, 05:07:18 pm »
нет (это только пример) (заметьте, что в Паскале  аналогично определена только часть операций).. второй пример... возможная реализация виртуального адресного пространства (пусть даже линейного) на нескольких  физически различных хранилищах...

Это что-то сильно экзотическое. А мы тут про квинтэссенцию императивного программирования говорим :)
так она (в том числе) в этом и заключается ( в абстракции от "внутренней структуры" переменных).

DddIzer

  • Гость
Re: Упорядочение указателей в O7/11
« Ответ #13 : Май 21, 2013, 05:10:28 pm »
... из которой следует независимость от реализации.

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Упорядочение указателей в O7/11
« Ответ #14 : Май 21, 2013, 05:50:04 pm »
...
2. Сборщик мусоре НЕ МЕНЯЕТ эти адреса (во время сборки мусора и выделения памяти под обьекты)..
Вообще говоря, сборщик мусора может перемещать объекты (то есть менять адреса) и не собирая мусор (то есть не имея целью освобождение памяти). Компактификация/дефрагментация памяти.
Достаточно, чтобы сборщик мусора не менял адреса динамических объектов или вообще не вызывался лишь во время работы процедуры поиска. Возможно, что GC вообще не вызывается во время вызова процедур и загрузки-выгрузки модулей, как в КП.

Такую низкоуровневую процедуру можно реализовать в отдельном модуле через импорт SYSTEM, а внешний пользователь пусть видит только результат поиска.

Я так понимаю, если поиск идет в массиве ссылок типа "T", то процедура поиска будет эквивалентна чему-то такому:
PROCEDURE SearchPointerT* (IN a: ARRAY OF POINTER TO T; p: POINTER TO T; k: INTEGER; b: BOOLEAN): INTEGER;
BEGIN
ASSERT(k >= 0);
WHILE (k < LEN(a)) & ((a[k] = p) # b) DO
INC(k)
END
;RETURN
k (* (k = LEN(a)) OR ((a[k] = p) = b) *)
END SearchPointerT;
При "b = FALSE" - поиск первой ссылки несовпадающей с "p", начиная с "k"-ой;
при "b = TRUE" - поиск первой совпадающей с "p" ссылки, начиная с "k"-ой.
Для ссылок на списки в КП возможна общая процедура:
PROCEDURE SearchPointerRecord (IN a: ARRAY OF ANYPTR; p: ANYPTR; k: INTEGER; b: BOOLEAN): INTEGER;
« Последнее редактирование: Май 21, 2013, 05:52:10 pm от ddn »