Comments 12
Прикольно, конечно, но...
Интересно, но они просто подключили движок дума в качестве расширения постргеса, а вся обработка по-прежнему идет через оригинальный код дума. А судя по названию статьи можно было предположить, что они прямо весь код дума портировали на PL/PGSQL, вот это было бы круто...
Технически это возможно, но объём работ уж очень большой получается.
Если рассматривать вариант работы без расширений, то проще взять PL/Python и запустить на нём python порт движка.
Кстати, PostgreSQL нативно может следующие языки: PL/pgSQL, PL/Tcl, PL/Perl, PL/Python.
Ещё одна из интересных идей - добавить язык PL/C, который как PL/PGSQL но только С :)
И в него уже вставить оригинальные функции на С.
Это из разряда "DOOM запустили на цифровом тесте беременности!!!"
А когда начинаешь читать, оказывается, что тест вскрыли, подпаялись к контроллеру, и просто выводили на его дисплейчик DOOM, запущенный на стоящем рядом ноутбуке. То есть, по сути, все свелось к "мы вывели дум на 5-баксовый дисплей с алика".
Тут DOOM действительно внутри СУБД работает, в самом ядре. И каждая сессия имеет свой инстанс игры, который живёт внутри бэкенда сессии - ни какого "внешнего" подключения игры не происходит.
Теоретически можно было бы даже мультиплеер запилить между разными сессиями и обмен через shared memory бэкендов.
Почти все расширения PostgreSQL реализованы по такому принципу - подгружается библиотека которая реализует какой-то функционал. Это как комплектные из состава contrib, так и большинство внешних - pg_pathman, pg_hint_plan, timescaledb, pg_stat_kcache, postgis.
библиотеку aalib изобрели заново, загрузите посмотрите возможности aalib в демо bb установка apt install bb.
По приколу видио в терминале проигрывал, вроде и сейчас vlc в linux может так фильмы показывать.
Я думал использовать готовую, в т.ч. aalib. Но при беглом осмотре показалось что она умеет рендерить только в терминал, т.е. работать как графическое устройство.
В данной статье рендеринг картинки в текст происходит сначала не в терминал, а в строки возвращаемой функцией таблицы. И лишь на клиентской стороне они выводятся в терминал.
Применить aalib можно было бы на клиентской стороне, передавая с сервера не ASCII а пиксели. Но это усложнило бы клиентский код, который хотелось минимизировать, чтобы как можно больше логики было на серверной стороне.
Можно было попробовать адаптировать aalib, но простая своя реализация показалась проще.
В самом начале статьи:
https://www.youtube.com/watch?v=zdQOoZgB50M
Я другу отправлю, он фанат Doom. Может теперь фанатом скуля стаанет...)) будет о чем поговорить.
Запускаем Doom внутри PostgreSQL