방금 그랬듯이 나는 Scheme binding to libpython을 만들기로 결정했습니다. 그래서 당신은 Scheme 프로그램에 파이썬을 내장 할 수 있습니다. 이미 Python의 C API를 호출 할 수 있지만 메모리 관리는 실제로 생각하지 않았습니다.C 코드를 다룰 때 Python 참조 카운팅/가비지 콜렉션이 있습니까?
mzscheme의 FFI가 작동하는 방식은 함수를 호출 할 수 있으며 함수가 PyObject
에 대한 포인터를 반환하면 참조 횟수를 자동으로 증가시킬 수 있습니다. 그런 다음 Scheme 객체가 가비지 수집 될 때 참조 카운트를 감소시키는 finalizer를 등록 할 수 있습니다. 나는 documentation for reference counting을보고 (일부 경우에는 차선책 일 수도 있지만) 언뜻보기에는 아무런 문제가 보이지 않습니다. 내가 누락 된 문제가 있습니까?
또한, cyclic garbage collector documentation의 머리 또는 꼬리를 만드는 데 문제가 있습니다. 내가 여기서 염두에 두어야 할 것은 무엇인가? 특히, 파이썬이 내가 무언가에 대한 참조를 가지고 있다는 것을 어떻게 인식 시켜서 내가 그것을 사용하는 동안 그것을 모으지 않는가?
그래서 ... 파이썬은 순환 계산을 위해 참조 카운팅 *과 * 가비지 컬렉터를 사용합니까? 그것은 꽤 심각한 결함입니다. 디자인 종류. 파이썬 측 사이클에 참여하는 값이 스키마에 노출되어 있으면 Jason에서 훨씬 재미있는 일이 될 것입니다. –
좋은 정보. 내가 그것을 얻었을 때 모든 것을 INCREF하고, 내가 그것을 마쳤을 때 모든 것을 DECREF한다면, 나는 괜찮은가? 아니면 제가 갈 수있는 문제가 있습니까? –
@ Jason, INCREF * 빌려온 * 참조 만. 일부 함수는 이미 INCREF로 처리 된 * new * 참조를 반환합니다. 그것을 INCREF하면 메모리 누출이 발생합니다. –