Чтобы добавлять сообщения и комментарии, .

@qnikst:
qnikst

как бы поаккуратнее сделать заполнение сишной структуры [Word64], [String], проблема в том, что если заполнять из сишки, то доступа к списку, а но выделить память нужно заранее сишными методами. Или на все забить и сразу использовать ByteStringShort и Vector.Storable и не мучаться с глупыми вопросами?

@qnikst:
qnikst

Написал факториал модулем nginx на сабже..
Не спрашивайте зачем

@Renha:
Renha

Начал кодить Tox-клиент на 8th (коммерческий кроссплатформенный forth), затестил FFI, довольно мило:
"tox" lib tox

tox drop
"N" "tox_version_major" func: tox_version_major
"N" "tox_version_minor" func: tox_version_minor
"N" "tox_version_patch" func: tox_version_patch

"NNNN" "tox_version_is_compatible" func: tox_version_is_compatible

"Pn" "tox_options_new" func: tox_options_new

tox_version_minor .
tox_version_major .
tox_version_patch .
1 2 3 tox_version_is_compatible .

@6Volt:
6Volt

C/invoke Даже удобнее чем libffi. Няшная штука.

@4DA:
4DA

Ну наконец-то кто-то что-то начал делать.
nullprogram.com

@maxlapshin:
maxlapshin

народ, а расскажите как работает FFI там, где он работает. Вроде в Хаскеле говорят неплохая реализация есть.
Интересно: можно ли написать на высокоуровневом языке несколько строк и получить работающий биндинг к тому же libav?

@khorser:
khorser

Вот есть у меня биндинги к некоей С++ либе. Из-за строк, указателей и состояния библиотеки в сигнатурах появляется IO. Настоящего I/O нет, поэтому хочется всё завернуть в свою не-IO монаду, которая сделает unsafePerformIO и обеспечит правильную последовательность вызовов посредством Reader или State. Гугл говорит, что подход не уникален и я не одинок: stackoverflow.com Но как-то настораживает отсутствие комментариев к ответу, который дал сам же спросивший. У кого-нибудь есть мысли?

@qnikst:
qnikst

а есть люди более-менее адекватно знающие R есть небольшой список тупых вопросов?

@segfault:
segfault

я правильно понял, что в качестве аргументов функций к сишным либам можно использовать только строгие байтстринги, которые перед этим надо еще useAsCString, то есть скопировать строку целиком, чтобы в конце поставить нолик, а билдеры есть только над ленивыми байтстрингами ?

Мне для биндинга в качестве безопасного аргумента что использовать то ?

@Macil:
Macil

По идее, хаскельский FFI можно использовать для произвольного маршалинга/демаршалинга данных безотносительно этого самого FFI, вместо пакета binary, например. Из плюсов — 100% стандартность, даже неправославный base тянуть за собой не нужно.

@qrilka:
qrilka

я правильно понимаю, что void * будет на хаскеле выглядеть как Ptr () ?

@qrilka:
qrilka

предыдущий косяк в #2008519
был вызван некорректной реализацией Storable, если кому вдруг интересно

@qrilka:
qrilka

сишная функция принимает на вход длину массива и массив структур из 2 даблов. Беру withArrayLen и в итоге получаю тупое зацикливание. Как понять, гдеж собака порылась?

@Macil:
Macil

Хаскелисты! Не трахоёбтесь с низкоуровневыми биндингами к библиотекам. Пишите ЧАСТНЫЙ случай на C, и прибиндивайтесь к нему через FFI.
1. Это не усложняет сборку из исходников. Даже под неполноценными системами, бинарники GHC идут вместе с GCC. Кабал же, ваши нужды отлично понимает, и никаких сторонних сборочных средств не потребуется.
2. Это не усложняет разработку. GHCI позволяет подгружать как .so/.dll, так и .o и невозбранно ими пользоваться прямо из REPL.
3. Это не вносит дополнительных методологических трудностей. Низкоуровневые биндинги предполагают, что вы и так хорошо знакомы с искомой библиотекой. Да и из документации, в лучшем случае, отошлют к оригиналу.
4. Даже в низкоуровневых биндингах обычно полно всякой сишной враппер-дряни. Вам же в ней и разбираться, равно как и в хаскельской враппер-дряни.
5. В «частный случай» на C можно много чего запрятать, что негоже. А жесткие API/ABI интерфейсы обеспечат отличную изоляцию.
6. Это единственный годный способ прибиндиться к C++.

@arrowdodger:
arrowdodger

Господа, а насколько оверхедко дергать из С/С++ Хаскелльный код? Хороша ли идея сделать event loop на С/С++, а диспатчить его в Хаскелле?

@Macil:
Macil

С ужасом открыл для себя, что оказывается в GHC unicode версии Foreign.C.String locale-зависимы. Я может быть бы и не портив, но ByteString или хотя бы [Word8] версий просто нет. А если мне при любой локали нужен UTF8? Что же делать? Ну не грязные же хаки из utf8-string применять?

@yoghurt:
yoghurt

The swing of things: omploader.org