Anonymous
И допустим дожидается ли исполнения native кода, когда пришло время сборки
Leonid 🦇
никогда не слышал про safepoints. а так собирает ничего не ждёт. если тебе надо передать чего в ffi то ты это аллоцируешь в запиненой памяти. ну или тупо malloc
Anonymous
Ну ты ж понимаешь, что копирование не всегда вариант, а если ссылка утекла, то её не дропнуть
Leonid 🦇
всмысле?
Kirill
что такое "дропнуть" если память запинена?
Anonymous
А, понял.
Anonymous
Прост gc ничего не сделает
Denis
https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned
Denis
> Nevertheless, this is a useful case, because we often want to allocate garbage-collectable memory that can be passed to foreign functions via the FFI, and we want to be able to run the GC while the foreign function is still executing (for a safe foreign call). Hence, the memory we allocated must not move.
Denis
я так понял что вопрос об этом
A64m
вроде где-то был целый доклад @qnikst про это
Denis
было дело
Anonymous
Эт специальный участок памяти ?
Alexander
на ruhaskell в мск
Anonymous
Alexander
мне лень читать выше, если повторите вопрос, то я отвечу
Denis
специально помечаемая память, которую нельзя перемещать
Denis
Мне нужно констрейнт написать вида Forall (MonadFoo m, MonadBar m) m. Я понимаю что это как-то делается с помощью Data.Constraint.Forall, но у меня от него рейджквит в прошлый раз был. Есть где-нибудь пример для тупых?
Зигохистоморфный
Denis
Зигохистоморфный
Denis
по-моему это по другое пример
Denis
точно про другое
Alexander
@gurinderu тот доклад вроде норм, должны покрываться все вопросы, но если что то лучше опиши задачу, чтобы не пересказывать все мануалы
Denis
а слайды к докладу кстати где-то есть? На видео не видно.
Anonymous
Меня прост интересует есть копирование памяти или нет)
Anonymous
А если нет, то что будет если запинить обьект в young generation и чтоб он был большой
Alexander
@catamorphism щас поищу
Alexander
обычно конвертируют в структуры си
Alexander
перемещается ли объект зависит от типа памяти где он живет pinned vs unpinned
Alexander
C friendly типы обычно pinned
Alexander
Vector.Storable/ByteString например
Alexander
примитивные типы Foreign.C.* передаются по значению и двигать там нечего
Alexander
если джедай и хочется работать с Haskell heap objects то наверное самое разумное использовать эти как-там их
Alexander
секунду
Alexander
как ты отдашь его в си?
Alexander
и как ты собираешься в си с ним работать
Alexander
вопросы не риторические
Anonymous
ну зная примерный layout в памяти, почему нельзя с ним работать?
Alexander
зная примерный - нельзя
Alexander
зная точный - можно
Anonymous
ок, зная точный)
Alexander
ты знаешь точный layout?
Alexander
можно через compact-ы
Leonid 🦇
сомнительно и через компакты
Alexander
вообще обычные haskell объекты unpinned
Alexander
и если unsafe FFI call, или передаешь данные не через # ссылки, то их могут переместить
Alexander
даже с unsafe надо передавать #
Anonymous
Alexander
если ты не знаешь что такое kind # то не надо так делать
Denis
задача непонятна для начала, звучит как будто хочется очень странного
Alexander
да
Anonymous
Эта задача в вакууме
Alexander
просто тут отвечают, что ты этого не хочешь
Alexander
особенное если в вакууме
Alexander
=)
Alexander
но вообще, если хочешь работать с haskell heap, то тебе нужно класть объекты в compact region
Alexander
тогда зная представление объектов на куче ты можешь с ними работать
Alexander
но, тут есть сложность, это не питон или кложа
Alexander
подключить haskell.h где будут хедеры для всех структур не получится
Alexander
поэтому нужно будет читать мануалы ghc, разбирать все эти указатели и т.п.
Alexander
и не знаю как гарантировать ABI
Alexander
в общем так себе задача, я бы не решился
Alexander
учитывая что складывание в компакт это копирование структуры
Denis
главный вопрос вообще зачем это делать
Alexander
это должен быть достаточно интересный алгоритм для которого прыжок в си для работы с деревом на haskell даст ощутимый бонус
Alexander
because I can
Alexander
например, вполне валидное желание
Denis
разве что
Alexander
но, я предпочитаю заниматься because I can когда я знаю почти все из области
Anonymous
Denis
есть опасность because I can't
Alexander
@gurinderu доклад советую посмотреть, сможет снять ряд вопросов я думаю
Alexander
я конечно не очень весело рассказываю
Denis
ой-ой
Denis
а я не могу сделать ForallF C m, если C - тайп синоним
Denis
кажется приплыли