#лытдыбр #common_lisp
Геймджем геймджемом, а новый релиз топового опенсорсного лиспового компилятора SBCL по расписанию, поэтому сделал новый билд под винду с поддержкойпоследней нормальной версии Windows 7, и докерфайлы с SBCL и прочими важными инструментами для сборки лисповых игр 😊
Геймджем геймджемом, а новый релиз топового опенсорсного лиспового компилятора SBCL по расписанию, поэтому сделал новый билд под винду с поддержкой
GitHub
Release v2.4.10 · lockie/sbcl-w7
Unofficial automated SBCL build usable on Windows 7 - Release v2.4.10 · lockie/sbcl-w7
❤6
#лытдыбр
Тут ещё подъехали новости, в лисповых джемах всегда нужно было использовать бесплатные ассеты и ссылаться на них, а теперь ещё и добавили новое правило, что арт, сгенерированный нейросетями, тоже нельзя, потому что, видите ли, для такого арта нельзя сослаться на автора. Я во время джема придумал и сгенерил офигенную обложку к игре, но орги тут наехали, что нельзя, луддиты проклятыя. Пришлось искать человекоделанный арт и проявлять безумные навыки в Gimp, в итоге судите сами — было/стало:
Тут ещё подъехали новости, в лисповых джемах всегда нужно было использовать бесплатные ассеты и ссылаться на них, а теперь ещё и добавили новое правило, что арт, сгенерированный нейросетями, тоже нельзя, потому что, видите ли, для такого арта нельзя сослаться на автора. Я во время джема придумал и сгенерил офигенную обложку к игре, но орги тут наехали, что нельзя, луддиты проклятыя. Пришлось искать человекоделанный арт и проявлять безумные навыки в Gimp, в итоге судите сами — было/стало:
🔥8❤2👍1😁1
#лытдыбр #common_lisp
А вот и постмортем подъехал к Lispy Rogue 😊
https://telegra.ph/Lispy-Rogue-postmortem-11-05
А вот и постмортем подъехал к Lispy Rogue 😊
https://telegra.ph/Lispy-Rogue-postmortem-11-05
Telegraph
Lispy Rogue: постмортем
Наконец пришло время подвести итоги Autumn Lisp Game Jam 2024, на котором я выступил с игрой в жанре rogue-like Lispy Rogue (да, у меня всё плохо с неймингом вещей, я ж программист). Давно хотел потыкать и в этот жанр, так как в нём много интересных челленджей…
🔥8👍3
#лытдыбр #common_lisp
Ну штош, в воскресенье закончилось голосование в осеннем Lisp Game Jam '24, и по его результатам, мой рогалик на Common Lisp Lispy Rogue занял 6 место из 24, что гораздо лучше, что я ожидал, но всё равно не первое, однако в категории "Entertainment" (how enjoyable is it?) он занял таки первое место, я доволен 😊
Как я уже писал в постмортеме, попробую пофиксить ряд косяков и выступить с ещё одним, более продуманным рогаликом, в марте следующего года на джеме 7DRL ("7 day rogue like"), а пока буду готовиться к важному пока секретному игровому проекту и заодно к третьей части своего туториала по геймдеву на CL — и для того, и для другого понадобится довести до ума свою библиотеку для деревьев поведения 🎄
Ну штош, в воскресенье закончилось голосование в осеннем Lisp Game Jam '24, и по его результатам, мой рогалик на Common Lisp Lispy Rogue занял 6 место из 24, что гораздо лучше, что я ожидал, но всё равно не первое, однако в категории "Entertainment" (how enjoyable is it?) он занял таки первое место, я доволен 😊
Как я уже писал в постмортеме, попробую пофиксить ряд косяков и выступить с ещё одним, более продуманным рогаликом, в марте следующего года на джеме 7DRL ("7 day rogue like"), а пока буду готовиться к важному пока секретному игровому проекту и заодно к третьей части своего туториала по геймдеву на CL — и для того, и для другого понадобится довести до ума свою библиотеку для деревьев поведения 🎄
itch.io
Lispy Rogue by Andrew
A procedurally generated fantasy roguelike. Available for Windows, macOS, Linux
🔥22
#лытдыбр #common_lisp
Выловил тут проблему с
Пока не придумал, как нормально справиться с излишней хитрожопостью Sly, разве что притащить в зависимости либу для многопотока
Выловил тут проблему с
TYPE-ERROR
при переопределении компонента "на лету", при работающей игре, про которую писал в постмортеме (см. рис. 1). Оказывается, у меня всё чётенько работает, но штука в том, что Emacs (а, точнее, его плагин для Common Lisp Sly) больно хитрожопый — когда ты прожимаешь C-c C-c
, чтобы отправить в лисп-процесс новое определение компонента, он копирует форму, на которой стоит курсор, в отдельный временный файл, и компилирует этот файл в отдельном треде, блэт. Из-за этого код работающих в игре систем запинается в тот момент, когда все функции для работы с компонентом уже переопределены на новые, а сама внутренняя структура с данными компонента у всех сущностей ещё пока старая (но будет заменена на новую буквально миллисекундами позже).Пока не придумал, как нормально справиться с излишней хитрожопостью Sly, разве что притащить в зависимости либу для многопотока
bordeaux-threads
и при запуске ecs:run-systems
захватывать некий глобальный мьютекс, а при переопределении компонентов проверять, что он отпущен. Такое себе решение, лишняя зависимость и производительность будет чутка хуже — туда-сюда мьютекс хватать-отпускать. Надо с ним переспать, может чего получше придумаю 😄❤1
#лытдыбр #common_lisp
На этой неделе произошёл nerd sniping moment, таксказатб — случайно наткнулся на докер-образ msys2-docker-experimental, который, как и я в своих сборочных скриптах для игр, решает проклятую проблему развёртывания windows-окружения для сборки под нормальной ОС (Linux), и, конечно, не мог пройти мимо него: мой вариант этого решения по сути был шаткой конструкцией из костылей, которая от мимолётного дуновения обновлений с грохотом рушилась. Начал ковырять, вроде всё получалось гораздо лучше и стройнее, чем было до этого, но я постоянно наталкивался на невиданные ранее баги — например, моя либа
В итоге только сегодня всё добил до конца, проверив новую сборку под винду на проекте Cycle of Evil. Внёс изменения в шаблон игры на Common Lisp и заодно сделал автоматическую сборку докер-образов для сборки лисповых игр, жутко люблю такие штуки — меня хлебом не корми, только дай сборку чего-нибудь автоматизировать 😊
На этой неделе произошёл nerd sniping moment, таксказатб — случайно наткнулся на докер-образ msys2-docker-experimental, который, как и я в своих сборочных скриптах для игр, решает проклятую проблему развёртывания windows-окружения для сборки под нормальной ОС (Linux), и, конечно, не мог пройти мимо него: мой вариант этого решения по сути был шаткой конструкцией из костылей, которая от мимолётного дуновения обновлений с грохотом рушилась. Начал ковырять, вроде всё получалось гораздо лучше и стройнее, чем было до этого, но я постоянно наталкивался на невиданные ранее баги — например, моя либа
cl-liballegro-nuklear
не компилировалась, но это я поправил, опять-таки упростив механизм сборки. Потом был какой-то плавающий баг в лисповом CFFI — я для него даже сделал pull request, но он внезапно починился сам 🤷 А вот в пятницу наткнулся на совершенно фантастический баг в пакете ImageMagick для MSYS2, которым я подготавливаю иконки для виндусового инсталлера — указываешь ему в качестве файла для вывода абсолютный путь, и он с какого-то рожна автоматом дописывает в начало /msys64
и, конечно, такого пути не находит и фейлится. Дабл-ю Ти Эф, как говорится, баг этот я обворкэраундил, но осадочек остался.В итоге только сегодня всё добил до конца, проверив новую сборку под винду на проекте Cycle of Evil. Внёс изменения в шаблон игры на Common Lisp и заодно сделал автоматическую сборку докер-образов для сборки лисповых игр, жутко люблю такие штуки — меня хлебом не корми, только дай сборку чего-нибудь автоматизировать 😊
xkcd
Nerd Sniping
🔥6👾1
#лытдыбр
Подписчик тут в чате подсказал, что баг с Imagemagick — и не баг вовсе, а фича, причём отключаемая; подпискичи у меня лучшие вообще 🥰
Там тоже есть тонкости, но в общем пофиксил и это в сборочном скрипте шаблона игры, ещё один шажок на пути к полностью автоматизированному люксовому гейскому космическому капитализму 😊
Подписчик тут в чате подсказал, что баг с Imagemagick — и не баг вовсе, а фича, причём отключаемая; подпискичи у меня лучшие вообще 🥰
Там тоже есть тонкости, но в общем пофиксил и это в сборочном скрипте шаблона игры, ещё один шажок на пути к полностью автоматизированному люксовому гейскому космическому капитализму 😊
GitHub
GitHub - lockie/cookiecutter-lisp-game: A cookiecutter template for Common Lisp videogame projects
A cookiecutter template for Common Lisp videogame projects - lockie/cookiecutter-lisp-game
👍7❤1
#лытдыбр #common_lisp
Тихо и незаметно вышел новый минорный релиз моего ECS-микрофреймворка на Common Lisp, cl-fast-ecs 0.6.1. В нём из изменений только более подробная документация, а вообще он должен послужить трамплином для грядущих фиксов, связанных с переопределением компонентов на лету — эта кроличья нора оказалась размером с марианскую впадину и в ней нашёлся ещё ряд багов, но конец уже виден 😁
Тихо и незаметно вышел новый минорный релиз моего ECS-микрофреймворка на Common Lisp, cl-fast-ecs 0.6.1. В нём из изменений только более подробная документация, а вообще он должен послужить трамплином для грядущих фиксов, связанных с переопределением компонентов на лету — эта кроличья нора оказалась размером с марианскую впадину и в ней нашёлся ещё ряд багов, но конец уже виден 😁
itch.io
0.6.1 release
This minor release contains a bunch of documentation improvements, check it out ! See changelog for a full list of changes...
👍11❤1
#лытдыбр
Тут с утра в понедельник включаю колонки, чтобы с утреца под музычку перед работой поковырять свою ECS-библиотеку, щёлкаю выключателем своих Microlab Solo 1, а колонки внезапно громко гудят. Покрутил в компе звук, потом вооюбще джек из него выдернул — один хрен гудят. Решил открутить заднюю крышку, посмотреть, что там, — я ж в детстве занимался электротехникой, перед тем как понять, что руки у меня растут из жопы и надо становиться программистом) Удивился оттого, насколько внутри моих легендарных дорохо-бохато Solo 1 всё дёшево — вся плата усилителя неряшливо заляпана компаундом, на самой плате не распаяны какие-то элементы, в цепи питания никакой стабилизации, тупо диодный мост и два жирных электролитических конденсатора, один из которых, как я и ожидал исходя из симптомов, от старости сверху треснул и потёк, заляпав всё уже подсохшими грязно-жёлтыми каплями электролита. Второй, скорее всего, в таком же состоянии, но на нём сверху гордая наклейка QC pass 😁
Ну и я прикинул, что могу, конечно, пойти в магазин радиодеталей, купить паяльник, припой, флюс, найти там такие же конденсаторы, аккуратно отковырять компаунд, отпаять кондёры, аккуратно впаять новые, но аккуратно — это точно не про меня. Поэтому нашёл местную контору по починке электроники за пару кварталов от своего дома и отнёс её туда, где мне сказали, что во вторник позвонят, но произошёл polako momentpolako — сербск. "не спеши", "помедленнее" , поэтому во вторник не позвонили, и в среду тоже. Сегодня выдалась хорошая солнечная погода (а вчера был и завтра будет адовый дождь с ветром 20 м/с), решил пройтись до конторы и узнать, чокак. Прихожу — а там закрыто и на двери листочек с надписью по-сербски "сегодня, 21.11, не работаем, спасибо за понимание". Видать, не одному мне погода понравилась 😂
Тут с утра в понедельник включаю колонки, чтобы с утреца под музычку перед работой поковырять свою ECS-библиотеку, щёлкаю выключателем своих Microlab Solo 1, а колонки внезапно громко гудят. Покрутил в компе звук, потом вооюбще джек из него выдернул — один хрен гудят. Решил открутить заднюю крышку, посмотреть, что там, — я ж в детстве занимался электротехникой, перед тем как понять, что руки у меня растут из жопы и надо становиться программистом) Удивился оттого, насколько внутри моих легендарных дорохо-бохато Solo 1 всё дёшево — вся плата усилителя неряшливо заляпана компаундом, на самой плате не распаяны какие-то элементы, в цепи питания никакой стабилизации, тупо диодный мост и два жирных электролитических конденсатора, один из которых, как я и ожидал исходя из симптомов, от старости сверху треснул и потёк, заляпав всё уже подсохшими грязно-жёлтыми каплями электролита. Второй, скорее всего, в таком же состоянии, но на нём сверху гордая наклейка QC pass 😁
Ну и я прикинул, что могу, конечно, пойти в магазин радиодеталей, купить паяльник, припой, флюс, найти там такие же конденсаторы, аккуратно отковырять компаунд, отпаять кондёры, аккуратно впаять новые, но аккуратно — это точно не про меня. Поэтому нашёл местную контору по починке электроники за пару кварталов от своего дома и отнёс её туда, где мне сказали, что во вторник позвонят, но произошёл polako moment
😁4🫡1
#лытдыбр #common_lisp
На той неделе ковырялся с переопределением компонентов на лету в своём ECS-фреймворке, приделал-таки либу для многопотока
Попробую при этом сохранить уже существующий интерфейс у фреймворка, и ещё и предусмотреть, чтобы не было больших проблем с производительностью, чтобы в названии
На данный момент в MOP я разбираюсь примерно никак, поэтому, собсно, скачал и начал читать фундаментальный труд по MOP — "The Art of Metaobject Protocol" Кизалиса. Надеюсь, успею за разумное время осуществить задуманное)
На той неделе ковырялся с переопределением компонентов на лету в своём ECS-фреймворке, приделал-таки либу для многопотока
bordeaux-threads
, так что с помощью глобального мьютекса, костылей и веточек оно таки заработало, но я обнаружил целую россыпь багов поменбше. Закоммитил новый код в локальную веточку и начал чинить баги помельче, но от этого начали фейлиться старые тесты. Кароч я посмотрел на свой, откровенного говоря, уже довольно фаршевый код фреймворка, психанул и решил переписать его с использованием лисповского MetaObject Protocol, потому что по сути всё вот это вот переопределение на лету там поддерживается изкоробки — благо, умные люди из лиспового коммьюнити мне уже говорили, мол, а чего MOP не используешь. Попробую при этом сохранить уже существующий интерфейс у фреймворка, и ещё и предусмотреть, чтобы не было больших проблем с производительностью, чтобы в названии
cl-fast-ecs
можно было оставить слово fast 😅На данный момент в MOP я разбираюсь примерно никак, поэтому, собсно, скачал и начал читать фундаментальный труд по MOP — "The Art of Metaobject Protocol" Кизалиса. Надеюсь, успею за разумное время осуществить задуманное)
GitLab
Fixed error on component with index redefinition (31e4ee39) · Commits · Andrew Kravchuk / cl-fast-ecs · GitLab
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
🔥14
#лытдыбр
Кто по скидке себе купил четвёртую дьяблу и Last Epoch длячилла в канун нового года слежения за состоянием индустрии дьяблоклонов, тот я 😅
Кто по скидке себе купил четвёртую дьяблу и Last Epoch для
🤩4
#common_lisp
Меж тем в воскресенье в Тбилиси прошёл митап по функциональщине, на котором был крутой доклад про оптимизацию кода на Common Lisp от Димы Игнатьева, широко известного в узких кругах как— благодаря его троллингу в начале 10-х я заинтересовался лиспом)) Из доклада даже я вынес для себя что-то новое 😊
Ссылка с таймкодом вот
Меж тем в воскресенье в Тбилиси прошёл митап по функциональщине, на котором был крутой доклад про оптимизацию кода на Common Lisp от Димы Игнатьева, широко известного в узких кругах как
love5an
Ссылка с таймкодом вот
YouTube
Fprog Tbilisi Meetup (01.12.2024)
Fprog Tbilisi Meetup
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
👀8🔥2
#лытдыбр #common_lisp
Ну штош, сегодня дочитал The Art of MetaObject Protocol (точнее, дошёл до того места, где эта книга перетекает в нудный справочник по MOP), а вчера на практическом опыте (см. рис. 1) убедился, что скорость доступа к слотам CLOS-объектов такая же (если не выше), как и скорость доступа к слотам
> The cost is roughly 1.6 times that of an open coded structure slot accessor.
Причём, что интересно, этот вывод верен как минимум для трёх компиляторов — SBCL, CCL и Franz Allegro ©®™ CL, я проверял)
Получается, что затеянный рефакторинг моего ECS-фреймворка не только упростит его код и решит проблемы с переопределением компонентов при работающих системах, но и с точки зрения производительности не сделает хуже — по крайней мере, если отталкиваться от нарисованного у меня в голове плана этого рефакторинга; а как известно, в бою первым гибнет план боя 😅
В общем, осталось найти время и силы на то, чтобы перелопатить свой код 😁
Ну штош, сегодня дочитал The Art of MetaObject Protocol (точнее, дошёл до того места, где эта книга перетекает в нудный справочник по MOP), а вчера на практическом опыте (см. рис. 1) убедился, что скорость доступа к слотам CLOS-объектов такая же (если не выше), как и скорость доступа к слотам
defstruct
-структур, хотя я всю жизнь думал, что слоты объектов медленнее 🤯 Да даже документация к SBCL утверждает, что> The cost is roughly 1.6 times that of an open coded structure slot accessor.
Причём, что интересно, этот вывод верен как минимум для трёх компиляторов — SBCL, CCL и Franz Allegro ©®™ CL, я проверял)
Получается, что затеянный рефакторинг моего ECS-фреймворка не только упростит его код и решит проблемы с переопределением компонентов при работающих системах, но и с точки зрения производительности не сделает хуже — по крайней мере, если отталкиваться от нарисованного у меня в голове плана этого рефакторинга
В общем, осталось найти время и силы на то, чтобы перелопатить свой код 😁
🔥11👍1👌1
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp
Итак, после полутора недель возни переделал внутрянку своей ECS-библиотеки на использование CLOS-классов вместо структур для добавления возможности переопределения компонентов на лету, во время работы систем, но мёрджить пока рано — есть целый ряд мелочей, которые хотелось бы улучшить, да и тесты проходят только на двух компиляторах, SBCL и CCL, с другими нет-нет, да что-то отвалится 😅 Надеюсь, хотя бы до НГ успею зкончить эту уже поднадоевшую задачу)
Итак, после полутора недель возни переделал внутрянку своей ECS-библиотеки на использование CLOS-классов вместо структур для добавления возможности переопределения компонентов на лету, во время работы систем, но мёрджить пока рано — есть целый ряд мелочей, которые хотелось бы улучшить, да и тесты проходят только на двух компиляторах, SBCL и CCL, с другими нет-нет, да что-то отвалится 😅 Надеюсь, хотя бы до НГ успею зкончить эту уже поднадоевшую задачу)
🔥13👀1
#лытдыбр
Судя по всему, я скорее всего таки успею до НГ сделать рефакторинг своей ECS-библиотеки на CLOS-классы, тесты для всех компиляторов уже проходят 😊
Ну и по причине неизбежно надвигающихся каникул на моём мини-канале Шепелявый Щитпост 30 и 31 декабря запланирована двухдневка новогодних мемасиков, после которой канал тоже уйдёт на недельку на каникулы. Подписывайтесь, если ещё не, чтобы кекать каждый час, поедая мандаринки и шурша мишурой 😁🎄
Судя по всему, я скорее всего таки успею до НГ сделать рефакторинг своей ECS-библиотеки на CLOS-классы, тесты для всех компиляторов уже проходят 😊
Ну и по причине неизбежно надвигающихся каникул на моём мини-канале Шепелявый Щитпост 30 и 31 декабря запланирована двухдневка новогодних мемасиков, после которой канал тоже уйдёт на недельку на каникулы. Подписывайтесь, если ещё не, чтобы кекать каждый час, поедая мандаринки и шурша мишурой 😁🎄
🔥10
#common_lisp #лытдыбр
На новый год мейнтейнеры SBCL решили в качестве подарка пользователям не уступать традиции выпускать по новой версии каждый месяц и выпустить новую юбилейную версию 2.5.0, а у меня, как обычно, обновились соответствующие docker-образа для геймдева. Правда, фикс проблемы, из-за которой на особенно сложных окнах в моей GUI-либе cl-liballegro-nuklear SBCL крэшится с внутренней ошибкой, попадёт только в следующую версию (его закоммитили буквально через несколько часов после релиза), а это, считай, в феврале. Ну да ничего, есть много других вещей, над которыми нужно поработать в следующем году 😊
На новый год мейнтейнеры SBCL решили в качестве подарка пользователям не уступать традиции выпускать по новой версии каждый месяц и выпустить новую юбилейную версию 2.5.0, а у меня, как обычно, обновились соответствующие docker-образа для геймдева. Правда, фикс проблемы, из-за которой на особенно сложных окнах в моей GUI-либе cl-liballegro-nuklear SBCL крэшится с внутренней ошибкой, попадёт только в следующую версию (его закоммитили буквально через несколько часов после релиза), а это, считай, в феврале. Ну да ничего, есть много других вещей, над которыми нужно поработать в следующем году 😊
Telegram
Лисп в изгнании
#лытдыбр #common_lisp
Лол, чёт я обмакросился, аж компилятор поломал 😅
Лол, чёт я обмакросился, аж компилятор поломал 😅
🔥7❤5
This media is not supported in your browser
VIEW IN TELEGRAM
А на этот НГ присоединяюсь к пожеланиям вот такого же душного как и я спикера:
🥰13❤4💊2👍1😢1
#лытдыбр #common_lisp
Ну штош, праздники плавно подходят к концу, и я наконец доделал фичу в своём ECS-фреймворке на CL, которую начал ещё в прошлом году 🌚 А именно, определение внутренних Struct-of-Arrays хранилищ данных компонентов через
Сначала я вообще хотел навертеть там мьютексов, и даже выяснил, что захват мьютекса в SBCL занимает всего 2 тысячных миллисекунды, но потом я узнал о таком великолепном механизме CLOS, как UPDATE-INSTANCE-FOR-REDEFINED-CLASS, который позволяет кастомизировать процесс обновления существующих инстансов классов в соответствии с новым определением класса, причём этот механизм работает лениво, т.е. обновление происходит только при первом обращении к инстансу, получается, мьютекс не нужен 😊 Самым тяжким, наверное, было заставить этот механизм работать одинаково под всеми шестью поддерживаемыми мной реализациями Common Lisp, потому что стандарт стандартом, но в мелочах они часто отличаются.
Ещё у меня в коментах спрашивали, что там с производительностью, так вот, буквально сегодня утром закончил замеры — в бенчмарке создаётся 10к объектов с тремя компонентами, и затем 10к раз вызывается (через run-systems) система, обращающаяся ко всем трём компонентам и делающая с ними нехитрую арифметику с тригонометрией. Выяснилось, что замена хранилищ данных на классы замедляет скорость работы буквально в рамках погрешности, на пару процентов 🎉 Более того, я закодил так, что в релизном варианте (при добавлении кейворда
В общем, наконец с этой задачей окончено, можно двигаться дальше, есть много планов на этот год, включая попытку в коммерческий релиз игры на Common Lisp 🤩
Ну штош, праздники плавно подходят к концу, и я наконец доделал фичу в своём ECS-фреймворке на CL, которую начал ещё в прошлом году 🌚 А именно, определение внутренних Struct-of-Arrays хранилищ данных компонентов через
defclass
, а не defstuct
, что позволяет гораздо проще и без багов переопределять компоненты "на лету", прямо во время работы систем, а именно — добавлять/удалять новые поля в компонентах и менять их типы. Как сообщает git
, 533 additions и 307 deletions, заняло гораздо больше времени, чем я рассчитывал, но результатом доволен.Сначала я вообще хотел навертеть там мьютексов, и даже выяснил, что захват мьютекса в SBCL занимает всего 2 тысячных миллисекунды, но потом я узнал о таком великолепном механизме CLOS, как UPDATE-INSTANCE-FOR-REDEFINED-CLASS, который позволяет кастомизировать процесс обновления существующих инстансов классов в соответствии с новым определением класса, причём этот механизм работает лениво, т.е. обновление происходит только при первом обращении к инстансу, получается, мьютекс не нужен 😊 Самым тяжким, наверное, было заставить этот механизм работать одинаково под всеми шестью поддерживаемыми мной реализациями Common Lisp, потому что стандарт стандартом, но в мелочах они часто отличаются.
Ещё у меня в коментах спрашивали, что там с производительностью, так вот, буквально сегодня утром закончил замеры — в бенчмарке создаётся 10к объектов с тремя компонентами, и затем 10к раз вызывается (через run-systems) система, обращающаяся ко всем трём компонентам и делающая с ними нехитрую арифметику с тригонометрией. Выяснилось, что замена хранилищ данных на классы замедляет скорость работы буквально в рамках погрешности, на пару процентов 🎉 Более того, я закодил так, что в релизном варианте (при добавлении кейворда
:ecs-unsafe
в *features*) данные хранятся по-старому, в структурах. По ходу дела я также выяснил, что этот релизный вариант всего процентов на 5-6 быстрее не-релизного варианта, который по умолчанию.В общем, наконец с этой задачей окончено, можно двигаться дальше, есть много планов на этот год, включая попытку в коммерческий релиз игры на Common Lisp 🤩
GitLab
Use classes instead of structs for storage SoA (58f39a5f) · Commits · Andrew Kravchuk / cl-fast-ecs · GitLab
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
🔥19
#лытдыбр #common_lisp
Между делом тут запилил в ECS-фреймворке давно напрашивавшийся рефакторинг — позаменял все глобальные переменные на те, которые предоставляет библиотека global-vars — они почти как настоящие лисповские переменные с динамической областью видимости, только быстрее, потому что шарятся между тредами, как в какой-нибудь прямолинейной C-шке и всегда являются bound, т.е. у них всегда есть значение. В итоге небольшая система move, для которой я хвастался дизассемблерным листингом в туториале по ECS, занимавшим 210 байт, теперь ужалась до 169 байт стройного и прямолинейного ассемблерного кода! 🎉Хотя тут, судя по всему, и разработчики компилятора SBCL постарались, он как будто более уверенно обращается с переменными с плавающей запятой.
В общем, пытаюсь отвлечься от традиционного ежегодного бюроктатического ада с ВНЖ, как могу 😅
Между делом тут запилил в ECS-фреймворке давно напрашивавшийся рефакторинг — позаменял все глобальные переменные на те, которые предоставляет библиотека global-vars — они почти как настоящие лисповские переменные с динамической областью видимости, только быстрее, потому что шарятся между тредами, как в какой-нибудь прямолинейной C-шке и всегда являются bound, т.е. у них всегда есть значение. В итоге небольшая система move, для которой я хвастался дизассемблерным листингом в туториале по ECS, занимавшим 210 байт, теперь ужалась до 169 байт стройного и прямолинейного ассемблерного кода! 🎉
В общем, пытаюсь отвлечься от традиционного ежегодного бюроктатического ада с ВНЖ, как могу 😅
GitLab
Added use of global-vars; dropped BIND-STORAGE in favor of MAKE-STORAGE (b4a578e1) · Commits · Andrew Kravchuk / cl-fast-ecs ·…
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
❤11⚡1