V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luojies
V2EX  ›  问与答

函数式编程和面向对象编程,运行性能有区别吗?

  •  
  •   luojies · 2018-12-04 19:33:51 +08:00 · 3930 次点击
    这是一个创建于 2184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码规模不好具体描述,大致就是处理一个相同的任务,假设编写水平一致,函数式编程和面向对象编程,运行性能有区别吗(主要考虑内存占用和输出结果的时间长短。)?
    11 条回复    2018-12-05 00:42:41 +08:00
    lhx2008
        1
    lhx2008  
       2018-12-04 19:38:54 +08:00 via Android
    java 的话,启动的时候,函数式变成会转成面向对象,所以。。
    kx5d62Jn1J9MjoXP
        2
    kx5d62Jn1J9MjoXP  
       2018-12-04 20:09:23 +08:00 via Android
    这是两个相互独立的概念
    几乎所有的高级语言都是面向对象的
    函数式编程对立的应该是过程式编程,从性能上来说函数式编程因为变量 immutable,中间变量会消耗更多内存空间
    testcaoy7
        3
    testcaoy7  
       2018-12-04 20:31:53 +08:00
    我只知道纯粹的函数式编程语言编出来的程勋都特稳定……以前在哪里看到有人说 Haskell 编出来的程序跑个几百年不当机很正常……
    Kirscheis
        4
    Kirscheis  
       2018-12-04 20:44:35 +08:00
    现在的计算机并不是对函数式优化的。早年的 lisp 机器上函数式会快些,现在应该差不多吧
    nathanw
        5
    nathanw  
       2018-12-04 22:36:44 +08:00 via iPhone
    大部分主流语言都不是纯函数式的,所以一些 RxJs,RxJava 等开源库会比原来更占用内存,更浪费电。个别语言内置的高阶函数可能会有优化,比如 swift 的 map 效率比 for 快很多。
    abcbuzhiming
        6
    abcbuzhiming  
       2018-12-04 22:37:46 +08:00   ❤️ 2
    @testcaoy7 纯粹的函数式编程有个特性是变量不可变,因此它没有状态,没有状态的系统是极其稳定的,绝对不会出现诸如你把我的数据覆盖了我把你数据回收了这样的稀奇问题。而且这种模型很容易实现幂等,绝大部分跑着跑着崩了的程序,根源就在于不幂等
    700388
        7
    700388  
       2018-12-04 22:52:53 +08:00
    面向对象编程 主要用于大量子功能的编程。 缺点是。很难写出完善的功能,因为程序员需要写的功能,可能现在不完善,而后期想维护就相当麻烦。 比如 vector。经过很久才写出这个通用的类。期间更是无数次重写。
    另一个缺点 ,大量变量占用,不管你用不用,class 的类变量开始就加载到内存中,即使不用也占。
    函数式。更容易胜任不确定的功能,比如:可以不用 vector,直接写个专门处理,某类数组的函数即可。 没必要上 class,更加节省内存。
    我目前用的就是函数式编程。class 都很少用了。维护起来麻烦,专门写个函数处理更加容易找到 bug。
    secondwtq
        8
    secondwtq  
       2018-12-04 22:57:40 +08:00
    和什么 FP 或者 OOP 都没关系,楼主应该了解下 http://wiki.c2.com/?SufficientlySmartCompiler
    dremy
        9
    dremy  
       2018-12-04 23:22:30 +08:00 via iPhone
    很多语言包括 nodejs 都没有实现尾递归优化,因此函数式编程的性能优势不会特别明显
    whoami9894
        10
    whoami9894  
       2018-12-05 00:33:06 +08:00 via Android
    纯递归相比于迭代可能性能要差点,无变量可能空间占用大点
    testcaoy7
        11
    testcaoy7  
       2018-12-05 00:42:41 +08:00
    @abcbuzhiming 明白了,谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3443 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:22 · PVG 19:22 · LAX 03:22 · JFK 06:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.