Computer-System Structures八大思想

简介: 编程指北-公众号的一段话很有感触:编译原理遇见算法

David Wheeler

All problems in computer science can be solved by another level of indirection

“计算机科学中遇到的所有问题都可通过增加一层抽象来解决”


侯捷老师所言:「学习需要明师。但是明师可遇不可求,所以退而求其次你需要好书,并尽早建立自修的基础。迷时师渡,悟了自渡,寻好书看好书,就是你的自渡法门。」


《计算机组成原理:硬件/软件接口》书中说的计算机系统结构的八个伟大思想:

image.png

看某篇拿了一堆offer的大佬说:

后面学习不论是计算机网络,还是操作系统,都对这几个思想印象深刻,感觉都是这几个思想的具体化实现,类似于 cache 或者 Redis 这样的技术,我认为实际上就是利用了加速大概率事件,和存储器层次的思想去进行设计和加速


编程指北-公众号的一段话很有感触:

编译原理遇见算法

当你学完有限状态机以后,你会发现以前觉得很牛逼正则表达式似乎自己也能用 DFA、NFA 实现一下了。状态机的思想在编程中很多地方都用得上。


比如解析 HTTP 协议,如果没学过状态机思想,你可能会一行行的 if/else 去做解析,这里最麻烦的地方在于,if/else 需要提前将 HTTP 头部字段都接收到再来判断,而我们知道 HTTP 基于 TCP,而 TCP 是流式传输,所以你很有可能是几个字符一组组接收到的,这个时候用 if/else 写出来就很难看了。


而用状态机编写起来代码就会非常优雅。状态的转移是由规则驱动的,接收到一个字符就判断一个,非常的方便。


继续学完语法分析,你会掌握递归下降分析这样非常重要的思想,你可以使用递归下降快速的实现四则运算计算器。


如果不用递归下降你可能需要先中缀表达式转后缀,然后求值,这是我们大一数据结构课写的,当时用栈写的,有点麻烦。后来学完编译原理,又用递归下降重写了一遍,区区几十行代码遍搞定。


还有一类场景在实际开发中的用的很多,比如淘宝、京东这样的电商,它们的营销规则有很多,比如满减、直减、跨店等等,这样的规则是不可能写死在代码里的。


那是怎么做的呢?


一般会实现一个配置系统,并设计一个DSL(领域特定语言)来表达这些规则,将规则直接配置到系统中,这样可以非常方便的修改,那么如何在代码里去解析 DSL 定义的规则呢?这就需要为 DSL 写一个语法解析器,这里就会用到语法分析的方法。


DSL(Domain Specific Language),它是一种用于某个特定领域的程序设计语言。这种特定于某个领域是相对于 C、C++、Python 这种通用语言而言的,通用语言可以在各个领域使用,我们熟悉的大多数程序设计语言都是通用语言,它们都是图灵完备的。


像我们平常经常使用的 JSON、SQL、HTML 这些都算是一种 DSL,你甚至可以尝试用递归下降去写一个 JSON、XML 解析器,这比写电商网站更有价值的。


继续往下学你会了解到抽象语法树 AST 如何生成、如何转化为中间代码、如何对中间代码优化、最终又是怎么生成机器指令的。


你会看到贪心算法在寄存器分配中的应用,也会看到图论中的可达性分析又是如何实现死代码消除。


相关文章
|
2天前
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
49 0
|
2天前
|
机器学习/深度学习 存储 算法
算法·动态规划Dynamic Programming
算法·动态规划Dynamic Programming
11 0
|
2天前
|
运维 Oracle 关系型数据库
LIS(全称Laboratory Information Management System)系统源码
LIS(全称Laboratory Information Management System),是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样本登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程,实现智能化、自动化和规范化管理。有助于提高实验室的整体管理水平,减少差错率,提高检验质量。
30 1
|
11月前
|
C++
【PAT甲级 - C++题解】1129 Recommendation System
【PAT甲级 - C++题解】1129 Recommendation System
39 0
UCF 2021 Practice F.Balanced Strings (思维 组合数学)
UCF 2021 Practice F.Balanced Strings (思维 组合数学)
82 0
|
程序员 开发工具 C语言
TLA+ Specifying System (1)
TLA+ Specifying System (1)
TLA+ Specifying System (2)
TLA+ Specifying System (2)
TLA+ Specifying System (2)