OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 01 Май, 2020 11:01 

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

Большая часть ПО построена на использовании динамической памяти и структурах с указателями, и прикладным программам не требуется вся доступная память, а только какая-то часть (и вряд ли нужно больше 4Гб адресуемой памяти). Значит можно сэкономить память используя короткие указатели и немного магии при кодо-генерации или программировании.

Использовать два разных типа "указатель" и "ссылка"? Использовать пулы/сегменты памяти? И как подсчитать стоит ли "овчинка выделки"?

NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

--
Ради интереса пролистал книжку по С++ - и там это реализуется довольно понятно. А вот в Оберонах - фигушки, нужен новый язык и компилятор :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 14:14 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 14:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну если у вас есть очень много мелких и связных объектов - и вам реально надо на них экономить...

Локализуйте задачу. Не надо ставить её "для языка и для всех подобных задач".
У вас, скорее всего, это будут объекты, инкапсулированные в чём-то.

Например, торчит наружу один большой контейнер - Carrier, у него Rider для доступа к данным, а внутри - эти миллионы малых объектов.

Ну и реализуйте их в рамках одного модуля как угодно. Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 14:33 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Info21 писал(а):
KISS

:) “Everything should be made as simple as possible, but no simpler.”


Последний раз редактировалось hothing Пятница, 01 Май, 2020 14:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 14:43 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Илья Ермаков писал(а):
...Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.

Можно. А как насчет уборки мусора ("внутри", а не "снаружи")? Реализовать самому, и для каждой задачи?
Уборка мусора - не самая тривиальная задача.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 19:44 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
hothing писал(а):
NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

А откуда у вас эта информация? Любопытно бы почитать.
Предположу, что в мире C/++, полном рисков и опасностей, такая косвенная адресация обеспечивает, кроме прочего, еще и безопасность: когда доступна адресная арифметика, лучше спрятать адреса от ненадежных программ(истов). И расплачиваться за эту косвенность приходится; и наверняка там не простой массив указателей, а какая-нибудь колллекция ;)

В мире же Оберонов пользоваться указателями - совершенно безопасно и бесплатно. Даже если передать их ненадежным программистам.
hothing писал(а):
Ради интереса пролистал книжку по С++ - и там это реализуется довольно понятно. А вот в Оберонах - фигушки, нужен новый язык и компилятор :)

В Оберонах, действительно, подход совсем другой: язык и компилятор минималистичны, просты и ясны. Поэтому можно слегка изменить для своей большой задачи компилятор. (Кстати, язык, возможно, и не придется менять под 64бит указатели).

Написание нового бэкэнда компилятора OP2, по оценкам ETH, занимало 0,5 студенто-года. Полагаю, в игровой индустрии есть такие ресурсы; только "куда ударять надо" - они не знают.

Написание нового бэкэнда gcc... я не встречал оценок трудоемкости ). Поэтому в их мире надо заранее как можно больше всунуть в язык.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 19:49 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Илья Ермаков писал(а):
Сделайте выделение на массивах - и адресуйтесь по относительному смещению

Коллеги, я обнаружил, что наш местный ВУЗ, похоже, вообще перестал учить студентов делать динамические структуры данных в массивах. Типа, кому это надо, у всех есть new. А потом еще в лекции одного джависта услыхал, что массивы - это legacy: знать, конечно, надо про них, но пользоваться в новом коде - не.

Подскажите, в других вузах такая же ситуация?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Май, 2020 20:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
hothing писал(а):
Илья Ермаков писал(а):
...Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.

Можно. А как насчет уборки мусора ("внутри", а не "снаружи")? Реализовать самому, и для каждой задачи?
Уборка мусора - не самая тривиальная задача.


А внутри контейнера, среди этих микрообъектов такая сложная логика, что нельзя освобождать явно? Нет простой логики владения?

Сборка мусора обязательна в двух ситуациях:
1) В расширяемой системе, где между компонентами гуляют объекты - и явно контролировать владение, его передачу и т.п. очень сложно (что пробует делать Rust, но статически с глобальным анализом, а не для расширяемых систем. (Читаем классические обоснования у Шиперского в EthOS).
2) Всюду :) То есть, решающий свою задачу программист не должен думать об освобождении памяти, иначе будет какой-то процент ошибок, и система будет ненадёжной не на логическом уровне, а на уровне недетерминированного повреждения памяти.

А где можно без сборки мусора:
Когда вы пишите замкнутый компонент, с внутренними объектами, с ограниченной логикой, которую можете спокойно верифицировать. А потом уже 1000 раз безопасно использовать 1 раз написанное.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Кстати, для таких случаев, когда нужно поработать с объектами на своём управлении памятью в обход GC, но используя ООП (а таких примеров придумать запросто - какие-то деревья с разнотипными листьями, у которых методы и по которым можно делать WITH):

- в КП/ББ есть POINTER [untagged] TO RECORD.
Это не то же самое, что POINTER TO RECORD [untagged].
Во втором случае базовый тип - внеязыковый, без тега, его нельзя расширять, привязывать методы, передавать полиморфно через параметры.

А POINTER [untagged] - это нетрассируемый GC указатель. То есть, выделять своим образом какие-то полноценные типы КП - и не драться с GC - очень просто.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Май, 2020 14:02 
Аватара пользователя

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

:) “Everything should be made as simple as possible, but no simpler.”

Ну да: каждый мнит себя Эйнштейном.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 03 Май, 2020 23:11 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
Цитата:
...(и вряд ли нужно больше 4Гб адресуемой памяти).

0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2020 11:15 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Простота оправдывает себя https://www.opennet.ru/opennews/art.shtml?num=52442
Цитата:
Исследователи также обратили внимание на упрощение создания эксплоитов из-за включения в Chrome 80 механизма упаковки указателей (вместо полного 64-разрядного значения хранятся только уникальные нижние биты указателя, что позволяет значительно сократить потребление памяти в куче). Например, некоторые находящиеся в начале кучи структуры данных, такие как таблица встроенных функций, объекты "native context" и корневые объекты сборщика мусора, теперь размещаются по предсказуемым и доступным на запись упакованным адресам.


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

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Artyemov писал(а):
0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?

И? Тема больше философская. Мой личный взгляд - ограничения нужны.

Artyemov писал(а):
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.
Откуда у Вас такая уверенность? Вот такой зверек у меня был дома (48Gb).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2020 19:58 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Comdiv писал(а):
Простота оправдывает себя https://www.opennet.ru/opennews/art.shtml?num=52442
Цитата:
Исследователи также обратили внимание на упрощение создания эксплоитов из-за включения в Chrome 80 механизма упаковки указателей (вместо полного 64-разрядного значения хранятся только уникальные нижние биты указателя, что позволяет значительно сократить потребление памяти в куче). Например, некоторые находящиеся в начале кучи структуры данных, такие как таблица встроенных функций, объекты "native context" и корневые объекты сборщика мусора, теперь размещаются по предсказуемым и доступным на запись упакованным адресам.

Спасибо, дважды!

ИЗМ Все таки ребята молодцы и измерили эффект от сокращения размера указателей - 40% что весьма существенно.
https://v8.dev/blog/v8-release-80#pointer-compression
Изображение

Тема уязвимостей из-за известных адресов не нова и проблема успешно решается в OpenBSD.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2020 20:32 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
adimetrius писал(а):
hothing писал(а):
NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

А откуда у вас эта информация? Любопытно бы почитать.

Вообще эту идею нашел здесь https://habr.com/ru/post/473294/ (Unique id), а дальше поиск (ссылки не сохранял, уж извините)
ИЗМ https://habr.com/ru/post/343778/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2020 22:50 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
hothing писал(а):
40% что весьма существенно
Осталось ещё понять, как этот результат перенести на задачи в которых нет ситуации, когда указатель на указателе указателем погоняет. Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

hothing писал(а):
Тема уязвимостей из-за известных адресов не нова и проблема успешно решается в OpenBSD.
Скорее всего, это решение не о том.

А в целом, по личным впечатлениям OpenBSD в отношении безопасности ощущается как очередной неуловимый Джо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2020 23:27 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
hothing писал(а):
Artyemov писал(а):
0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?

И? Тема больше философская. Мой личный взгляд - ограничения нужны.

Artyemov писал(а):
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.
Откуда у Вас такая уверенность? Вот такой зверек у меня был дома (48Gb).

Тем более странно, знающий "как оно может быть" и "4GB is enough".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 09:54 

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

А этот результат и не надо переносить на такие задачи. Очевидно, что там этот эффект будет около нулевым.

Comdiv писал(а):
Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

Ну где-то об этом речь и идет. Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.

Comdiv писал(а):
А в целом, по личным впечатлениям OpenBSD в отношении безопасности ощущается как очередной неуловимый Джо.
Могу предположить что Вы и не знакомы с этой ОС (не читали ни их доки, не смотрели код и т.д.).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 11:28 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
hothing писал(а):
Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.
У меня, кстати, на примере транслятора получилось на 32-битной системе как раз на 42% меньше.

hothing писал(а):
Могу предположить что Вы и не знакомы с этой ОС (не читали ни их доки, не смотрели код и т.д.).
Читал, смотрел.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 12:11 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
hothing писал(а):
Comdiv писал(а):
Comdiv писал(а):
Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

Ну где-то об этом речь и идет. Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.


То есть, допустим, есть у нас 64-битный компилятор КП; он генерирует нативные 64-битные инструкции. И есть у него два режима: жадный и скупой: в жадном указатели 64-битные, а в скупом - 32-битные?

И выходит, что можно по желанию одну и ту же программу скомпилировать и жадно, и скупо.

Коллеги, было бы это полезно?


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

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


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

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


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

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