函數式編程用來處理圖形有哪些優劣?

看到 Elm 編程語言了, 用近似 Haskell 的語法輕鬆寫網頁

http://elm-lang.org/Examples.elm

然後翻到 Conal Elliott 大神說愛拿 函數式編程做圖形

http://www.usenix.org/publications/library/proceedings/dsl97/full_papers/elliott/elliott_html/elliott.html

http://conal.net/fran/tutorial.htm

(遇上資料了我卻看不懂, 無視我吧...)


這個我個人經常用的2D diagram繪製庫

圖形示例:http://projects.haskell.org/diagrams/gallery.html

理論文章: Monoids: Theme and Variations

該庫的設計很好地實踐了題主提到的Conal Elliott的主要觀點:Denotational design with type class morphisms

該庫地核心非常優雅,功能也很強大,上面例子每個圖形點下都可以看到代碼。上面鏈接示例里畫的都是幾何分形。其實一般的2D統計圖形也可以自己造輪子,很容易在其基礎上實現,比起ggplot有更靈活的定製性,你可以精確控制圖形上每一個元素的屬性,想怎麼整就怎麼整,比如下面這種:

一般來講,一個圖形庫很難做到

1. 性能

2. 功能

3. 介面、代碼(是否簡單、易用、優雅)

以上這三者,只能3取其2,cairo這種底層2D庫,要的是性能與功能,上面那個diagrams庫,取的是功能與介面。函數式語言做圖形,強項在2和3。Haskell社區里有通過綁定opengl和opencv做3D與可視化計算(CV)的,我覺得看中的也是容易做到優雅、可維護的代碼。需要性能的時候通過FFI去調raw c API。


Pure FP由於工作在受限的RAM(Random Access Machine)機模型上,因此在很多場合很難達到不受限的imperative演算法能做到的演算法複雜度

即使Pure FP以後能做到自動並行化(目前還做不到),那也不過是提高常數級的性能(CPU的物理線程數是常數),而且還受制於阿姆達爾定律

所以總體來說,Pure FP並不適合Algorithm Critical的場合


推薦閱讀:

前端程序員需不需要學linux,vim?
makefile 和程序源文件中的 #include 宏到底什麼關係?
如何將人工智慧技術與有機化學合成結合?人工智慧將對有機化學發展產生怎樣的衝擊?
Python 編程,應該養成哪些好的習慣?
為什麼玩C++的都喜歡調用別人的庫?

TAG:編程 | 函數式編程 | Haskell | 圖形 |