grin-compiler / grin

GRIN is a compiler back-end for lazy and strict functional languages with whole program optimization support.

Home Page:https://grin-compiler.github.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Foreign pointer primitive type

Z-snails opened this issue · comments

This is needed for various features of many functional languages, eg arbitrary precision integers and arrays implemented in FFI.

If there's only support for foreign pointers, that makes code-gen easier as the layout is consistent, however having structs would be useful, eg for interfacing with pass-by-value C libraries.

What operations do you need?

If there's only support for foreign pointers, that makes code-gen easier as the layout is consistent, however having structs would be useful, eg for interfacing with pass-by-value C libraries.

Idiomatic C never passes a struct by value in one of the arguments, only by pointer to avoid copies.

@csabahruska Passing too and from FFI functions. My current use case is arbitrary precision integers in the idris2-grin backend.

@luc-tielen unfortunately not all C libraries are idiomatic.

Would foreign pointers interact with the garbage collector?

In the long term, yes (eg for IORef) however I don't think for Integer all that is needed is a static (as in known at runtime) finaliser function (which can also be grin which calls the ffi free function)