2014年7月23日 星期三

ReactiveCocoa

ReactiveCocoa (RAC) is an Objective-C framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values.
If you're already familiar with functional reactive programming or know the basic premise of ReactiveCocoa, check out the Documentation folder for a framework overview and more in-depth information about how it all works in practice.
What is Reactive?
- 自動對外部環境的變化作出反應的系統,我們稱之為(Reactive System)
- 典型的外部環境變化包括外部輸入信號的變化、事件的發生,而且系統的反應通常是即時的。
- 它不旦能反應外部環境的變化,還能將自已的內部狀態通過某種方式反饋給外部觀察者。

為什麼要學Functional Programming?
  • 單核時脈無法提升了,多核架構是現在進行式

Multithreading Program Demo
- Thread-safe(∣)
  • 每個存取到的共享變數,都要Synchronize
- Thread-safe(Ⅱ)
  • 操作必須注意Atomic
- Thread-safe(Ⅲ)
  • 要有策略可以避免Deadlock
每個你用到的Library都要遵循Ⅰ~Ⅲ
Synchronized 太多了,都是blocking threads,程式同時間只有一個thread在跑。
沒有Mutable變數,那就不需要擔心Synchronize問題啦!!
Functional Programing:avoids state and mutable data.
小結
  • 多核時代,需要能Concurrency的程式
  • 用程序性的OO語言寫Concurrency很難
  • Functional Programing 讓Concurrency Programming變簡單

Function Programing的特色
 1.Avoiding Mutable State
  • 在FP語言中,變數指派之後就是immutable
 2.Recursion
 3.Higher-Order Functions
  • 可以把function做參數傳遞到function裡
  •  function可以當做function回傳的結果
 4.Function Composition(拆解和組合)
 5.Lazy Evaluation
  •   直到真的需要才執行,增加效率,減少沒有用到的計算
  •   可以簡潔地表達無窮list
 6.Pattern Matching
  •   模式比對(比對兩個 expression 是否可以相同)
  •   用途(控制結構,指派變數)
總結
  • 強調 immutability,避免Function的Side-effects
  • 雖然還是無法完全避免side-effects(例如IO),但是FP Style降低了Mutable State,增加程式碼正確性和Concurrency能力。
簡單說明FRP
  • 以 a = b + c為例
  • 通常情況下在執行a = b + c的值的時候b和c當時是什麼值。 a就是當時的b+c。然後後來不管b和c怎麼變化,a都不會改變。
  • 但是在Execl中設置a格子=b格子+c格子的值。 a的值就會隨著b和c值的改變而改變。然後我還可以搞的高級一點f = a + d。 f格子的值也會隨著b、c、d的值而改變。這就是使用Functional Reactive Programming以後會發生的情況。
  • Reactive的特性使得可以隨時反應變化。 Functional的特性使得他們可以串起來