TLDR:这只是你的错觉。
函数式编程一直都是慢慢的攻城掠地 。无论是从Search Trend,从学术界,从主流语言应用程度,都没有‘突然之间就火起来’。突然火起来的,是最近人人皆知的深度学习(我会用深度学习做对比组,指出真正火起来是像什么样的),不是函数式编程。
0:Search Trend
四图流。由于Haskell把Scheme的Search Trend压扁了(而Scala又压HS),分开放。
有没有急速上升?没看出来。
这才叫急速上升嘛。
1:学术界研究
我会尽力给出跟FP有关的每十年的大发展。
192x: Combinatory logic
193x: Untyped Lambda Calculus
194x: Simply Typed Lambda Calculus
195x: Lisp
196x: APL, Denotational Semantic
197x: Intuitionistic Type Theory, ML
198x: Coq
199x: Haskell, Monad
200x: Hott? (现在说这些实在太早)
201x: ? (马后炮很容易,现在让我评选这个有点难)
对比,神经网络:由于我对早期发展没理解,我就不放同样的对比了。不过IMO,基础发展也挺平缓的-这样我们能看另一组数据:
terryum/awesome-deep-learning-papers
songrotek/Deep-Learning-Papers-Reading-Roadmap
这是Deep Learning的两组数据,可以自己看下有多少是2016的
caiorss/Functional-Programming
由于数据量实在太小,放上PLT的:
也有不少Recent Work,但是你找不到DL内边一样的“2016大爆发”。
当然,这些数据很仁者见仁,可以很容易Engineer出想要的结论,所以我鼓励你去自己写下认为FP/ANN中很重要的东西/著名的书,然后对比下时间。
2:主流语言应用程度
这是TIOBE前20。
题主所说的C++&Java,的确是近10年加入Lambda的。
但是,
0:在C++ Java中都是语法糖等级的东西,换言之不加入一样也有高阶函数。
1:Python, C#, Perl, JS, VB, 都是2010前加入Lambda的(Dart, Swift的确有2010后Lambda,不过他们俩就是2010后出的语言)
2:如果说其他的,C#, Python的List Comprehension也是2010前的,Java Generic则是1998由Philip Walder(Haskell界大佬), Martin Odersky(Scala界大佬)搞出来的
3:如果要说更远的影响力,Smalltalk都被Lisp严重影响,然后Smalltalk再影响现在一大推OO语言。
换句话说,FP一直都有影响各种各样的语言,不是近期才开始的。
对比:我们看下各种主流深度学习库
里面看下,有多少2010前的呢?
现在回到题主的问题
函数式和过程式之间的Holy War在上个世纪就以过程式编程的全面胜出告终
在这里我提出一个猜想:一个编程范式从有 一群人 一起 写 一个 语言,到这个编程范式被工业应用,要20年左右。
过程式:Algol 58 Algol 60
工业应用:Unix&C 80年代扩散出来,并且在7080年代过程式一直有争议:
https:// dspace.mit.edu/bitstrea m/handle/1721.1/5753/AIM-443.pdf
过程调用很贵,不如goto
http:// web.mit.edu/humor/Compu ters/real.programmers
过程式是什么鬼,数据结构又是什么鬼,跟机器一点都不接近,又有一股学术界的臭味,我呸
(大家快take note,以后遇“函数式编程学术范,接近机器的C才是最好的”,就知道拿什么东西压他们了)
OOP:
Smalltalk,1972,或者Simula,1967(不过没有一群人,不算)
Java,1995出来,Design Pattern书,1994,C++的确更早,1985就是Commercial Product,估计后几年就有工业应用,不过C++搭了C的顺风车,也有很多OO无关的东西,算半个outlier
而跟过程式被吐槽很学术很难懂一样,OO也这样被吐槽了(C++他爹是PHD)-这简直是毅种循环,新的编程范式都是我不懂的玄学,旧的编程范式则是再正常不过的东西了(尽管诞生的时候一样被看成玄学)
http://www. stroustrup.com/hopl-alm ost-final.pdf
函数式编程:Miranda 1985,不过是闭源商业化的,SML HS都是1990,ML/Scheme的确比较早,不过早期IMO(没找到数据)都没很多人。
这样看来,2010左右主流PL融入函数式编程特性/函数式编程变主流只是很正常的历史进程。
到21世纪初,MIT都不再用Scheme作为编程入门课
是他们俩教了20年教不动了= =
我们从另一个角度想,教很多FP/Intro是FP的有CMU, Texas Austin, University of Pennsylvania, University of Edinburgh, Imperial College,MIT一个Intro掉了,属于来来去去,正常不过了
C++11、Java8都对函数式编程提供专门语法支持
上面已经论述过了。
根本的原因是摩尔定律不适用。
cpu的性能提升将体现在核数增加,这样并行的程序运行速度会越来越快。并行的程序的写法就是找出不能并行的地方,其他地方都尽量并行。
如果要这样写,最需要避免的事情就是赋值。函数式编程的本质就是,规避掉“赋值”。
函数式本来就很适合很多互联网领域里的高并发的场景啊,函数式主要就是满足Web里的一些需求啊。
女王:求求题主放过我,我可不敢有什么政绩。。。