Size: a a a

Сообщество Scheme

2019 August 29

PG

Pïg Grëënëst in Сообщество Scheme
Хоть какой-то движ
источник

PG

Pïg Grëënëst in Сообщество Scheme
Aydar Zarifullin
Тем временем протестировал хуки, работает вроде, но появились проблемы:
1) Пока не ясно как из C кода передавать аргументы.
2) Как вообще нормально запускать эти самые хуки из того же C.
3) Как быть с зависимостями которые надо ставить отдельно типа srfi-1

Пока всё очень примитивно. Движок (В данном случае darkplaces) инициализирует Chicken а затем грузит файл init.scm (название выбрано совершенно случайно) из этого файла естественно можно подгружать и другие. На скрине видно что я сначала импортирую модуль hook затем создаю хук и добавляю в него функцию.

Где-то в C коде мне остаётся лишь вызвать

CHICKEN_eval_string("(hook-run cl-init-hook)", NULL)

Под каждый хук наверное нужно будет создать отдельную C функцию так как hook-run принимает переменное число аргументов(на лисповый стороне) а C так не может (вернее может но тогда возникает проблема определения типа каждого аргумента для конвертации в лисповые сущности)
Функция под каждый хук самый простой и безотказный способ
источник

PG

Pïg Grëënëst in Сообщество Scheme
Либо va_list и туда уже пихать собственно лисповые объекты или свою обёртку
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Pïg Grëënëst
Либо va_list и туда уже пихать собственно лисповые объекты или свою обёртку
Существует ли возможность узнать типы того что ты туда положил?
источник

A

Aragaer in Сообщество Scheme
передать их отдельным аргументом, как это делают printf и scanf
источник

PG

Pïg Grëënëst in Сообщество Scheme
Да, либо унифицированное представление с тегами, что, по сути, то же самое
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Что-то не подумал в эту сторону, спасибо за идею.
источник

PG

Pïg Grëënëst in Сообщество Scheme
Попробовал ещё раз собрать duck editor, в шоке как можно так говнокодить
источник
2019 August 30

AZ

Aydar Zarifullin in Сообщество Scheme
Pïg Grëënëst
Попробовал ещё раз собрать duck editor, в шоке как можно так говнокодить
От "Собрать" одно название
источник

PG

Pïg Grëënëst in Сообщество Scheme
Собирал-то я scheme-lib
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Ну вот застрял в деталях. Вызвать scheme функцию на сишной стороне можно с помощью функции CHICKEN_apply она принимает C_word. C_word это любой scheme объект на сишной стороне. Чтобы из существующей scheme функции получить C_word надо вызвать функцию CHICKEN_read (предположительно, в доке никакой информации нет) только вот неясно безопасно ли вызывать функцию полученную с помощью CHICKEN_read. Так как предположительно сборщик мусора Chicken может в любой момент поменять адрес функции. Повторюсь в доке инфы очень мало а сформулировать вопрос со всеми подробностями в список рассылки не могу.
источник
2019 August 31

PG

Pïg Grëënëst in Сообщество Scheme
Хочется помочь, но я все больше по Guile
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Ответили в списке рассылки. Подсказали как именно вызвать scheme функции но про сборщик мусора ничего не сказали, возможно криво объяснил
источник

AK

Andrew Kravchuk in Сообщество Scheme
Вообще, курочка вроде бы на всю голову однопоточная, там даже свой аналог GIL имеется, поэтому вроде как можно не беспокоиться, что во время "нырка" в C куриный сборщик мусора подберёт что-то используемое в сишной функции.
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Вообще, курочка вроде бы на всю голову однопоточная, там даже свой аналог GIL имеется, поэтому вроде как можно не беспокоиться, что во время "нырка" в C куриный сборщик мусора подберёт что-то используемое в сишной функции.
Типа пока ты в скоупе определенной функции перемещений точно не будет?
источник

AZ

Aydar Zarifullin in Сообщество Scheme
https://github.com/iZarif/darkplaces вот репозиторий кстати
источник

AK

Andrew Kravchuk in Сообщество Scheme
Aydar Zarifullin
Типа пока ты в скоупе определенной функции перемещений точно не будет?
Бить себя кулаком в грудь не буду, но из поверхностного чтения документации в своё время я так понял, что нет
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Собрать труднее чем оригинал: рядом надо положить папку 'chicken' с сорцами чикена и libchicken.so

Потом вбить в терминал make sdl-release

Затем лучше в отдельную папку 'game' скопировать
darkplaces-sdl
libchicken.so
init.scm
hook.scm
hook.import.scm
srfi-1.so (взять там куда у вас чикен модули кладет)
srfi-1.import.so (взять там куда у вас чикен модули кладет)
Папку id1 (файлы самой игры) (взять с диска или в интернете)

libchicken.so надо переименовать в libchicken.so.11

Запускать все это дело командой
LD_LIBRARY_PATH=. ./darkplaces-sdl
источник

AZ

Aydar Zarifullin in Сообщество Scheme
После запуска и выхода из игры в терминале будет выведено сообщение hello from chicken
источник

PG

Pïg Grëënëst in Сообщество Scheme
А у тебя гиикса нигде нету?
источник