编译器设计(第2版) - [美] Keith Cooper

编译器设计(第2版)

[美] Keith Cooper

出版时间

2012-12-01

ISBN

9787115301949

评分

★★★★★

标签

编程

书籍介绍

深入剖析现代编译器运用的算法和技术

强调代码优化和代码生成

体现编译原理教学的最新理念

本书旨在介绍编译器构造法中的艺术和科学。书中深入分析现代编译器后端所用的算法和技术,重点讨论代码优化和代码生成,详细介绍了用几个编程语言编写的示例等。

Keith D. Cooper 莱斯大学计算机科学系计算工程专业Doerr特聘教授,曾任该系系主任。Cooper博士的研究课题涵盖过程间数据流分析、标量指令优化、寄存器分配以及指令调度等方面。

Linda Torczon 莱斯大学计算机科学系高级研究员。Torczon的研究内容主要包括代码生成、过程间数据流分析和优化、编程环境。

AI导读
核心看点
  • Rust领域经典参考书,全面覆盖关键特性
  • 兼具C/C++高性能与内存安全,简化并发
  • 第2版新增异步编程,基于Rust 2021版本
适合谁读
  • 希望系统学习Rust语法的初学者
  • 有C/C++背景想转Rust的系统程序员
  • 需要深入理解所有权与并发机制的开发者
读前提醒
  • 建议结合官方The Book对比阅读以互补
  • 前几章基础需精读,后几章可泛读实战
  • 务必使用第2版,避免旧版API过时问题
读者共识
  • 内容比官方文档更全面深入,翻译质量高
  • 由浅入深讲解机制,适合入门到进阶学习
  • 实战性强,配合开源代码能真正掌握Rust

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "You've heard that Rust lets you write safe, fase, concurrent programs. This is the chapter where we show you how it's done. We'll cover three ways to use Rust threads: 1. Fork-join parallelism 2. Channels 3. Shared muatble state"
  • "A panic is not a crash. It’s not undefined behavior. It’s more like a RuntimeException in Java or a std::logic_error in C++. The behavior is well-defined; it just shouldn’t be happening. Panic is safe. It doesn’t violate any of Rust’s safety rules; even if you manage to panic in the middle of a stan"
  • "Stack unwinding is the default panic behavior, but there are two circumstances in which Rust does not try to unwind the stack. If a .drop() method triggers a second panic while Rust is still trying to clean up after the first, this is considered fatal. Rust stops unwinding and aborts the whole proce"
  • "以上情况的共同点是他们都由(不客气地说)程序员的错误所导致。而行之有效的的一条经验法则是:“不要 panic”。"
  • "None of these compromises are acceptable for Rust:the programmer should havecontroovervalueslifetimes,and the language should be safe.But this is a prettywell-explored area of language design.You can't make major improvements withoutsome fundamental changes. Rust breaks the deadlock in a surprising "
  • "另一方面,元组只允许用常量作为索引,比如t.4。不能通过写成t.i或t[i]的形式来获取第1个元素。"
  • "你会看到用来声明固定大小缓冲区的语法:[0u8;1024],它是一个1KB的缓冲区,用0填充。Rust没有任何能定义未初始化数组的写法。(一般来说,Rust会确保代码永远无法访问任何种类的未初始化值。)"
  • "&mut str类型确实存在,但它没什么用,因为对UTF-8的几乎所有操作都会更改其字节总长度,但切片不能重新分配其引用目标的缓冲区。事实上,&mut str上唯一可用的操作是make_ascii_uppercase和make_ascii_lowercase,根据定义,它们会就地修改文本并且只影响单字节字符。"
作者简介
吉姆·布兰迪(Jim Blandy),Mozilla Firefox工程师,Subversion版本控制系统最初设计者之一。拥有40多年编程经验,其中包括30多年自由软件开发经验,曾在GNU Emacs、GNU Debugger等项目上工作。 贾森·奥伦多夫(Jason Orendorff),GitHub工程师,专注开发尚未公开的Rust项目,曾在Mozilla参与JavaScript引擎SpiderMonkey的开发。兴趣广泛,包括:语法学、烘焙、时间旅行,以及帮助人们理解复杂主题。 莉奥诺拉·F. S. 廷德尔(Leonora F. S. Tindall),软件工程师、类型系统爱好者。她喜欢使用Rust等先进语言在一些关键领域构建健壮且适应性强的系统软件,特别是在医疗保健和数据所有权管理等领域。
目录
目  录
第1章 编译概观 1
1.1 简介 1
1.2 编译器结构 4
1.3 转换概述 7

显示全部
用户评论
以前用的时候看过一点,写的不错
讲的比龙书要好得多
2014/10/11日开始读
和英文版一起读了一遍,不愧是经典。后半部分理论偏多,怎么结合实践学习是个问题。
很好
还不错,大三的时候看的
记录,没读完。 我太菜了。看不太懂给出的伪代码
温故而知新
这本书绝对的非常好书,但这翻译也太差劲了吧,就翻了翻想看的code motion部分,10.3的可用出口表达式,earliest表达公式都写错了,也太不认真了。其他,整体很实用,对做中端优化的很友好,建议看原版吧。
真不适合初学者
下载
收藏