当前位置:首页 > 科技  > 软件

探索函数式编程范式的力量

来源: 责编: 时间:2024-04-02 17:19:33 250观看
导读译者 | 李睿审校 | 重楼 与以状态更改和副作用为中心的命令式和面向对象编程相比,函数式编程范式提供了一种根本不同的方法,通过在不可变数据上组合独立的纯数学函数来构建软件。函数式编程的概念源于Lambda演算,强调修

译者 | 李睿uA328资讯网——每日最新资讯28at.com

审校 | 重楼 uA328资讯网——每日最新资讯28at.com

与以状态更改和副作用为中心的命令式和面向对象编程相比,函数式编程范式提供了一种根本不同的方法,通过在不可变数据上组合独立的纯数学函数来构建软件。函数式编程的概念源于Lambda演算,强调修饰性而不是突变性uA328资讯网——每日最新资讯28at.com

uA328资讯网——每日最新资讯28at.com

近年来,受到多核计算系统和高性能声明性架构支持的大规模并发性需求的推动,函数式编程获得了越来越多的主流认可。本文深入探讨了开发人员对函数式思维日益增长的兴趣背后的基本动机,考察了Facebook、Netflix和Airbnb等全球领先企业将函数式语言纳入关键管道的使用原则和吸引力,以及通过不变性释放固有并发性等好处,支持高阶函数和柯里化(Currying)等数学抽象、迭代循环的递归、模式匹配、务实的采用权衡(例如再培训成本和控制流转移),以及函数式编程在复杂性使现有范例紧张的情况下仍能更广泛渗透的原因。uA328资讯网——每日最新资讯28at.com

  • 函数式编程:函数式编程范式以建模计算为中心,作为对纯数学函数的严格评估,没有可变状态或可观察到的副作用。与命令式编程和面向对象编程不同,函数式编程将解决方案构建为确定性数据流管道,通过无状态函数将不可变的输入处理为新的输出。
  • 在评估过程中不会修改可变状态,所有更改仅限于本地调用帧内的堆栈分配内存,而不是外部对象。这种独立的确定性通过消除与副作用相关的级联外部状态依赖,极大地简化了调试、优化和并行化。此外,内置的数学语言原语(例如集合、列表、元组、映射和递归)提供了丰富的可组合抽象,非常适合当今的数据转换需求。
  • 与语言不同的一等(First-Class)函数:在函数只作用于数据的情况下,函数编程将函数本身视为一等值,从而实现更高阶的功能。函数可以作为参数传递给其他函数,作为函数调用的结果返回,赋值给变量,或存储在列表和字典等数据结构中。这促进了无参(point-free)、可重用的模块化架构在这种架构中,通过将小型无状态纯函数绑定到声明性管道中来构建程序,每个函数都掩盖了潜在的复杂性。
  • 递归迭代函数式语言:明确支持递归函数调用自身,而不是传统的迭代循环结构。递归允许通过数学抽象优雅地表达某些算法,例如树遍历。尾部调用优化特性确保递归不会累积不断增长的堆栈开销。此外,与有副作用的有状态循环相比,无状态递归对不可变结构的确定性简化了测试和可调试性。

为什么领先的企业采用函数式编程通过隔离外部状态依赖关系的不变性简化并发性?

函数式编程本质上支持多核基础设施上的简单并发性,而不会出现线程间共享可变状态的复杂性,也不需要显式锁定和同步。通过设计,即使开发人员不了解低级的线程语义不变性使逻辑在本质上可以跨内核并行化。这表现为高度并行域的协调复杂性的大幅降低。uA328资讯网——每日最新资讯28at.com

  • 增强的可靠性数学:没有可观察到的副作用的基础导致完全确定的代码执行,消除了所有类别的与状态相关的潜在错误。与共享可变状态的隔离可以通过消除对外部因素的依赖来实现详尽的测试。这些可靠性优势在金融、航空航天和医疗保健等风险敏感领域得到充分利用,在这些领域,缺陷率直接转化为成本。
  • 改进的模块化严格性:函数内的状态封装通过消除组件之间的耦合来促进重用,从而允许跨不同用例的链接。通过支持来自无状态组合子的可组合管道,高阶功能进一步增加了收益。MapReduce范式大规模地应用了这一点。微服务架构同样利用服务之间的不可变无状态来实现松耦合。
  • 数学上的可访问抽象:与改变索引和计数器的有状态命令循环相比,映射、折叠、过滤和压缩等面向对象的数据转换提供了集合的声明性操作。通过递归调用表示算法在认知上也比充满副作用的迭代更容易。这些将抽象推向问题空间,减少了与状态管理相关的偶然复杂性。
  • 选择专业的函数式语言:虽然函数式编程的思想不断渗透到主流语言中,但专门的语言通过构建其核心的函数能力而脱颖而出。其突出的例子包括:

