OberonCore https://forum.oberoncore.ru/ |
|
ANYTYPE to another ANYTYPE https://forum.oberoncore.ru/viewtopic.php?f=81&t=2882 |
Страница 1 из 1 |
Автор: | Андрей [ Пятница, 01 Октябрь, 2010 12:33 ] |
Заголовок сообщения: | ANYTYPE to another ANYTYPE |
Кажется, CP не позволяет делать явное преобразование любого типа в любой другой, совпадающий с ним по размеру? Например, запись одного типа в запись другого, но совместимого с первым по размеру занимаемой памяти; или массив слов в массив байт, и наоборот? Что Оберон-сообщество думает о таких возможностях языка? |
Автор: | Rifat [ Пятница, 01 Октябрь, 2010 13:59 ] |
Заголовок сообщения: | Re: ANYTYPE to another ANYTYPE |
Возможно, вы просто не правильно вычислили размер обоих структур, нужно учитывать еще и выравнивание. |
Автор: | Илья Ермаков [ Пятница, 01 Октябрь, 2010 14:37 ] |
Заголовок сообщения: | Re: ANYTYPE to another ANYTYPE |
Такая операция небезопасна. Представьте, что в одной из записей есть указатели. В неё записывается мусор из другой. Сборщик мусора даёт сбой, если раньше программа сама не затрёт память по неверным адресам. Ключевой принцип современных безопасных языков - герметичность указателей. Однако поработать с записями без указателей можно. В системном программировании это бывает нужно. Нужно использовать операции псевдомодуля SYSTEM (MOVE и др.). Смотрите в документации ББ раздел "Платформенно-зависимые особенности". Но злоупотреблять SYSTEM нельзя, это низкоуровневые средства. Ещё есть вот такие вполне безопасные средства: viewtopic.php?p=38136 Можно преобразовать запись в массив байт посредством RecToBytes - и обратно эти байты в запись посредством RecFromBytes. Однако эти процедуры проверяют, чтобы записи не имели полей-указателей. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |