LINUX.ORG.RU

Менеджер ресурсов «игровой» поиск реализации/архитектуры

 , , ,


0

2

Продолжаю пилить велосипед.

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

Предпочитаю первый вариант так как тут не код важен, а архитектура хотя и реализация тоже если найдется будет годно.

При первом варианте думается следующее.

Смотрел как делают велосипедисты на специфичных форумах и абсолютно все сводят к передачи указателя на файл, который и должен использовать пользователь, а работа менеджера сводится к предотвращению дублирования данных и выгрузке не используемых данных.

Может это так принято или удобно разрабам? Обычно делают как передают менеджеру на прямую или косвенно(конфиг например), файл, менеджер регистрирует его выделяет память загружает отдаёт указатель на объект и всё далее сам или по запросу удаляет его и при повторном запросе объекта проверяет есть ли он в индексе своём и если есть снова просто отдаёт указатель на то что уже есть.

Разраб далее работает с указателем как с объектом передавая его туда сюда.

А что если:

Переложить на плечи менеджера загрузку, выгрузку, учёт и помимо этого всего и передачу данных подсистемам.

То есть грузим ---> менеджер регистрирует, грузит, создаёт указатель заносит его в базу генерит идентификатор(просто число int) и отдаёт его разрабу.

Разраб будет иметь просто переменную с идентификатором скажем переменная int monstr. Далее передаёт её скажем рендеру render(monstr,-10,0,0); рендер передаёт значение обратно менеджеру тот ведёт поиск по идентификатору указателя на объект и уже реально передаёт настоящему рендеру косвенно или на прямую производя все необходимые операции.

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

Жду пинков по ссылкам, примерам, статьям.

★★★★★

Ответ на: комментарий от amphibrakhij

Как можно писать что то серьезное на стат.типизированном ЯП без выведения типов или хотя бы без костыля в виде шаблонов?

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

В C++ нет автоматического управления памятью - раз

Ещё скажите, что в C++ нет классов.

идентификаторы указывают на значение, а не на ссылку, - два

Что, простите?

То что он ещё и усложнен, так что только первоклассные спецы вроде тебя могут разобраться - это уже проблемы второй важности

Вы так про все языки говорите, которых не знаете.

quiet_readonly ★★★★
()
Ответ на: комментарий от quiet_readonly

Через сколько каментов тема свалится в лиспосрач? Делайте Ваши ставки господа!

Никогда не спорьте сами знаете с кем, остальные могут не заметить разницы;-)

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

Есть в C++ какие-то смарт-поинтеры, хотя я не знаю, что это такое, и вообще не советую пользовать C++ ;)

фраза достойная lorquotes

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Дык есть люди которые на фортране до сих пор пишут, и им нравится... каждый сходит с ума по своему;-)

Я с-но к тому, что каждый инструмент хорош для свое области применимости, и есть наверное 100500 задач где С оптимален. Но мутить на ем задачи, подобные ТС-овским, мне представляется мазохизмом. ИМНО.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Ты про что? Про быстрый код на C и остальное на не-C? А в чём проблема?

выведения типов или хотя бы без костыля в виде шаблонов?

Ну в вашем C++ и есть костыль в виде шаблонов. Enjoy your c++

amphibrakhij
()
Ответ на: комментарий от quiet_readonly

Ещё скажите, что в C++ нет классов.

Это ортогонально. В C тоже можно сделать классы.

Что, простите?

Ты что-то кроме c++/c знаешь?

Вы так про все языки говорите, которых не знаете.

Какие бяки

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

Так и я же про это менеджер будет иметь в индексе идентификатор по которому запрашивают ресурс будучи загруженным раз ресурс регистрируется и отдаёт идентификатор, будучи выгруженным идентификатор и данные для загрузки уже будут в базе, эта же база будет использоваться для предотвращения дублирования, передаём идентификатор менеджеру и если объект есть, он есть, а если выгружен то по идентификатору менеджер смотрит что там в базе и грузит соответствующий файл далее передаёт уже куда просили указатель на данные. Главное иметь идентификатор как занчение переменной и всё и рулить этой переменной как объектом передавая его куда угодно, сторонняя функция скажем задания физики передаст значение менеджеру, он в свою очередь знает что за тип у объекта и каким образом его уже нужно передать на обработку физ.движку к примеру. Нам остается лишь передавать объект туда сюда для задания ему свойств, тут ещё идейка возникла создавать новый объект уже обработанный , скажем есть лучник далаем чтобы он горел и менеджер генерит новый объект горящий лучник. Дальше работаем уже с ним заставляем побегать упась и погаснуть. А потом вызываем 50 горящих бегающих лучников которые по рандому будут падать и гаснуть.

Dron ★★★★★
() автор топика
Ответ на: комментарий от amphibrakhij

Я про быстрый код на С. Почему с-но Вы не советуете С++ (ну кроме того, что Вы его не знаете)?

Ну в вашем C++ и есть костыль в виде шаблонов

Ага. Тока этот костыль оказался куда удобнее родной С-шной ноги, как ни странно. Очень способствует уменьшению кода, и повышению прозрачности... если не брать извращения навроде буста;-)

AIv ★★★★★
()
Ответ на: комментарий от Dron

А теперь представьте как все это ляжет при синхронизации в параллельной реализации. Каждый пук проходит через таблицу ID, и каждое обращение к таблице требует блокировки.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Почему с-но Вы не советуете С++

Вообще или для быстрого кода? Вообще - я уже сказал, для FFI - это, насколько я знаю, нетривиально для C++, в отличие от C

amphibrakhij
()

А что если:

Переложить на плечи менеджера загрузку, выгрузку, учёт и помимо этого всего и передачу данных подсистемам.

То есть грузим ---> менеджер регистрирует, грузит, создаёт указатель заносит его в базу генерит идентификатор(просто число int) и отдаёт его разрабу.

Это ты сейчас работу движка Doom с *.wad-файлами описал. Только там разраб запрашивает по айди ресурс, а «менеджер» его ищет в.

LamerOk ★★★★★
()
Ответ на: комментарий от amphibrakhij

(использовал (я (на (предыдущий (текущий страница)))) скобки)

fixed

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Да такое везде есть и везде свой велосипед. Я когда crystal space смотрел, там тоже VFS и загрузчики, которые могут указатель вернуть, могут идентификатор привязать

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

FFI - это, насколько я знаю, нетривиально для C++, в отличие от C

В какую сторону? Если дергать плюсовые ф-ии, то есть наверное сложности (я не спец). Но под тот же питон скажем swig все решает.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Каждый пук проходит через таблицу ID, и каждое обращение к >таблице требует блокировки.

Вообщем то да, я об этом подумал поэтому будет ещё одна таблица просто со статусами ресурсов есть он или нет то есть просто значения 1 или 0 ресурс есть по индентификатору получаем ссылку и в бой моментально будет происходить никакого поиска, ресурса нет то да будет задержка с базой и загрузкой ресурса, но и об этом я подумал в виде приоритетов на выгрузку и предварительной загрузки когда объект грузится ещё до вызова (второго и последующего) но надо думать как менеджер должен узнавать что скоро понадобится такой то ресурс.

Dron ★★★★★
() автор топика
Ответ на: комментарий от amphibrakhij

Вот вброшу пасту от него.

Можно я не буду это комментировать? Терли уже, скучно.

А он, шо, на ЛОР ходит?

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

AIv ★★★★★
()
Ответ на: комментарий от Dron

Еще одна таблица - это еще одна хэш-таблица, которая по факту rbtree - сами сообразите сколько поиск будет занимать?

И не надо подражать Льву Толстому, тот хотя бы запятые ставил;-)

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

Вообще или для быстрого кода? Вообще - я уже сказал

А шо Вы про вообще сказали-то? Ну кроме того, что Вы его не знаете?;-)

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

Забавно =) Самое интересное, что правда там только в 2 из 4 пунктов в первом разделе:

  • медленная компиляция
  • разбор кода различными инструментами, вроде IDE, и его генерация - сильно затруднены

Причём медленная компиляция есть лишь закономерное следствие ограничений препроцессора из C при желании невозбранно использовать inline, шаблоны и массивные объявления классов. Решается clang'ом и импортами вместо препроцессора.

Что же касается IDE, то потому-то я и участвую в разработке QtCreator — качественная IDE для C++ может быть только опенсорсной и принципиально не сочетается с торгашеством. Те же JetBrains не хотят делать IDE для C++, потому что слишком трудозатратно, а как только Apple запилила хорошую библиотеку для анализа Objective-C, так тут же набежали со своей AppCode и объявили себя инноваторами.

quiet_readonly ★★★★
()
Ответ на: комментарий от AIv

http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B

Нету стандартов как называть символы.

Ну и смотри прочее по пункту «Никакого ABI» из ссылки на ловсанчега. Чтобы сделать биндинг Qt к CL используют, например, дополнительную приблуду smoke, а для gtk никаких проблем нет

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

Ок. Вот я пишу на связке С++/Python. Никаких проблем с биндингом (акромя как с шаблонами, но это понятно) не испытываю. ЧЯНТД?

AIv ★★★★★
()
Ответ на: комментарий от quiet_readonly

Там правда всё, и время компиляции - мелочь. Хотя 10 пункт можно и выкинуть - товарищ под влиянием CL пишет

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

В C++ нет автоматического управления памятью - раз

4.2. Ничего что смарт/автопойнтеры входят в стандартные библиотеки?

идентификаторы указывают на значение, а не на ссылку, - два Отсюда вообще потребность в _каких_либо_ указателях.

Чего-чего???

То что он ещё и усложнен, так что только первоклассные спецы вроде тебя могут разобраться - это уже проблемы второй важности

Э... по скромному личному опыту, среднестатистический студент МФТИ 3го курса овладевает С++ на уровне достаточном для написания кода для бакалаврского диплома за один семестр (занятия 2 часа раз в неделю). Мы об одном и том же ЯП?

AIv ★★★★★
()
Ответ на: комментарий от AIv

swig, говоришь? Покажи, что он генерирует для какого-нибудь простого примера ООП (выдумай сам;)

По крайней мере swig сам по себе дополнительный инструмент, без которого никак (я не против таких инструментов, но альтернатива должна быть). Да и не факт, что с каким-нибудь другим цомпилятором на той же платформе твои связки не заработают

amphibrakhij
()

Тред скатывается в споры приплюснутые, думаю пора закрывать.

Спасибо всем за здравую критику и советы, набросок создан, ещё подумаем, покурим насоветанного и можно пилить.

Dron ★★★★★
() автор топика
Ответ на: комментарий от Dron

Без неё будет действительно тормознуто, как никак с ней быстрее.

Есть результаты замеров производительности, или это Ваши интуитивные представления? Нормальные люди перед тем как что то улучшать, сначала смотря где плохо, а не лепят таблицу на таблицу под влиянием не пойми где усвоенных мифов о производительности;-)

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

Покажи, что он генерирует для какого-нибудь простого примера ООП (выдумай сам;)

Генерирует дофига, но мне как конечному пользователю пофигу - это компилятор читает а не я. С С-ями там не сильно проще получается.

По крайней мере swig сам по себе дополнительный инструмент, без которого никак (я не против таких инструментов, но альтернатива должна быть).

Альтернатив там есть, мне просто свиг удобней всего. Ничего, что баш/маке тоже доп инструменты О_О? Надо считать не число инструментов, а время разработки при прочих равных. Для моих задач озвученная комбинация оптимальна.

Да и не факт, что с каким-нибудь другим цомпилятором на той же платформе твои связки не заработают

Под винду собирается, проверял.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Чего-чего???

Ок. попробуем так. (Я знаю, что есть STL и векторы, но для простоты используем некий класс Array - массив неких элементов.

Array *a = new Array (size);
a->set (0, 4);

Что такое идентификатор a? Это указатель. Его значение - адрес в памяти.

a = a+1; // Значение a - адрес в памяти, указывающий не пойми на что
a->set (0, 4); // Segfault?

То же в CL:

* (let* ((a (make-array 5 :initial-element 0))
           (b a))
  (setf (aref  b 0) 4)
  a)
#(4 0 0 0 0)

Идентификаторы a,b - суть ссылки на объект типа simple-vector. Находящийся где-то в памяти. Его адрес скрыт от пользователя и получить его можно только для того же FFI (в разных реализациях по-разному). Это избавляет от потенциальных ошибок. В CL, например, нет и не нужна та же арифметика указателей

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

Это не баг, а фича. С/C++ (ровно те же претензии должны быть и к любимому Вами С, не так ли?) позволяет делать и низкоуровневые вещи, которые в том же ЦЛ от юзера скрыты. Поэтому ЦЛ и сливает вчистую по производительности;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

С-ями там не сильно проще получается.

Должно быть что-то питоно-специфичное

Альтернатив там есть, мне просто свиг удобней всего. Ничего, что баш/маке тоже доп инструменты О_О? Надо считать не число инструментов, а время разработки при прочих равных. Для моих задач озвученная комбинация оптимальна.

make работает всегда, swig не факт, что сработает везде.

Под винду собирается, проверял.

ОС тут абсолютно побоку, главное цомпилятор/линкер

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

Ну и управление памятью, замешанное на поинтерах и подсчете ссылок - суть жуткая фигня

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

Странный Вы... Все равно что ругать болид формулы-1 за ручную коробку передач - вот дескать, моя лада-калина и та с автоматом;-)

AIv ★★★★★
()
Ответ на: комментарий от amphibrakhij

А ну ++срачь можете продолжать конечно :)

Хотя да отмечу как не решённую может кто ещё идей подкинет, хуже не будет.

Dron ★★★★★
() автор топика
Ответ на: комментарий от amphibrakhij

ОС тут абсолютно побоку, главное цомпилятор/линкер

Под винду кроссплатформенно собирал minGW кажется. Но не гцц точно;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

ровно те же претензии должны быть и к любимому Вами С

Он не любимый, просто для низкоуровневых вещей самое то, действительно. А вот C++ вроде как претендует и на другие ниши (тот же десктопный софт на Qt), а в сути он ничем от C не поменялся, только OOP добавили.

ООП в ЦПП, кстати, тоже ругают. Я более-менее знаю только CLOS, и для меня самое главное, что generic functions там первокласные объекты, а методы в ЦПП - нет.

Поэтому ЦЛ и сливает вчистую по производительности;-)

Наглая ложь, кстати )

amphibrakhij
()
Ответ на: комментарий от Dron

Ну попробуйте зафиксировать диапазон ИД, и выделить под него обычный вектор... м.б. получиться.

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.