Week 1 Functional Language

1、什麼是函數式語言?程序員

 函數式語言一類程序設計語言,是一種非馮·諾伊曼式的程序設計語言。函數式語言主要成分是原始函數、定義函數和函數型。這種語言具備較強的組織數據結構的能力,能夠把某一數據結構(如數組)做爲單一值處理;能夠把函數做爲參數,其結果也可爲函數,這種定義的函數稱爲高階函數,程序就是函數,程序做用在結構型數據上,產生結構型結果,從根本上改變了馮·諾伊曼式語言的「逐詞」工做方式。編程

A:函數式語言的有兩大指導理念。(源自做者:iamsonormal2333
                                                               連接:https://www.jianshu.com/p/3a4219838ce0)數組

第一個理念:函數是頭等值。數據結構

函數是值,值能夠被隨意地提供給變量或函數等等,若是將函數看成值,就意味着函數能夠被當成參數被提供給其餘函數,也能夠在函數中看成返回值,甚至能夠在函數中定義函數。併發

而頭等這個概念則是意味着函數的使用是不受限制的。不妨把Scala中的函數與C/C++的函數指針作比較。雖然函數指針也能夠被賦值給變量,也能夠被看成參數傳遞給其餘函數,可是函數指針只能指向全局函數,也不能定義匿名函數字面量等等。故函數指針不能被看做函數式編程。編程語言

第二個理念是函數英國把輸入值映射成輸出值,而不是就地修改程序。ide

2、函數式語言的種類
       函數式語言有OCaml, Lisp、Haskell、Clean、F#、Meta Language函數式編程

3、爲何函數式語言會流行起來?
       函數式語言具備並行、單元測試、沒有額外做用、不修改狀態、引用透明、代碼部署熱等特色。
       因爲代碼簡單,加快了開發的速度;因爲函數式語言的並行特色,程序員在編程過程當中無需修改代碼程序就可併發執行,且運行期間程序不會產生死鎖;函數式編程語言的代碼十分簡單,加快了開發的速度。而且因爲在使用函數式編程語言時,程序員會大量使用到函數,從而減小了重複的代碼,於是程序比較短。其次,函數式編程語言更加接近咱們使用的天然語言,程序員在學習和使用它的時候更加快捷容易。函數式編程語言的自由度很高,十分接近天然語言寫出的代碼。另外,函數式編程語言的代碼管理更加方便。函數式編程不會對外部產生依賴,也不會修改外界的狀態。程序員只需把指定的參數給函數,相同的參數其返回的結果一定是相同的。最後,函數式編程語言的代碼支持代碼熱升級。函數

函數式編程的優點主要針對兩點:性能

1. 不可變性(immutability)

2. 並行操做性(parallelism)

這兩個概念其實與編程範式或編程語言無關。好比,Java也有不可變對象,只是須要經過本身編寫實現方法來實現;而並行編程,近日在TechED大會上頻頻露臉的Visual Studio 2010就以並行編程爲一大亮點。對於函數式編程在這兩個方面的優點,咱們有現成的論據能夠引用。先看看這篇Scala語言的簡介(這篇文章來自《Scala編程》一書,而這本書的聯合做者之一就是Scala創始人)。文中有這樣的一句話:「不可變數據結構是函數式語言的一塊基石。」而這篇《哪一種語言將統治多核時代 再看函數式語言特性》一文中,則十分詳細的描述了函數式語言天生的並行操做性:「函數式語言已經在簡化並行開發中證實了它的做用, 這得益於它既不用共享內存,也不會產生反作用(side effect)的函數。」能夠說,函數式編程在這兩個方面上的優點是毫無疑問的。

事實上,這兩個優點是同進同退的,由於良好的不可變性的使用才能確保不會成爲並行操做時性能的瓶頸。而這個優點的重要性,前面的答案中已經很明顯的給出來了:現在的CPU在增高頻率上已經遇到了瓶頸,多核CPU成爲趨勢,所以可以充分發揮多核性能的應用程序將愈來愈重要。

相關文章
相關標籤/搜索