<div dir="ltr">On Wed, Apr 6, 2016 at 2:18 PM, Neal Becker <<a href="mailto:ndbecker2@gmail.com">ndbecker2@gmail.com</a>> wrote:<br>><br>> I have C++ code that tries to share the mtrand state.  It unfortunately<br>> depends on the layout of RandomState which used to be:<br>><br>> struct __pyx_obj_6mtrand_RandomState {<br>>   PyObject_HEAD<br>>   rk_state *internal_state;<br>>   PyObject *lock;<br>> };<br>><br>> But with 1.11 it's:<br>> struct __pyx_obj_6mtrand_RandomState {<br>>   PyObject_HEAD<br>>   struct __pyx_vtabstruct_6mtrand_RandomState *__pyx_vtab;<br>>   rk_state *internal_state;<br>>   PyObject *lock;<br>>   PyObject *state_address;<br>> };<br>><br>> So<br>> 1. Why the change?<br>> 2. How can I write portable code?<br><br>There is no C API to RandomState at this time, stable, portable or otherwise. It's all private implementation detail. If you would like a stable and portable C API for RandomState, you will need to contribute one using PyCapsules to expose the underlying rk_state* pointer.<div><br><div><a href="https://docs.python.org/2.7/c-api/capsule.html">https://docs.python.org/2.7/c-api/capsule.html</a><br><br>--<br>Robert Kern</div></div></div>