Cara saya memahami perbedaannya adalah bahwa tipe kepemilikan membatasi bentuk grafik objek , dan sistem substruktural (seperti logika pemisahan) mengelola izin untuk mengakses heap .
odododod
Sebaliknya, sistem substruktural seperti tipe linear dan logika pemisahan bergantung pada gagasan sumber daya . Setiap wilayah tumpukan adalah sumber daya, dan jika Anda tidak memiliki sumber daya, Anda tidak dapat menyentuhnya. Ini membuat kondisi bingkai sangat mudah: mereka selalu tahan.
Satu perbedaan dangkal (yang bagaimanapun membuat saya bingung untuk waktu yang lama) adalah bahwa tipe kepemilikan adalah tipe, dan logika pemisahan adalah logika program. Untungnya, sementara tipe kepemilikan lahir dalam pengaturan tipe-teoretis, orang-orang telah menerapkan ide-ide ini ke logika program juga.
Dua karya utama teori yang saya tahu tentang ini adalah karya Kassios tentang bingkai dinamis , yang dimanfaatkan oleh Bannerjee dan Naumann (dan siswa mereka) secara sistematis dalam karya mereka pada logika regional .
Seperti yang saya pahami, pendekatan dasar mereka adalah mengambil logika Hoare, dan kemudian:
- Tambahkan tipe baru variabel wilayah, yang Anda gunakan untuk mengaitkan objek dan wilayah.
- Tambahkan sistem efek ke logika Hoare untuk melacak daerah membaca dan menulis sentuhan.
- Gunakan efek untuk menentukan apakah suatu pernyataan menghargai frame atau tidak. Jika ya, Anda bisa membingkainya, dan jika tidak, Anda tidak bisa.
Setiap pendekatan memiliki kelebihan dan kekurangan.
Kepemilikan membuat properti bingkai jauh lebih mudah digunakan daripada dalam pendekatan substruktural, karena Anda harus menghitung kondisi bingkai.
Di sisi lain, algoritma pada DAG mendukung bukti induktif yang lebih cantik dalam gaya kepemilikan, karena Anda dapat memisahkan jejak dari struktur pointer. Dalam spec gaya pemisahan, hal yang alami adalah memberikan invarian induktif pada pohon spanning. Tetapi jika spanning tree yang dihitung algoritmanya berbeda dari yang dimiliki invarian Anda, Anda berada dalam dunia yang terluka.
Perasaan umum saya adalah pemisahan lebih mudah digunakan daripada kepemilikan, karena kita membutuhkan properti bingkai untuk hampir setiap perintah dalam program imperatif. (Dave Naumann berpendapat bahwa logika wilayah lebih dapat menerima otomatisasi, karena logika pernyataan tetap menjadi FOL tua yang biasa, dan agar Anda dapat menggunakan pembuktian teorema di luar rak dan pemecah SMT.)
EDIT: Saya baru saja menemukan makalah berikut oleh Matt Parkinson dan Alex Summers, Hubungan antara Logika Pemisahan dan Frame Dinamis Implisit , di mana mereka mengklaim memberikan logika yang menyatukan dua metode.