3 ms·
You're right, I can't find where it's explicitly forbidden in the docs, but it also isn't stated that you can pass pointers to C code either. There has been mor
by ominous_prime 12y ago
You're right, I can't find where it's explicitly forbidden in the docs, but it also isn't stated that you can pass pointers to C code either. There has been more recent discussion here (https://code.google.com/p/go/issues/detail?id=8310 https://code.google.com/p/go/issues/detail?id=8310) and on the mailing lists too:
> +rsc
> Passing a Go pointer like that to C is problematic because eventually
> we will want the garbage collector to be able to move things
and later on with a response from Dmitry:
>> In my opinion, the current behavior should be covered by the
>> compatibility guarantee. In Go 1, passing pointers to Go-allocated
>> memory into C was not a problem.
>
> This was never fully working. Only some individual cases were working.
Even though your C thread is being run synchronously, the GC is running concurrently in another thread (concurrent GC was introduced in go1.3), and has the ability to alter the memory that was passed to your C function.
- niemeyer 12y agoThe rule was never entirely clear, but there was definitely support towards allowing Go pointers to be visible in C code, as long as they were held referenced inside Go code somewhere. See this thread, for example: https://code.google.com/p/go/issues/detail?id=6397#c11 https://code.google.com/p/go/issues/detail?id=6397#c11 That said, the rule is clearly changing now, and it is not even clear to what it is changing yet (see Ian's comment in this HN thread).