函式式程式設計是否適用於超大型專案?

時間 2021-05-06 10:51:44

1樓:

不適用。只有乙個原因:通樣的價錢,招不到那麼多可以寫FP的人。

比如下面的一些但不限於這些要求:

熟練使用higher kinded types和higher rank polymorphism進行設計,

熟練寫monad,monad transformer,熟練運用各種type class進行設計

熟練運用dependent type在實際設計中(語言支援的話)不是map,filter一下就會FP了。不是用個Option就會FP了。純FP的話,保守估計,卡掉8成程式設計師了

另外,FP和OOP無關。純FP一樣做專案,只是要先廢掉腦袋裡那套OOP的思想。這要廢掉武功重練,顯然難度太大了。

2樓:FRANK

可以吧。ghc用的Haskell,Coq用的OCaml。rustc一開始也是OCaml。Spark用Scala,storm用Clojure

3樓:馬卍

其實這個問題不應該理解成是使用完全只有函式式程式設計,而是應該在同時使用物件導向程式設計和函式式程式設計才對,如果不能使用物件導向程式設計幾乎不可能開發大型專案,這個問題應該用來抨擊不能使用函式式程式設計的那些程式語言的吧!

大型專案一定是函式式和物件導向式同時使用的,只是哪個用的多就不一定了

4樓:wangyongyue

FP 和 OOP 是兩個針對不同問題的解決方案。FP 的概念更適合模組化開發,是緊耦合的。OOP提出的重要概念是復用,不同的思想模式,適合不同的開發內容。

沒有誰適不適合大型專案,應該是專案中如何使用FP,OOP。

5樓:楊天航

不適合。

超大型專案就需要超多的人。

所以就需要一門高效且被許多人掌握的語言。函式式程式設計不具備上述特徵。

本人使用過erlang構建訊息系統。這種特定領域的程式設計,不能算超大。

6樓:

首先,FP和OO不矛盾,兩個維度的事情。

而且FP跟IP也沒必要只用一種正規化,做好架構/模組的邊界設計,哪個合適用哪個。

隨手推薦乙個gist

functional core, imperative shell.md

7樓:在河之洲

大型專案,架構方面,採用oop,發揮oop的優勢。具體功能實現中,針對集合的功能,可以考慮fp。

ecs架構中,system可以考慮使用fp。

oop和fp可以結合使用。

8樓:David Gao

超大型專案的範圍什麼真說不好。

OO和FP並不對立,並且很多FP寫的專案都默默掙錢中,不想引入過多競爭者。

利益相關:Fullstack, CRUD BOY。

9樓:林建入

百萬行以上的 Erlang 程式算不算大型?服務上億人的 Erlang 程式算不算大型?

qr.ae/TWr5E1

其他系統也有很多。當然如果你覺得 Erlang 不算函式式程式設計……

10樓:棒各

如果一部分FP廚不覺得自己已經裝備了銀彈,那其實是可以的。

畢竟如果專案大了,很多細節問題在架構層面上看的時候是被抹平的。針對領域建模不是基於正規化建模。

細節方面未必是FP廚的長處,不展開。

11樓:馮東

軟體領域中,甚至所有領域中,都有一種 A vs. B 的虛假二分法。但是很多時候 A 和 B 並不是互斥的分類關係。

而是 A 真包含 B。比如最近很火的 monolithic kernel vs. micro-kernel,其實 monolithic kernel 是一種真包含 micro-kernel 的架構,只要你寫 driver 的時候自己把 driver 分成兩部分,monolithic kernel 就會成為實質的 micro-kernel。

另乙個例子是 Qt vs. Flutter 這樣的 native control 還是 custom-rendered UI 來做跨平台的問題。其實 Qt 裡完全可以搞乙個 custom view 在區域性進行 custom-render。

這樣分析的關鍵在於,當 A 包含 B 的時候,B 有再多的優點也不會取代 A。因為 A 總可以在區域性變化為 B。反之則不行。

這種單向包含關係的技術,無所謂勝負,但是大框架永遠是 A。

區域性採用函式式開發並不會干擾整體的 paradigm。

另一方面,大型程式的設計屬於從 ADT(abstract data type)到典型 OOP(語言支援 implementation-inheritance)的乙個譜系(spectrum)。我認為函式式部分的包含這個 spectrum 的某些部分,並且無法替代這個 spectrum 所有的部分。所以談「替代」在某些情況下不適用,某些情況下不可能。

12樓:Gavin

超大型專案的問題是組織和管理。其實本質上和具體的程式語言關係不大。Linux核心是用c語言開發的,c語言不是物件導向的語言,而且是出了名的難組織,不是一樣完成了,而且很出色。

所以我覺得只要管理和組織的好,函式式程式語言一樣勝任超複雜的大規模專案。

13樓:望山

不要說大專案了,你用函式式語言寫個vim試試?

下面有人說emacs,是不是有點誤會?emacs本身並不是lisp語言寫成的,只是它裡面嵌入了lisp直譯器用來提供指令碼功能。指令碼跟大專案沒啥關係吧?

MacBook Air 是否適用於辦公?

Change 蘋果公司對Macbook Air的定位就是 攜帶 續航,滿足日常的辦公娛樂需求。2020款的Macbook Air實測續航10小時左右。重約1.29kg,不到3斤。題目入手Macbook Air 沒問題的。我本人現在用的就是2020款Macbook Air,沒遇到因軟體不能用而影響工作...

「珍愛生命」是否適用於蚊蟲?

總覺得不該殺死他們,畢竟都是生命,每次都盡可能趕走而不是拍死。但有時候把我實在惹惱了就會大開殺戒一邊默念 弄死你們!叫你們咬我,該!然後發洩完再默念阿彌陀佛。也沒有啥負罪感。本就沒有什麼是否適用,尊重生命存有滿滿善意和無情滅殺在對待蚊蟲的問題上和諧統一。 韓東燃 珍愛生命 用於蚊蟲是有點極端了。愛 ...

沉沒成本理論是否適用於相親?

AssAssIn 關鍵在於不同人對於婚姻的理解是不同的,有些人覺得婚姻是愛情的歸宿,有些人又只是為了結婚而結婚,既然不同人的追求不同,就不存在單一理論是否適用的問題。回到題幹,本人是特別排斥 相親 這個行為的。因為相親把男女結識的目的單一化了,而男女間的交往,並不應該只有結婚這一種選擇。異性之間能走...