2011-04-21 6 views
1

C에서 모든 식별자 에 대해 을 입력하면 ident의 메모리 위치 (포인터)를 얻기 위해 &ident을 쓸 수 있습니다. 힙 또는 스택에. C 유형으로 작업하는 동안이 기능에 액세스하는 것이 도움이되는 경우가 많습니다.Haskell의 Foreign.C C의 앰퍼샌드 연산자 (&)와 동일합니다.

하스켈에서 FFI에 해당하는 작업이 있습니까? 당신은 당신이 하스켈로 가져 오는는 C 식별자가있는 경우

+3

포인터로 가지고있는 모든 외부 참조를 생각해보십시오. 주소가 이미 있습니다. 주소의 주소를 물어 보지 않는 한, 하스켈은 그것을 지원하기에 충분할 정도로 C처럼 작동하지 않습니다 (하스켈은 여러분의 데이터를 옮길 권리를 보유합니다 - 그리고 GHC는 꽤 많이합니다) – luqui

+3

아마도 여러분은 고차원적인 질문을하고있는 것. 무엇을 성취하려고합니까? –

+0

OpenCLRaw를 가지고 놀고 있었고 (컴파일이 잘되었다고 생각합니다) 컴파일하려고합니다. – fatuhoku

답변

2

, 당신과 같이, FFI declarations에서 "&"구문을 통해 그 주소에 대한 포인터로 변환 할 수 있습니다 :

foreign import ccall "&" bar :: Ptr CInt 

는 일반적으로이 매우이다 당신이 가져 오는 거의 모든 것이 이미 포인터이기 때문에해야 할 희귀 한 일입니다.

하스켈 값 자체는 stable pointers을 사용하여 가비지 수집기의 영향을받지 않는 포인터가 될 수 있습니다.

관련 문제