Во-первых, я начинающий Haskell.
Я планирую интегрировать Haskell в C для игры в реальном времени. Haskell делает логику, C делает рендеринг. Для этого я должен передавать огромные сложные структурированные данные (состояние игры) от/друг к другу за каждый тик (не менее 30 раз в секунду). Таким образом, данные передачи должны быть легкими. Данные состояния могут располагаться в последовательном пространстве памяти. Обе части Haskell и C должны свободно обращаться ко всем областям состояний.
В лучшем случае стоимость передачи данных может копировать указатель на память. В худшем случае копирование целых данных с преобразованием.
Я читаю Haskell FFI (http://www.haskell.org/haskellwiki/FFICookBook#Working_with_structs) Код Haskell явно указывает макет памяти.
У меня есть несколько вопросов.
- Может ли Haskell явно указывать макет памяти? (для соответствия точно с C struct)
- Это реальная память? Или требуется какое-либо преобразование? (штраф за исполнение)
- Если Q # 2 истинно, любое ограничение производительности при явно указанном макете памяти?
- Какой синтаксис
#{alignment foo}
? Где я могу найти документ об этом? - Если я хочу передавать огромные данные с максимальной производительностью, как мне это сделать?
* PS Явная функция макета памяти, которую я назвал, является только атрибутом С# [StructLayout]. Который явно определяет положение и размер в памяти. http://www.developerfusion.com/article/84519/mastering-structs-in-c/
Я не уверен, что у Haskell есть соответствующая лингвистическая конструкция, соответствующая полям C struct.