Size: a a a

Сообщество Scheme

2019 May 13

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Да, про это, оттуда и код внутри макроса.
Я бы с радостью, но в SDL где-то с полдюжины функций с переменным числом параметров, а копипастить одинаковый код столько раз подряд мне религия запрещает 😅
Перед тем как макрос делать хотел функцию упростить.
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Не получается

expected: (listof ctype?)
 given: '((#<ctype> #<ctype:int32> #<ctype>))

Что за магия?
источник

AK

Andrew Kravchuk in Сообщество Scheme
Да она там вроде итак проще некуда)
Это тайпчекер ракетовский. Где-то в коде нечто ожидало список ctype (это часть FFI API ракета), а получило, если я правильно дешифровал, список со списком с ctype'ами
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Да она там вроде итак проще некуда)
Это тайпчекер ракетовский. Где-то в коде нечто ожидало список ctype (это часть FFI API ракета), а получило, если я правильно дешифровал, список со списком с ctype'ами
Точно список со списком

Можно так подробно не рассказывать я просто мега-внимательный
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Вроде проще? https://gist.github.com/iZarif/8b76d72bf4cde96eb16848fc357573d3 Или я что-то важное выпилил?
источник

AK

Andrew Kravchuk in Сообщество Scheme
Aydar Zarifullin
Вроде проще? https://gist.github.com/iZarif/8b76d72bf4cde96eb16848fc357573d3 Или я что-то важное выпилил?
Там хэшмапа, которую ты выпилил, была из соображений производительности, get-ffi-obj вроде каждый раз делает дорогостоящие манипуляции с dlopen и dlsym, поэтому её результаты в неё и записывались.
источник

AK

Andrew Kravchuk in Сообщество Scheme
Вообще, к коду самой функции вопросов нет, какая есть, такая есть. Мне бы по макросу хотя бы какого-нибудь фидбека 😅 По всем вот этим вот with-syntax*, syntax->datum и #'.
источник

AK

Andrew Kravchuk in Сообщество Scheme
Наверное, можно, но я на всякий случай к коду, взятому из каталога examples в исходниках Racket отношусь, как в взятому свыше))
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Наверное, можно, но я на всякий случай к коду, взятому из каталога examples в исходниках Racket отношусь, как в взятому свыше))
Нет, пинает ffi
источник

AK

Andrew Kravchuk in Сообщество Scheme
источник

AK

Andrew Kravchuk in Сообщество Scheme
Там по идее есть кейс, когда число integer?, но не exact?. Например, 1.0:
> (define num 1.0)
> (integer? num)
#t
> (exact? num)
#f
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Там по идее есть кейс, когда число integer?, но не exact?. Например, 1.0:
> (define num 1.0)
> (integer? num)
#t
> (exact? num)
#f
Я в курсе про это
источник

AK

Andrew Kravchuk in Сообщество Scheme
Я вот только сейчас узнал 😅
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Там хэшмапа, которую ты выпилил, была из соображений производительности, get-ffi-obj вроде каждый раз делает дорогостоящие манипуляции с dlopen и dlsym, поэтому её результаты в неё и записывались.
А разве

(define stdlib (ffi-lib #f))

и указание stdlib вместо #f в get-ffi-obj не спасает от этого?
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Ну лишнего dlopena точно быть не должно
источник

AK

Andrew Kravchuk in Сообщество Scheme
Aydar Zarifullin
А разве

(define stdlib (ffi-lib #f))

и указание stdlib вместо #f в get-ffi-obj не спасает от этого?
Ну я импортирую из SDL, а не из libc, так что для этого случая вряд ли проканает
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Ну я импортирую из SDL, а не из libc, так что для этого случая вряд ли проканает
Туда же любую либу можно вписать
источник

AK

Andrew Kravchuk in Сообщество Scheme
Так у меня уже вписано:
(define sdl-lib (ffi-lib "libSDL2-2.0" '("0" #f)))

Насчёт спасает или не спасает - чёрт его знает, сейчас лень опять в исходники Racket заныривать. Если есть в примере - значит, зачем-то нужно)
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Andrew Kravchuk
Так у меня уже вписано:
(define sdl-lib (ffi-lib "libSDL2-2.0" '("0" #f)))

Насчёт спасает или не спасает - чёрт его знает, сейчас лень опять в исходники Racket заныривать. Если есть в примере - значит, зачем-то нужно)
Спасать должно. Из описания get-ffi-obj:

Looks for the given object name objname in the given lib library. If lib is not a foreign-library value produced by ffi-lib, it is converted to one by calling ffi-lib.
источник

AK

Andrew Kravchuk in Сообщество Scheme
Окей. В любом случае, фиг с ним, с кодом функции, больше интересует макрос)
источник