2017-01-03 6 views
3

Какова связь между, например, CInt и Int# против CInt#?Внешние типы и типы Unboxed в Haskell

Например, если я называю внешнюю функцию, которая возвращает CInt, это не уже CInt# строительством (то есть, это сырое int в стеке, а не указатель на что-то в куче, которая содержит int)?

И в таком случае, какая разница между CInt и Int#?

Если я пытаюсь выполнить каждый бит производительности, который я могу, какой из них использовать из CInt и Int# и CInt#?

ответ

4

Не думаю, что есть такая вещь, как CInt#.

  • CInt только пользовательский тип, который гарантированно хорошо играть с C (см the blurb at the top of this page для более формального взятия на этом). Он помещен в коробку, поэтому вы получаете удар производительности для этого.
  • Int# - «волшебный» unboxed int. Как оказалось, это does play well with the FFi, поэтому используйте это, если вы хотите каждый бит производительности.
Смежные вопросы