Saya telah tertarik pada jenis keunikan sebagai alternatif untuk monad dalam bahasa fungsional murni untuk beberapa waktu; Sayangnya, ini adalah semacam area esoterik penelitian CS dan sumber daya online tentang pemrograman dengan tipe keunikan sedikit dan jarang.
Sudah jelas bagaimana tipe keunikan dapat digunakan untuk menerapkan struktur data stateful seperti referensi ("kotak") dan array, meskipun itu lolos dari saya bagaimana Anda dapat menerapkan struktur data stateful umum lainnya dengan mereka.
Apakah mungkin untuk menerapkan, misalnya, penguncian dengan tipe unik? Dapatkah tipe keunikan digunakan untuk berbagi data yang dapat diubah di seluruh utas? Apakah mungkin untuk menggunakan tipe unik untuk membangun primitif sinkronisasi (seperti mutex), atau apakah pesan perlu?
sumber
Jawaban:
Saya mengikuti tautan yang diberikan Robert Harvey dan saya membaca cepat. Saya tidak bisa mengatakan bahwa saya memahami segalanya atau bahwa saya memiliki tingkat kepercayaan yang tinggi bahwa saya benar - benar memahami apa yang saya pikir saya mengerti, tetapi tampaknya bagi saya bahwa seluruh poin keunikan eksternal dan ketidakberubahan referensi adalah tidak perlu mengunci.
Pendekatan modern untuk multithreading mencoba menghindari penguncian karena hanya programmer yang sangat berpengalaman yang dapat menulis kode yang menggunakan penguncian, dan bahkan kode mereka sangat rentan terhadap bug. Jika Anda menambahkan bahwa fakta bahwa kode penguncian sebenarnya tidak dapat dipecahkan, harus jelas bahwa itu adalah cara yang sangat tidak diinginkan dalam melakukan sesuatu, dan solusi apa pun yang bertujuan untuk membebaskan kita dari penguncian menjanjikan untuk sedikitnya.
Cara kami menghindari penguncian adalah dengan pengiriman pesan, yang mengharuskan pesan harus tidak berubah. Secara kasar, (sekilas,), referensi keabadian tampaknya merupakan teknik yang dapat membantu kami menjamin keabadian tanpa harus benar-benar membangun jenis yang tidak dapat diubah, dan keunikan eksternal tampaknya merupakan teknik yang dapat membantu kami merelaksasi persyaratan kekekalan yang ketat secara lokal.
Makalah itu tidak secara jelas menyatakannya, tetapi dari apa yang saya pahami, sekelompok objek yang unik secara eksternal aman karena entah bagaimana (sungguh, bagaimana? ) Dijamin bahwa hanya ada satu referensi luar ke dalam kumpulan objek tersebut, yang berarti bahwa sebuah utas yang menerima referensi semacam itu dapat memperlakukan objek yang dirujuk sebagai bisa berubah-ubah tanpa harus khawatir bahwa beberapa utas lain juga dapat memutasinya, karena tidak ada utas lain yang mungkin memiliki referensi lain. Saya ingin tahu bagaimana konstruksi teoretis seperti itu dapat diimplementasikan dan ditegakkan.
Sekali lagi, dari apa yang saya pahami, tipe unik eksternal dan referensi keabadian dimaksudkan untuk membuat kunci, mutex, dan sejenisnya tidak perlu. Pesan lewat tampaknya menjadi cara untuk pergi, dan itu bagus.
sumber