Size: a a a

2020 May 16

AK

Andrew Kravchuk in Lisp Forever
Привет! Через пару минут снова буду стримить немного геймдева на Common Lisp. Сегодня буду интегрироваться с гуёвой C-библиотекой Nuklear.
Твич: https://twitch.tv/awkravchuk
Ютуб: http://youtu.be/7K_P-hHgUvU
источник

AZ

Aydar Zarifullin in Lisp Forever
Andrew Kravchuk
Привет! Через пару минут снова буду стримить немного геймдева на Common Lisp. Сегодня буду интегрироваться с гуёвой C-библиотекой Nuklear.
Твич: https://twitch.tv/awkravchuk
Ютуб: http://youtu.be/7K_P-hHgUvU
Стрим не смотрел... (Сорри если ещё идёт) Чем обусловлен выбор nuklear? (Тем что другого встраиваемого гуя на сях нет) Больше интересно как оно в плане кастомизации внешнего вида
источник

AK

Andrew Kravchuk in Lisp Forever
Aydar Zarifullin
Стрим не смотрел... (Сорри если ещё идёт) Чем обусловлен выбор nuklear? (Тем что другого встраиваемого гуя на сях нет) Больше интересно как оно в плане кастомизации внешнего вида
Тем, что он малюсенький и легковесный)
А главное, что написан на C, с интеграцией в C++ в лиспы, как ты наверняка знаешь, большие проблемы))
источник

AZ

Aydar Zarifullin in Lisp Forever
Andrew Kravchuk
Тем, что он малюсенький и легковесный)
А главное, что написан на C, с интеграцией в C++ в лиспы, как ты наверняка знаешь, большие проблемы))
Я бы не сказал что плюсы сложно интегрировать во что-либо (хотя что-то серьезное я не биндил, мне кажется что написать сишную прослойку для плюсовой либы несложно) по времени затратно просто
источник

AK

Andrew Kravchuk in Lisp Forever
Aydar Zarifullin
Я бы не сказал что плюсы сложно интегрировать во что-либо (хотя что-то серьезное я не биндил, мне кажется что написать сишную прослойку для плюсовой либы несложно) по времени затратно просто
Ну да, гораздо затратнее, чем для сишной либы
источник

AK

Andrew Kravchuk in Lisp Forever
Вообще, и сишкой тоже боль. Как я в начале стрима говорил, есть низкоуровневая система cffi, с ней плюс-минус всё ок, в ней можно определить через defcfun внешние функции. А вот для того, чтобы генерить defcfun формы автоматически, нужно пройти через боль и унижения
Либо это cl-autowrap, который зависит от clang и мусорит в твоём дереве исходников миллионом мутных json-файлов, которые ещё и недетерминированно генерятся
Либо claw, который форк cl-autowrap и не сильно его лучше
Либо swig, который понимает только подмножество C/C++ и вообще в последней версии дропнул поддержку Common Lisp
источник

AK

Andrew Kravchuk in Lisp Forever
Сорян, накипело)
источник

AZ

Aydar Zarifullin in Lisp Forever
Andrew Kravchuk
Вообще, и сишкой тоже боль. Как я в начале стрима говорил, есть низкоуровневая система cffi, с ней плюс-минус всё ок, в ней можно определить через defcfun внешние функции. А вот для того, чтобы генерить defcfun формы автоматически, нужно пройти через боль и унижения
Либо это cl-autowrap, который зависит от clang и мусорит в твоём дереве исходников миллионом мутных json-файлов, которые ещё и недетерминированно генерятся
Либо claw, который форк cl-autowrap и не сильно его лучше
Либо swig, который понимает только подмножество C/C++ и вообще в последней версии дропнул поддержку Common Lisp
Ну тут уж выбор боль биндить или боль имплементировать с нуля.
источник

VM

Vyacheslav Mikushev in Lisp Forever
Andrew Kravchuk
Вообще, и сишкой тоже боль. Как я в начале стрима говорил, есть низкоуровневая система cffi, с ней плюс-минус всё ок, в ней можно определить через defcfun внешние функции. А вот для того, чтобы генерить defcfun формы автоматически, нужно пройти через боль и унижения
Либо это cl-autowrap, который зависит от clang и мусорит в твоём дереве исходников миллионом мутных json-файлов, которые ещё и недетерминированно генерятся
Либо claw, который форк cl-autowrap и не сильно его лучше
Либо swig, который понимает только подмножество C/C++ и вообще в последней версии дропнул поддержку Common Lisp
Разве defcfun нельзя генерировать макросами? Или я чего-то не понимаю?
источник

AK

Andrew Kravchuk in Lisp Forever
Vyacheslav Mikushev
Разве defcfun нельзя генерировать макросами? Или я чего-то не понимаю?
А каким образом макросами можно проанализировать сишный код и выковырять из него информацию о именах функций и типах аргументов?..
Если тебе известен какой-то неизвестный мне способ, я весь внимание :)
источник

AK

Andrew Kravchuk in Lisp Forever
Aydar Zarifullin
Ну тут уж выбор боль биндить или боль имплементировать с нуля.
ето да ._.
источник

VM

Vyacheslav Mikushev in Lisp Forever
Andrew Kravchuk
А каким образом макросами можно проанализировать сишный код и выковырять из него информацию о именах функций и типах аргументов?..
Если тебе известен какой-то неизвестный мне способ, я весь внимание :)
Нет, мне, к сожалению, такой способ неизвестен. 😁 Я неправильно интерпретировал сообщение. Только потом до меня дошло, что нужно прочитать библиотеку и из неё выдернуть все функции.
источник

AK

Andrew Kravchuk in Lisp Forever
Ну да, задумка в том, чтобы не писать ручками, а чтобы оно само 😅
источник

A

Aragaer in Lisp Forever
ну имя функции положим выковырять можно
источник

A

Aragaer in Lisp Forever
__func__ если я ничего не путаю
источник

AK

Andrew Kravchuk in Lisp Forever
Имя-то ладно, так нужны ещё типы аргументов, которые могут быть нетривиальными, а ещё могут быть макросы, которые вообще всё ломают и нужен полноценный C-компилятор, который как-то передаст всю эту инфу в лисп.
источник

AK

Andrew Kravchuk in Lisp Forever
Если просто пытаться на коленке парсить C, то это получится SWIG
источник

AK

Andrew Kravchuk in Lisp Forever
Который, например, запинается на
#define NK_FLAG(x) (1 << (x))
источник

AK

Andrew Kravchuk in Lisp Forever
Ну как запинается, он пытается в лисповский код воткнуть что-то типа
(defcenum nk_whatever
 (whatever-flag #.(1 << 2))
)
источник

VM

Vyacheslav Mikushev in Lisp Forever
Andrew Kravchuk
Имя-то ладно, так нужны ещё типы аргументов, которые могут быть нетривиальными, а ещё могут быть макросы, которые вообще всё ломают и нужен полноценный C-компилятор, который как-то передаст всю эту инфу в лисп.
Кстати, а как макросы биндить в common lisp? Смотреть по исходному коду во что они раскрываются?
источник