39 | 综合实现(二):如何实现函数式编程?
宫文学
该思维导图由 AI 生成,仅供参考
你好,我是宫文学。
近些年,函数式编程正在复兴。除了一些纯函数式编程语言,比如 Lisp、Clojure、Erlang 等,众多的主流编程语言,如 Python、JavaScript、Go 甚至 Java,它们都有对函数式编程的支持。
你应该会发现,现在人们对于函数式编程的讨论有很多,比如争论函数式编程和面向对象编程到底哪个更强,在语言里提供混合的编程模式到底对不对等等。
这些论战一时半会儿很难停息。不过我们的这一讲,不会涉及这些有争议的话题,而是试图从编译技术的角度,来探讨如何支持函数式编程,包括如何让函数作为一等公民、如何针对函数式编程的特点做优化、如何处理不变性,等等。通过函数式编程这个综合的主题,我们也再一次看看,如何在实现一门语言时综合运用编译原理的各种知识点,同时在这个探究的过程中,也会加深你对函数式编程语言的理解。
好,我们先来简单了解一下函数式编程的特点。
函数式编程的特点
我想,你心里可能多多少少都会有一点疑问,为什么函数式编程开始变得流行了呢?为什么我在开篇的时候,说函数式编程正在“复兴”,而没有说正在兴起?为什么围绕函数式编程会有那么多的争论?
要回答这几个问题,我会建议你先去了解一点历史。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
函数式编程是一种正在复兴的编程范式,其核心思想是像数学那样使用函数和值,以实现简单、可预测的软件结构,并获得支持并发、更简洁的表达等优势。文章从编译技术的角度探讨了如何支持函数式编程,包括函数作为一等公民、针对函数式编程的特点做优化、处理不变性等方面。函数式编程的数学基础是Lambda演算,早在上世纪50年代就出现了函数式编程语言Lisp。函数式编程语言的优势在于能够像数学那样使用函数和变量,使软件结构简单、清晰,运行结果可预测,不容易出错。纯函数的概念是关键,它具有引用透明和无副作用的特点,带来计算时间、运行时替换等灵活性的优势。不变性是函数式编程的重要原则,使得程序更适合编写并发程序,避免了竞争情况和锁的机制。声明式的编程风格也是函数式编程的特点之一,要求计算机给出想要的结果,而不关心具体的处理步骤。文章还介绍了函数式编程语言的编译和实现,包括编译器前端工作等方面。函数在运行时中以不同方式表示,如在Python中,函数是一种对象,而在Scala和Java中,函数在JVM中会变成类。闭包是函数式编程的特殊情况,它引用了上级作用域中的自由变量。总的来说,函数式编程通过数学化的思维方式和特定的编程范式,为软件开发带来了新的思路和优势。文章还讨论了延迟求值、不变性对编译和运行时的影响,以及对递归函数的优化,展示了函数式编程特性的实现要点。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》,新⼈⾸单¥59
《编译原理实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- kkxue耗子叔的《Go编程模式:修饰器》https://time.geekbang.org/column/article/330456 文章中#多个修饰器的 Pipeline这个例子我觉得体现的非常充分。
作者回复: 谢谢推荐和分享:-) 你叫他耗子叔呀,那我也是大叔辈的:-)
2021-03-042 - ifelse酷2022-01-30
- kkxue装饰器应该就是使计算逻辑更简洁的例子吧2021-03-04
收起评论