Salah satu keunggulan utama dari memori transaksional perangkat lunak yang selalu disebutkan adalah kompabilitas dan modularitas. Fragmen yang berbeda dapat digabungkan untuk menghasilkan komponen yang lebih besar. Dalam program berbasis kunci, ini sering tidak terjadi.
Saya mencari contoh sederhana yang menggambarkan ini dengan kode aktual. Saya lebih suka contoh di Clojure, tetapi Haskell juga baik-baik saja. Poin bonus jika contoh ini juga memperlihatkan beberapa kode berbasis kunci yang tidak dapat dibuat dengan mudah.
Jawaban:
Misalkan Anda memiliki beberapa rekening bank:
Dan fungsi "transfer" atom:
Yang berfungsi sebagai berikut:
Anda kemudian dapat dengan mudah menyusun fungsi transfer untuk membuat transaksi tingkat yang lebih tinggi, misalnya mentransfer dari beberapa akun:
Perhatikan bahwa semua transfer berganda terjadi dalam satu transaksi tunggal, yaitu mungkin untuk "menyusun" transaksi yang lebih kecil.
Untuk melakukan ini dengan kunci akan menjadi rumit dengan sangat cepat: dengan asumsi akun perlu dikunci secara individual maka Anda perlu melakukan sesuatu seperti membuat protokol pada pesanan akuisisi kunci untuk menghindari kebuntuan. Sangat mudah untuk membuat kesalahan yang sulit dideteksi. STM menyelamatkan Anda dari semua rasa sakit ini.
sumber