Sadece onun içindeyse, bir Python'u Scheme programlarına yerleştirebilmeniz için bir Scheme binding to libpython oluşturmaya karar verdim. Python'un C API'sine zaten çağrı yapabilirim, ancak bellek yönetimini gerçekten düşünmedim.C kodu ile uğraşırken Python referans sayım/çöp toplama hasadı var mı?
mzscheme'nin FFI çalışma biçimleri, bir işlevi çağırabilmem ve bu işlev PyObject
işaretçisini döndürürse, otomatik olarak referans sayımını artırabilir. Daha sonra, Scheme nesnesi çöp toplandığında, referans sayımını azaltacak bir finalizer kaydedebilirim. documentation for reference counting'a baktım ve ilk bakışta bununla ilgili herhangi bir sorun görmüyorum (bazı durumlarda alt-optimal olsa da). Kaybettiğim herhangi bir yaka var mı?
Ayrıca, cyclic garbage collector documentation'un başlıklarını veya kuyruklarını oluşturmada sorun yaşıyorum. Burada akılda tutulması gereken şeyler neler? Özellikle, Python'u bir şeye referans olduğumu bilmesini nasıl sağlarım?
Python, döngüsel yapı için referans sayma * ve * çöp toplayıcısını kullanıyor? Bu oldukça büyük bir kusur. Tasarım türü. Her durumda, bu, bir python tarafındaki döngüye katılan herhangi bir değerin şemaya maruz kalması durumunda, Jason için işleri "daha eğlenceli" hale getirecek gibi görünüyor. –
İyi bilgi. Elime geçtiğimde herşeyi INCREF ve işimi bitirdiğimde herşeyi DECREF ettiğimde, tamam mıyım? Yoksa karşılaşabileceğim herhangi bir sorun var mı? –
@Jason, sadece INCREF * ödünç alındı * referanslar. Bazı işlevler halihazırda INCREF olan * yeni * referansları döndürür. INCREF'ing onları bir bellek sızıntısına neden olur. –