函式式程式設計immutable data是不是本質上效能就差點?

時間 2021-05-12 05:09:31

1樓:

個人認為是的,而且開發起來好像也更加麻煩,如果要更新值,那麼完了還要把原來的 replace 掉,甚至要把所有有關聯的地方都要做一次 update...意義是什麼?就為了乙個所謂的無隱患 copy ?

如果說的不對,還希望大家指出正確使用方式。

2樓:navegador

它不一定就得真正的去 malloc.

只要在使用層邏輯上是immutable 的就可以,忽略掉細節。

比如他可以只儲存「變化」,而不複製整個資料:

frame-v0: 500萬個元素

frame-v1: 第3個元素和第100個交換了frame-v2: ......

每個frame 在使用層都是不可變,但是其實底層並沒有全部重新malloc。當連續變化過多開銷超過完整malloc一次的時候,比如我錄影本身就記錄幾十次變化了,這時根據變化計算還原的開銷可能過大,這時候還不如重新malloc乙個,把舊的free. 可以把每次重新malloc的當做key-frame/init-frame.

後續的每次不可變都是乙個frame (僅記錄變化)。

這樣使用層完全可以當immutable 用。不可變資料主要優點是程式設計邏輯簡單,不易犯錯,不要太在意損失的那點效能。

3樓:兩極化

這個不用擔心,有很多演算法能夠實現高效能的不可變資料結構,並不一定要深拷貝。你可以了解一下相關的庫(比如immutable.js)或者實現了不可變資料的語言(比如clojure),看一下它們的實現方法。

不過效能上的損耗總是會有一點的,但是這一點損耗往往能夠在別的地方得到彌補,比如說多執行緒操作上,不可變資料不需要額外的加鎖和同步處理。

為什麼會有函式式程式設計?

Jason Hu 這個問題就是跟問 為什麼會有數學,數學是為了解決什麼問題 是乙個意思。基於lambda calculus的語言比基於TM的語言具有更數學含義。實際上,任一形式邏輯系統都對應一種函式式語言。相反,基於TM的語言自成一系,並無法繼承數學和邏輯系統裡的知識架構。另外,基於TM的程式語義也...

想要理解函式式程式設計的思想,最好用哪種函式式程式語言入門?

SML虐我千百遍,我待SML如初戀 上學期上了CMU 15150,差一點就拿C了好驚險。SML作為教學用還是很不錯的,因為理論方面比較完善。SML裡有個概念叫totality。有了這個totality可以證明很多theorem。這個是Haskell做不到的 Scheme Standard ML Ha...

為什麼說函式式程式設計和命令式程式設計等價, 它們怎樣相互轉化

時空是一體 本體 的統一的,函式式 命令式是一體 本體 的統一的。圖1圖2 上面兩個圖是計算機裡的物件空間和物件的運動軌跡,這兩種有限集合圖可能是同乙個圖。被cpu執行緒驅動的主體物件沿著紅線行走,前乙個圖是主體觀察到的左手邊的世界,後乙個圖是主體觀察到的自己右手邊的世界。一致的世界,所有地方都一致...