编译器设计(第2版)

[美] Keith Cooper

出版时间

2012-12-01

ISBN

9787115301949

评分

★★★★★

标签

编程

书籍介绍
这本书最引争议之处,恰是它反复强调的“不要 panic”——作者把崩溃视为程序员的失误而非语言的失败,主张在编译期就消灭悬垂指针与数据竞争。它不满足于教你Rust的语法糖,而是逼你重新理解指针、所有权与生命周期:那些你习以为常的写法,在这里可能被规则拒之门外,你得另寻出路。正因如此,许多读者即便不写Rust也读有所获——它真正打动人的,是那种“把混乱纳入秩序”的语言设计哲学。它适合愿意啃透原理、而非只求速成的学习者:前十几章值得精读,后续章节则宜在实践中反复回查。
作者简介
吉姆·布兰迪(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等先进语言在一些关键领域构建健壮且适应性强的系统软件,特别是在医疗保健和数据所有权管理等领域。
AI导读
核心看点
  • Rust领域经典参考书,全面覆盖关键特性
  • 兼具C/C++高性能与内存安全,简化并发
  • 第2版新增异步编程,基于Rust 2021版本
读者共识
  • 内容比官方文档更全面深入,翻译质量高
  • 由浅入深讲解机制,适合入门到进阶学习
  • 实战性强,配合开源代码能真正掌握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,根据定义,它们会就地修改文本并且只影响单字节字符。"
目录
目  录
第1章 编译概观 1
1.1 简介 1
1.2 编译器结构 4
1.3 转换概述 7

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