-
Programming language theory 编程语言理论-03-惰性求值 Lazy Evaluation
惰性求值
在编程语言理论中,惰性求值(英语:Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need),是计算机编程中的一个概念,目的是要最小化计算机要做的工作。
惰性计算的最重要的好处是它可以在空间复杂度上得到极大的优化,从而可以轻易构造一个无限大的数据类型。
惰性求值的相反是及早求值,这是一个大多数编程语言,如C语言,所使用的缺省计算方...
2020-06-05 09:42:59 |
Theory
-
Programming language theory 编程语言理论-03-及早求值(英语:Eager evaluation)又译热切求值,也被称为贪婪求值(Greedy evaluation)
及早求值
及早求值(英语:Eager evaluation)又译热切求值,也被称为贪婪求值(Greedy evaluation),是多数传统编程语言的求值策略。
在及早求值中,表达式在它被约束到变量的时候就立即求值。这在简单编程语言中作为低层策略是更有效率的,因为不需要建造和管理表示未求值的表达式的中介数据结构。
及早求值的优点在于节省内存和提高执行速度,比如下面的 Basic 代码:...
2020-06-05 09:42:59 |
Theory
-
Programming language theory 编程语言理论-02-求值策略 Evaluation strategy
求值策略
在计算机科学中,求值策略(英语:Evaluation strategy)是确定编程语言中表达式的求值的一组(通常确定性的)规则。
重点典型的位于函数或算子上——求值策略定义何时和以何种次序求值给函数的实际参数,什么时候把它们代换入函数,和代换以何种形式发生。
经常使用用来研究函数的形式系统λ演算来建模求值策略,这里它们通常叫做归约策略。
求值策略分为两大基本类,严格的和非严...
2020-06-05 09:42:59 |
Theory
-
Programming language theory 编程语言理论-01-overview 概览
编程语言理论
编程语言理论(英语:Programming language theory)是计算机科学的一个分支,研究编程语言的设计、实现、分析、描述和分类及其各自的特点。
它属于计算机科学,既依赖又影响着数学、软件工程、语言学,甚至认知科学。
历史
从某种角度来看,编程语言理论的历史,甚至比编程语言本身的发展更久远。
尽管阿隆佐·邱奇与斯蒂芬·科尔·克莱尼在1930年代发明的La...
2020-06-05 09:42:59 |
Theory
-
java8 函数时编程 stream 源码解析
前提
Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的)。
Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性(确实有不少人说到Stream会降低代码的可读性,但是在笔者看来,熟练使用之后反而觉得代码的可读性提高了)。
这篇文章会花巨量篇幅,详细分析Stream的底层实现原理,参考的源码是JDK1...
2020-06-05 09:42:59 |
Java
-
java8 函数式编程-09-concurrency 并发
前面讨论了如何并行化处理数据,本章讨论如何使用 Lambda 表达式编写并发应用,高效传递信息和非阻塞式 I/O。
本 章 的 一 些 例 子 用 到 了 Vert.x(http://vertx.io/) 和 RxJava(https://github.com/Netflix/RxJava)框架,但其中展现的设计原则是通用的,对其他框架或是自己编写的、没有使用任何框架的程序也适用。
9....
2020-06-05 09:42:59 |
Java
-
java8 函数式编程-08-设计和架构的原则
软件开发最重要的设计工具不是什么技术,而是一颗在设计原则方面训练有素的头脑。—— Craig Larman
通过前面的学习,我们认识到 Lambda 表达式是对 Java 语言的一点简单改进,在 JDK 标准类库中,运行它的方式各种各样。
但是大多数 Java 代码都不是由开发 JDK 的程序员写的,而是像你我这样的普通程序员。为了最大限度发挥 Lambda 表达式的优势,大家需要将其引...
2020-06-05 09:42:59 |
Java
-
java8 函数式编程-07-debug 测试、调试、重构
重构、测试驱动开发(TDD)和持续集成(CI)越来越流行,如果我们需要将 Lambda 表达式应用于日常编程工作中,就得学会如何为它编写单元测试。
关于如何测试和调试计算机程序的书已经汗牛充栋,本章不打算再一一赘述。
如果读者对如何正确地使用测试驱动开发(TDD)感兴趣,我极力推荐大家阅读 Kent Beck 写的Test-Driven Development,以及由 Steve Fre...
2020-06-05 09:42:59 |
Java