LINUX.ORG.RU

Haskell C FFI

 , ,


1

4

Всем привет, у меня вопрос по FFI в хаскеле. В окамле имеется очень удобная библиотека для C для обеспечения работы с камловской машиной. В стандартном наборе камла идут хидеры callback.h, mlvalues.h, alloc.h, и т.д. Там можно и с камловскими структурами из С работать и каллбеки и использовать камловский сборщик мусора. Есть ли подобная вещь для хаскеля и где можно было бы про нее почитать?

★★★★★

есть, на ghc wiki (которая на траке) и у себя в инклудах например. Так же читать про foreing export.

qnikst ★★★★★
()

Все плохо, насколько мне известно. Человеческий FFI лишь в одну сторону (hs->c), но наоборот можно только вызывать заранее написанные врапперы, не могущие при этом пользоваться большей частью магии GHC, а в рантайм просто так вообще не залезешь, вроде. Могу ошибаться.

mix_mix ★★★★★
()

А зачем тебе обратный враппер? Использовать хаскель в качестве скриптового языка как минимум странно.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

А зачем тебе обратный враппер?

Колбэки?

bj
()

Есть 2 FFI:
1. вызов haskell кода из С
2. вызов С кода из haskell

Первое: $(ghc --print-libdir)/include/HsFFI.h (hs_init / hs_exit)

Второе: http://www.haskell.org/onlinereport/haskell2010/haskellch8.html
Простенький пример: http://code.haskell.org/~slyfox/ffi_callback_test.tar.gz - FFI во все стороны (с коллбеками).

hsc2hs (идёт с ghc) помогает автоматически втащить в .hs файл C enum-ы, макросы, константы:
http://www.haskell.org/ghc/docs/latest/html/users_guide/hsc2hs.html

Если руками лень 'foreign import'-ы лупить - можно автогенератор
'c2hs' попробовать.
http://blog.ezyang.com/2010/06/the-haskell-preprocessor-hierarchy/

Hackage пакет gtk (бывший gtk2hs) использует немного патченный c2hs для автогенерации биндингов.

sf ★★★
()
Ответ на: комментарий от buddhist

Должны быть. Как-то же портировали на него всякие библиотеки и фреймворки.

Aswed ★★★★★
() автор топика
Ответ на: комментарий от buddhist

А в хаскельном FFI по умолчанию нет коллбеков и нужно городить костыли?

foreign import ccall "wrapper" ... -- Создает генератор стабильных указателей.
Foreign.Ptr freeHaskellFunPtr :: FunPtr a -> IO () -- освобождает стабильные указатели

http://www.haskell.org/haskellwiki/GHC/Using_the_FFI#Callbacks_into_Haskell_f...

sf ★★★
()

Haskell C FFI

Haskell

C

Fatal Familial Insomnia

АААААААА!!!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.