Forwarded from RUGAMES.ME Черногория, Подгорица
Сегодня в нашем клубе прошло интересное мероприятие с Warhammer Montenegro. Всем, кто пришел и поддерживает направление настольных игр, огромное спасибо. Будем рады вас видеть на дальнейших встречах =)
🔥2
#лытдыбр
Вчера впервые сыграл в настольный вархаммер, пусть и не "большой" 40k, а Underworlds, но все равно очень понравилось 😊 Спасибо организаторам ❤️
Вчера впервые сыграл в настольный вархаммер, пусть и не "большой" 40k, а Underworlds, но все равно очень понравилось 😊 Спасибо организаторам ❤️
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp #видео
На своём утреннем стриме, потихоньку проникаясь Test-Driven Development (моего внутреннего перфекциониста-аутиста очень радует превращать свеженаписанные проваливающиеся тесты в вереницу зелёненьких), наткнулся на уморное сообщение от компилятора SBCL, см. видос.ЛЕКСИЧЕСКОЕ ОКРУЖЕНИЕ СЛИШКОМ ВОЛОСАТОЕ, КАРЛ!
На своём утреннем стриме, потихоньку проникаясь Test-Driven Development (моего внутреннего перфекциониста-аутиста очень радует превращать свеженаписанные проваливающиеся тесты в вереницу зелёненьких), наткнулся на уморное сообщение от компилятора SBCL, см. видос.
❤1
#лытдыбр
Спам категории «фэнтези»: г-н Кадзухиро Токимаса из ЯНДЕКСа пишет с домена outlook.com и предлагает присоединиться к его команде за щедрое вознаграждение в размере 2000 рублей в день. В принципе, уровень зарплаты как раз яндексовский, но в остальном, конечно, эклектика
Спам категории «фэнтези»: г-н Кадзухиро Токимаса из ЯНДЕКСа пишет с домена outlook.com и предлагает присоединиться к его команде за щедрое вознаграждение в размере 2000 рублей в день. В принципе, уровень зарплаты как раз яндексовский, но в остальном, конечно, эклектика
❤1🔥1
#лытдыбр #common_lisp
Джоба успешно закончилась, а таймер всё тикает. Я смотрю, Gitlab меня решил на счётчик поставить 😂
Джоба успешно закончилась, а таймер всё тикает. Я смотрю, Gitlab меня решил на счётчик поставить 😂
😁1
#лытдыбр #common_lisp #проекты
На протяжении уже пары недель маниакально работал, чтобы вчера выпустить версию
Пока там только базовая функциональность, но я продолжаю маньячить над кодом на утренних стримах 😅
На протяжении уже пары недель маниакально работал, чтобы вчера выпустить версию
0.1.1
своего мини-фреймворка для паттерна Entity-Component-System на Common Lisp: https://gitlab.com/lockie/cl-fast-ecsПока там только базовая функциональность, но я продолжаю маньячить над кодом на утренних стримах 😅
GitLab
Andrew Kravchuk / cl-fast-ecs · GitLab
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
❤4
#лытдыбр
Дожили, использую ЧятЖПТ, чтобы придумывать имена переменным 😅 Как известно, именование — одна из двух самых сложных проблем в программировании, наряду с инвалидацией кэшей и off-by-one-error, так что не грех для этого использовать математическую модель с миллиардами параметров)
Довольно интересный экспириенс, оно не даёт каких-то внятных, готовых к использованию ответов, но по мере того, как пытаешься сформулировать правильный промпт, сам начинаешь понимать, что же тебе нужно, и вот уже оно становится не нужно 😁
Дожили, использую ЧятЖПТ, чтобы придумывать имена переменным 😅 Как известно, именование — одна из двух самых сложных проблем в программировании, наряду с инвалидацией кэшей и off-by-one-error, так что не грех для этого использовать математическую модель с миллиардами параметров)
Довольно интересный экспириенс, оно не даёт каких-то внятных, готовых к использованию ответов, но по мере того, как пытаешься сформулировать правильный промпт, сам начинаешь понимать, что же тебе нужно, и вот уже оно становится не нужно 😁
👍1
#common_lisp
И вот через пару недель работы над Common Lisp'овым фреймворком для паттерна Entity-Component-System есть, чем повыёбываться 😊
Предельно ясный и высокоуровневый код вида
И вот через пару недель работы над Common Lisp'овым фреймворком для паттерна Entity-Component-System есть, чем повыёбываться 😊
Предельно ясный и высокоуровневый код вида
;; определяем компонент "позиция" с вещественными полями x и yпосле всех нужных притоптываний и приплясываний транслируется замечательным лисповым компилятором SBCL в следующий машинный код (комментарии мои):
(defcomponent position
(x 0.0 :type single-float)
(y 0.0 :type single-float))
;; определяем аналогичный компонент "скорость"
(defcomponent velocity
(x 0.0 :type single-float)
(y 0.0 :type single-float))
;; определяем систему "движение", которая вычисляет позицию всех сущностей
;; с позицией и скоростью в соответствии с нехитрыми физико-математическими соображениями
(defsystem move
(:components-ro (velocity)
:components-rw (position))
(incf position-x velocity-x)
(incf position-y velocity-y))
disassembly for MOVE-SYSTEMG186Ну камон, 315 байт машинного кода почти без всякого лишнего дроча — это достижение, до которого всяким там обоссанным Unity3D срать и срать 😁
Size: 315 bytes. Origin: #x535A956E
MOV RAX, [R9+45]
TEST BYTE PTR [RAX+1], 1
JEQ L6 ; по метке L6 мы проверяем ещё один бит в [RAX+1]:
L0: MOV [RBP-8], R8 ; если с предыдущего запуска системы к каким-либо сущностям
MOV [RBP-16], R9 ; не добавлялись и не удалялись компонеты, мы обойдём этот
MOV RDI, [R8-7] ; кусок кода и окажемся в метке L1
SUB RSP, 16 ; если же что-то поменялось, будет перестроен и записан на будущее
MOV RDX, R9 ; битовый индекс тех сущностей, которые система должна обходить
MOV RSI, [RIP-302]
MOV ECX, 6
MOV [RSP], RBP
MOV RBP, RSP ; собственно, вот этой функцией и будет перестроен
MOV EAX, #x502EE502 ; #<FDEFN CL-FAST-ECS::%REBUILD-ENTITIES-BITMAP>
CALL RAX
CMOVB RSP, RBX
MOV R9, [RBP-16]
MOV R8, [RBP-8]
MOV RAX, R8
SHR RAX, 10
AND EAX, 1048575
MOV BYTE PTR [R12+RAX], 0
MOV [R8-7], RDX
L1: MOV RSI, [R9+37] ; итак, метка L1: записываем пару вещей в регистры и прыгаем на L4
MOV RDI, [R9+13]
XOR EBX, EBX
JMP L4
NOP
NOP
L2: MOV RCX, [R8-7]
MOV RDX, RBX
SAR RDX, 1
MOV RAX, RDX
SHR RAX, 6
MOV RAX, [RCX+RAX*8+1]
BT RAX, RDX
JB L5
L3: ADD RBX, 2
L4: CMP RBX, RDI ; а на L4 как раз начинается главный цикл системы, который будет
JL L2 ; проходить по всем нужным ей сущностям.
LEA RBX, [RBP+16] ; прыгаем на L2, где делаем два хопа по памяти, чтобы слазить в битовый индекс,
XOR ECX, ECX ; и если понимаем, что нам нужна очередная по номеру сущность, прыгаем на L5
MOV EDX, #x50000117
MOV RDI, RDX
MOV RSI, RDX
STC
MOV RSP, RBP ; если цикл закончился, чистим стек и возвращаемся из функции
POP RBP
RET
L5: MOV RAX, [RSI+1] ; на L5, собственно, и происходят наши сложнейшие вычисления с прибавлением
MOV RCX, [RSI+9] ; к position-x значения velocity-x и то же для y
MOV RDX, [RCX+21] ; подчеркну, что доступ к каждому полю компонента обходится в ещё два хопа по памяти,
MOVSS XMM1, [RDX+RBX*2+1] ; и они последовательные, поэтому аккуратно оседают в кэшах CPU
MOV RCX, [RCX+29]
MOVSS XMM3, [RCX+RBX*2+1]
MOV RCX, [RAX+21]
MOVSS XMM2, [RCX+RBX*2+1]
ADDSS XMM2, XMM1
MOV RCX, [RAX+21]
MOVSS [RCX+RBX*2+1], XMM2
MOV RCX, [RAX+29]
MOVSS XMM1, [RCX+RBX*2+1]
ADDSS XMM1, XMM3
MOV RAX, [RAX+29]
MOVSS [RAX+RBX*2+1], XMM1
JMP L3 ; закончив весь матан, уходим на следующую итерацию цикла по сущностям на L3
L6: TEST BYTE PTR [RAX+1], 2
JEQ L1
JMP L0
GitLab
Andrew Kravchuk / cl-fast-ecs · GitLab
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
👍4🔥4
#лытдыбр
Вчера на моём курсе по C один из студентов защитил проектную работу, в которой под моим чутким руководством сделал header-only библиотеку для создания замыканий на сишечке, с ручным созданием функции-трамплина в рантайме и с полуавтоматическим управлением памятью. Библиотека, конечно, чистой воды proof-of-concept и не для использования в продакшене, но всё равно требовала для своей реализации кропотливой работы, так что вы знаете, куда насыпать звёздочек ✨
К слову, на днях тут вписался на бесплатный мини-курс по созданию своего интерпретатора лиспа, там подобного рода трюки с замыканиями вполне себе пригодятся. Курс начинается сегодня, так что вы ещё можете успеть тоже вписаться) Для этого нужно написать в личку @IIvana
Вчера на моём курсе по C один из студентов защитил проектную работу, в которой под моим чутким руководством сделал header-only библиотеку для создания замыканий на сишечке, с ручным созданием функции-трамплина в рантайме и с полуавтоматическим управлением памятью. Библиотека, конечно, чистой воды proof-of-concept и не для использования в продакшене, но всё равно требовала для своей реализации кропотливой работы, так что вы знаете, куда насыпать звёздочек ✨
К слову, на днях тут вписался на бесплатный мини-курс по созданию своего интерпретатора лиспа, там подобного рода трюки с замыканиями вполне себе пригодятся. Курс начинается сегодня, так что вы ещё можете успеть тоже вписаться) Для этого нужно написать в личку @IIvana
GitHub
GitHub - ProhorP/closure_lib
Contribute to ProhorP/closure_lib development by creating an account on GitHub.
👍4
#мемасики #common_lisp
По мотивам сегодняшнего стрима 😅
Писать макросы, которые определяют макросы, это каждый раз адский заворот мозговых извилин 🤯
По мотивам сегодняшнего стрима 😅
#common_lisp
Меж тем, тихо и незаметно вышла новая версия моего ECS-микрофреймворка для Common Lisp с исправлениями производительности и инкрементальными улучшениями API.
В ближайших планах — чуть больше сместиться в сторону маркетинга и написать про него пару популяризующих статей ☺️
Меж тем, тихо и незаметно вышла новая версия моего ECS-микрофреймворка для Common Lisp с исправлениями производительности и инкрементальными улучшениями API.
В ближайших планах — чуть больше сместиться в сторону маркетинга и написать про него пару популяризующих статей ☺️
GitLab
0.2.0 · Andrew Kravchuk / cl-fast-ecs · GitLab
This release features some incremental API improvements, as well as numerous performance optimizations, compatibility improvements and bug fixes. Release highlights: :ECS-UNSAFE...
👍6