百科问答小站 logo
百科问答小站 font logo



为什么这两年函数式编程又火起来了? 第1页

  

user avatar   marisa.moe 网友的相关建议: 
      

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的:

PLT by steshaw

也有不少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一直都有影响各种各样的语言,不是近期才开始的。

对比:我们看下各种主流深度学习库

aymericdamien/TopDeepLearning

里面看下,有多少2010前的呢?

现在回到题主的问题

函数式和过程式之间的Holy War在上个世纪就以过程式编程的全面胜出告终

在这里我提出一个猜想:一个编程范式从有 一群人 一起 一个 语言,到这个编程范式被工业应用,要20年左右。

过程式:Algol 58 Algol 60

工业应用:Unix&C 80年代扩散出来,并且在7080年代过程式一直有争议:

dspace.mit.edu/bitstrea

过程调用很贵,不如goto

web.mit.edu/humor/Compu

过程式是什么鬼,数据结构又是什么鬼,跟机器一点都不接近,又有一股学术界的臭味,我呸

(大家快take note,以后遇“函数式编程学术范,接近机器的C才是最好的”,就知道拿什么东西压他们了)

OOP:

Smalltalk,1972,或者Simula,1967(不过没有一群人,不算)

Java,1995出来,Design Pattern书,1994,C++的确更早,1985就是Commercial Product,估计后几年就有工业应用,不过C++搭了C的顺风车,也有很多OO无关的东西,算半个outlier

而跟过程式被吐槽很学术很难懂一样,OO也这样被吐槽了(C++他爹是PHD)-这简直是毅种循环,新的编程范式都是我不懂的玄学,旧的编程范式则是再正常不过的东西了(尽管诞生的时候一样被看成玄学)

stroustrup.com/hopl-alm

函数式编程: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都对函数式编程提供专门语法支持

上面已经论述过了。


user avatar   shi-tian-shu-11 网友的相关建议: 
      

根本的原因是摩尔定律不适用。

cpu的性能提升将体现在核数增加,这样并行的程序运行速度会越来越快。并行的程序的写法就是找出不能并行的地方,其他地方都尽量并行。

如果要这样写,最需要避免的事情就是赋值。函数式编程的本质就是,规避掉“赋值”。


user avatar   david-dong-20 网友的相关建议: 
      

函数式本来就很适合很多互联网领域里的高并发的场景啊,函数式主要就是满足Web里的一些需求啊。


user avatar   levelpp_edu 网友的相关建议: 
      

女王:求求题主放过我,我可不敢有什么政绩。。。




  

相关话题

  觉得 SQL 太难用于是自己编了个类 SQL 语言,不知道有没有人想过类似的事情? 
  命令式语言中递归的理论基础? 
  C# 如何在调用控件时做到 Thread-safe(线程安全)? 
  C++ 有多难? 
  有不少人鼓吹中文编程,这些人都是骗子吧? 
  上网时,为什么感觉现代人除了我全都很懂编程或计算机? 
  在C++中,“?:”这个符号叫什么名字? 
  F#内的函数怎样和C#的Action互相转换? 
  Java设计出checked exception有必要吗? 
  汉语编程只需要学习几十个汉字就可以编程了,外国人为什么不能汉语编程呢? 

前一个讨论
如何看待知乎关闭的违规提问中封建迷信类提问多达万个,数量远超其它类型?
下一个讨论
公务员日后会面临大量裁员吗?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利