OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 19:46

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: ANYTYPE to another ANYTYPE
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 12:33 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
Кажется, CP не позволяет делать явное преобразование любого типа в любой другой, совпадающий с ним по размеру?
Например, запись одного типа в запись другого, но совместимого с первым по размеру занимаемой памяти;
или массив слов в массив байт, и наоборот?

Что Оберон-сообщество думает о таких возможностях языка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ANYTYPE to another ANYTYPE
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 13:59 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Возможно, вы просто не правильно вычислили размер обоих структур, нужно учитывать еще и выравнивание.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ANYTYPE to another ANYTYPE
СообщениеДобавлено: Пятница, 01 Октябрь, 2010 14:37 
Модератор
Аватара пользователя

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

Представьте, что в одной из записей есть указатели. В неё записывается мусор из другой. Сборщик мусора даёт сбой, если раньше программа сама не затрёт память по неверным адресам. Ключевой принцип современных безопасных языков - герметичность указателей.

Однако поработать с записями без указателей можно. В системном программировании это бывает нужно. Нужно использовать операции псевдомодуля SYSTEM (MOVE и др.). Смотрите в документации ББ раздел "Платформенно-зависимые особенности". Но злоупотреблять SYSTEM нельзя, это низкоуровневые средства.

Ещё есть вот такие вполне безопасные средства:
viewtopic.php?p=38136

Можно преобразовать запись в массив байт посредством RecToBytes - и обратно эти байты в запись посредством RecFromBytes. Однако эти процедуры проверяют, чтобы записи не имели полей-указателей.


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

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


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

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


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

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