Haskell静态类型非严格纯函数式语言以不变性为中心,支持惰性评估和高级类型系统,提供简洁、高性能的抽象,并广泛用于研究、量化金融,密码学和分析。uA328资讯网——每日最新资讯28at.com

Scala在Java虚拟机(JVM)上混合面向对象和函数式风格

独特地支持可更新的变量和不可变的变量,使混合命令式和功能模型迎合实用主义和功能纯度。在数据工程和分布式系统中被广泛采用。uA328资讯网——每日最新资讯28at.com

1.F#

F#是一种强类型多范式.NET语言,在支持.NET运行时的同时应用函数式编程实践。与C#的互操作性使旨在利用函数优势的程序人员可以采用它。在科学、分析、机器学习和量子计算编程方面获得突出地位。uA328资讯网——每日最新资讯28at.com

2.Elm

Elm是专为前端Web开发设计的纯函数式语言,专注于基于响应式浏览器的用户界面的不变性。与JavaScript的互操作性使集成易于访问,从而促进了采用。Elm演示了在数据处理后端之外的实际用户界面(UI)编程的功能适用性。uA328资讯网——每日最新资讯28at.com

关键概念和技术

不变性函数式编程的基础是不变性:uA328资讯网——每日最新资讯28at.com

  • 没有变量允许可变更新。结构突变克隆并返回修改后的副本,同时保持原始输入不变以隔离副作用。这使得状态管理方法发生了变化,但允许对跨功能的数据流进行本地推理。
  • 高阶函数支持函数作为一等参数和返回值,有助于实现强大的抽象例如映射、折叠、柯里化(Currying)和组合。这使得通过一系列转换步骤将处理数据的管道链接在一起成为可能。Lambda抽象进一步简化了内联函数定义,而不需要先绑定到名称。

像尾部调用优化这样的核心递归技术确保递归算法不会累积不断增长的堆栈,从而消除了传统迭代循环结构的开销。递归普遍适用于线性和非线性数据结构,例如支持声明式遍历分支的树。记忆法通过保留预先计算的重叠子问题的中间结果进一步优化递归。uA328资讯网——每日最新资讯28at.com

  • 模式匹配提供了针对值和类型的变量的简明条件赋值,同时解构了跨案例的复杂结构。这消除了其他语言中切换大小写样式条件的冗长性。不相交的穷举模式匹配案例也通知类型系统对完整性进行推理。
  • 柯里化(Currying)允许分解函数,并将多个参数放入函数链中,每个参数通过部分应用程序接受一个参数。这通过更小的可重用单元扩展了可组合性。嵌套和作用域控制规则决定了在柯里化边界间流动的参数和返回类型。
  • 应用和单子接口。应用程序函数和单子提供了标准的接口结构,用于将类似场景传递的配置和状态封装到纯函数代码中,以最大限度地减少冗长性。这些抽象促进了来自不同开发人员的互操作库,从而通过共享接口构建复杂的应用程序。突出的实现抽象地管理异步场景、并发进程、错误处理和缓冲IO管道。
  • 务实的采用权衡,在通过可组合的并发性和函数纯度提高生产力的同时,还围绕内存利用率进行权衡因为在链接调用时,临时对象被快速分配,而不是在适当的地方改变状态。控制流也从显式的有状态命令式风格转变为不可变流上的管道流。因此,采用者将函数功能逐渐构建到现有的命令式和面向对象的代码库中。支持混合模式的语言允许函数式和命令式技术的平衡混合,从而简化了这种迁移路径。最终,在采用过程中,问题分析和架构分解范式转换带来了比语法本身更高的成本。但是数学上的可靠性和并发性的提高已经使得函数能力渗透到不同的语言中,并成为Apache Spark、React和Tensorflow等框架的基础,为当今的关键大型应用程序提供服务。

结论

函数式编程应用以组合传递不可变数据的纯无状态函数为中心的数学基础,以构建具有固有并发性支持的无副作用程序。由于复杂性在多核和分布式系统的扩散中使以前的开发范式变得紧张,函数技术提供了经过验证的、正式可验证的关于透明性、健壮性和利用纯粹原则的维度可扩展性的保证。专用的函数式语言推动了前沿领域的创新,而主流的采用逐渐建立了对限制副作用和可变性的关键技术的熟悉,为业务逻辑解构提供了更安全的封装。由于不变性和基于复制的架构与分布式一致性需求很好地结合在一起,随着复杂性使全球数据密集型和异构技术环境中的现有方法面临问题和压力,函数式编程仍有望成为未来具有深远影响的编程范式,从而实现更广泛的渗透。uA328资讯网——每日最新资讯28at.com

原文标题:Exploring the Power of the Functional Programming Paradigm,作者:Igboanugo David UgochukwuuA328资讯网——每日最新资讯28at.com


uA328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-80847-0.html探索函数式编程范式的力量

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 基于Spring Boot 2 使用WebSocket发送图片

下一篇: 浅谈G行科技客服发展之路

标签:
  • 热门焦点
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top