ฉันได้รับการบอกในคำถามก่อนหน้านี้ว่าภาษาโปรแกรมที่ใช้งานได้ไม่เหมาะสมสำหรับระบบแบบไดนามิกเช่นเอนจิ้นฟิสิกส์ส่วนใหญ่เป็นเพราะมันมีราคาแพงในการกลายพันธุ์วัตถุ ข้อความนี้มีความสมจริงเพียงใดและทำไม
ฉันได้รับการบอกในคำถามก่อนหน้านี้ว่าภาษาโปรแกรมที่ใช้งานได้ไม่เหมาะสมสำหรับระบบแบบไดนามิกเช่นเอนจิ้นฟิสิกส์ส่วนใหญ่เป็นเพราะมันมีราคาแพงในการกลายพันธุ์วัตถุ ข้อความนี้มีความสมจริงเพียงใดและทำไม
คำตอบ:
ทั้ง Haskell และ Clojure อนุญาตการเปลี่ยนแปลงที่เกิดขึ้นจริงดังนั้นจึงไม่ใช่ปัญหาที่จะเริ่มต้นด้วย
นอกเหนือจากนั้นหากข้อมูล "ที่ไม่แน่นอน" ของคุณประกอบด้วยค่าระดับกลางที่ได้รับการอัปเดตเพิ่มขึ้นซึ่งเป็นส่วนหนึ่งของการคำนวณที่ใหญ่กว่าคุณอาจไม่จำเป็นต้องมีความผันแปรที่จะมีประสิทธิภาพ! ตัวอย่างเช่นมีการวิจัยอย่างต่อเนื่องใน Haskell เกี่ยวกับเทคนิคที่เรียกว่ากระแสฟิวชั่นโดยที่คอมไพเลอร์ฟิวส์ห่วงการประมวลผลผู้ผลิตข้อมูลและผู้บริโภคข้อมูลเพื่อกำจัดโครงสร้างข้อมูลกลางทั้งหมด
ปัญหาหลักของ Haskell ที่นี่คือความเกียจคร้าน - ในโปรแกรมที่มีตัวเลขจำนวนมากซึ่งคุณมีข้อมูลอินพุตจำนวนมากและข้อมูลเอาต์พุตจำนวนมากและทั้งหมดนี้มีความสำคัญความขี้เกียจทำให้คุณโปรดปรานน้อยมาก ไม่ใช่เพื่อบอกว่าคุณไม่สามารถเขียนโปรแกรมเช่นนั้นใน Haskell (คนทำจริง ๆ ) แต่มันไม่ได้เล่นกับจุดแข็งของภาษาและคุณต้องมีความเข้าใจที่ดีขึ้นของแบบจำลองการประเมินเพื่อให้ได้ประสิทธิภาพที่คุณต้องการ
ที่กล่าวว่าการบีบอัดจำนวนมากไม่ได้เล่นกับจุดแข็งของ JVM เช่นกัน โปรแกรมประเภทนั้นคือเหตุผลที่ฟอร์แทรนยังอยู่
ฉันไม่สามารถพูดคุยกับ Clojure ได้ แต่ฉันสามารถพูดได้ว่า Haskell มีแพ็คเกจ IO ที่ได้รับการปรับจูนอย่างมากซึ่งจะทำให้การกลายพันธุ์ทั้งหมดที่คุณต้องการ
ต่อไปนี้เป็นคำตอบของคำถามที่ฉันเขียนซึ่งมีรายละเอียดของคนที่พบมากที่สุด 3 คนและเกี่ยวกับประสิทธิภาพของพวกเขา: /programming/15439966/when-why-use-an-mvar-over-a-tvar/15440286 # 15440286
นอกจากนี้คุณยังสามารถดูที่นี่กราฟอย่างง่ายแสดงตัวชี้วัดประสิทธิภาพการทำงานของเว็บ Haskell เซิร์ฟเวอร์ที่เรียกว่า Warp ซึ่งเป็นแอพลิเคชันสูงเข้มข้น IO
มีความสับสนมากมายเกี่ยวกับเรื่องนี้เกี่ยวกับ Haskell ความจริงคือมันมีสิ่งอำนวยความสะดวก IO ที่ยอดเยี่ยมพร้อมแพ็คเกจมากมายสำหรับการแฮ็กสำหรับการใช้ IO ในหลากหลายวิธีที่แตกต่างกัน เหตุผลที่ผู้คนเข้าใจว่านี่ไม่ใช่กรณีนี้เพราะ Haskell มีความยาวมากในการแยก IO ออกจากทุกสิ่งทุกอย่าง แต่นั่นไม่มีผลต่อประสิทธิภาพการทำงาน
ทีนี้ถ้าจะพูดถึงลักษณะของประสิทธิภาพการทำงานเหตุผลที่ผู้คนยอมรับว่าการมีประสิทธิภาพต่ำนั้นเกิดจากการประเมินที่ขี้เกียจทำให้มันทำงานในลักษณะที่ไม่ได้ใช้งานง่ายเสมอไป อย่างไรก็ตามนี่คือบางสิ่งที่คุณต้องกังวลเกี่ยวกับการใช้งานที่น้อยลงเมื่อคุณเริ่มทำงานในบริบทของ IO ที่ทำการอัปเดตแบบทำลายล้างเช่นในระบบที่คุณอ้างถึง คนต่อไปมักจะพบว่าเมื่อพวกเขามีปัญหาด้านประสิทธิภาพการทำงานสิ่งอำนวยความสะดวกในการใช้อุปกรณ์และการระบุว่าทรัพยากรจะช่วยได้มากแค่ไหน
Monad ที่ควรค่าแก่การมองหาระบบอย่างที่คุณอธิบายก็คือST monadซึ่งมีไว้สำหรับการอัปเดตแบบทำลายล้างที่ทำโดยการโทรแบบ IO ที่เล็กมากซึ่งให้ประสิทธิภาพที่ยอดเยี่ยม
ขออภัยฉันไม่สามารถพูดคุยกับ Clojure หวังว่าคนอื่นจะให้รายละเอียดที่นั่น
Due to the functional programming style the computational load will be distributed over the available CPU cores which can dramatically increase processing speed in some cases