คำถามติดแท็ก stm

3
ทำไมบางภาษาที่ใช้งานจำเป็นต้องใช้หน่วยความจำในการทำธุรกรรมซอฟต์แวร์
ภาษาที่ใช้งานได้ตามคำจำกัดความไม่ควรรักษาตัวแปรสถานะ เหตุใด Haskell, Clojure และอื่น ๆ จึงมีการใช้งานซอฟต์แวร์ transactional memory (STM) มีความขัดแย้งระหว่างสองแนวทางหรือไม่?

1
ตัวอย่างความเป็นไปได้ของหน่วยความจำทรานแซคชันของซอฟต์แวร์
หนึ่งในข้อได้เปรียบที่สำคัญของหน่วยความจำทรานแซคชันของซอฟต์แวร์ที่ได้รับการกล่าวถึงเสมอคือความสามารถในการประกอบและโมดูล ชิ้นส่วนที่แตกต่างกันสามารถนำมารวมกันเพื่อผลิตส่วนประกอบที่มีขนาดใหญ่ขึ้น ในโปรแกรมล็อคตามนี้มักจะไม่เป็นกรณี ฉันกำลังมองหาตัวอย่างง่ายๆที่แสดงถึงสิ่งนี้ด้วยรหัสจริง ฉันต้องการตัวอย่างใน Clojure แต่ Haskell ก็ดีเหมือนกัน คะแนนโบนัสหากตัวอย่างแสดงรหัสล็อคที่ไม่สามารถเขียนได้ง่าย
11 haskell  clojure  stm 

1
การเข้าถึงประวัติของการอ้างอิงใน Clojure
เอกสารอ้างอิงการแสดง: ตัวเลือกสูงสุดประวัติศาสตร์และกล่าวว่า "refs สะสมประวัติศาสตร์แบบไดนามิกตามความจำเป็นเพื่อจัดการกับความต้องการอ่าน." ฉันเห็นว่ามีประวัติอยู่ที่ REPL แต่ฉันไม่เห็นวิธีการค้นหาค่าก่อนหน้าของการอ้างอิง: user=> (def the-world (ref "hello" :min-history 10)) #'user/the-world user=> (do (dosync (ref-set the-world "better")) @the-world) "better" user=> (let [exclamator (fn [x] (str x "!"))] (dosync (alter the-world exclamator) (alter the-world exclamator) (alter the-world exclamator)) @the-world) "better!!!" user=> (ref-history-count the-world) 2 สมมุติว่าโลกมีค่า "สวัสดี", "ดีกว่า" …
9 clojure  stm 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.