[翻译]面向工程师的分布式系统理论

如果一个工程师说起话来像 PhD. 走起路来像 PhD. 干起活來像 PhD. 那他是什么?
他是一个懂理论的工程师……

原文在此
————翻译分隔线————

面向工程师的分布式系统理论

Gwen Shapira,系统工程师明星,现在是 Cloudera 的全职工程师,在 Twitter 上问了一个问题,引发了我的思考。

我以前可能这样回答“好吧,这里有 FLP 的论文,而这是 Paxor的论文,还有这是拜占庭将军的论文……”,并且我会列出一个长长的原材料的清单,如果你够快的话大概可以在六个月的时间里看一遍。但是,现在我觉得提供一大堆关于理论的论文对于学习分布式系统理论往往是错误的道路(除非你在读 PhD)。论文通常都很深奥,也很复杂,需要认真的学习,且便随着巨大成就的是丰富的经验,和相关的业务上下文。有什么是需要这样高等级的工程师专家的呢?

不幸的是,与此同时,缺少一个好的能够通向这些汇总材料的“桥梁”,提炼并融汇分布式系统理论中重要的结论和思路;而一些进行这些总结的材料的难度又过大。在思考的时候,我又想到另外一个问题:

分布式系统工程师应当学习什么样的分布式系统理论?

就这个例子来说,应当是没这么恐怖的、简单一些的理论。因此,我试着整理了一份我作为分布式系统工程师,每天的工作会应用到的一些基本概念的清单。我觉得这个清单应该足够支持分布式系统工程师设计新的系统。如果我漏掉了什么,务必告诉我!
继续阅读

[翻译]十条有用的 Go 技术

原文在此,实用总结。
————翻译分隔线————

十条有用的 Go 技术

这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指:
某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅仅是建议,具体情况具体对待,并且如果有帮助的话务必告诉我。随时留言:)

继续阅读

[翻译]冰激淋制造商和数据竞态

Dave 总是会给我们带来这种很浅显有趣,又意义深刻的文章。原文在此:Ice cream makers and data races

————翻译分隔线————

冰激淋制造商和数据竞态

Dave Cheney

这是一篇关于数据竞态的文章。本文的相关代码在 Github 上:github.com/davecheney/benandjerry

这个例子模拟了两个冰激淋制造商 Ben 和 Jerry 随机接待他们的客户。

继续阅读

[翻译]编译器(10)-编译到 C

原文在此

————翻译分隔线————

编译器(10)-编译到 C

第一部分:介绍
第二部分:编译、转译和解释
第三部分:编译器设计概览
第四部分:语言设计概述
第五部分:Calc 1 语言规格说明书
第六部分:标识符
第七部分:扫描
第八部分:抽象语法树
第九部分:解析

终于到最后一个步骤了!

我们的语言规格说明书如此简单,其实可以跳过 C 直接输出汇编。我有两个不这么做的原因。首先,移植性。在这个指引中,我无须编写任何特定架构的 C 代码。C 已经被移植到各种不同的系统中去了,因此可以让 C 编译器为我们做这个工作。

其次,对于许多程序员来说,汇编比起 C 来说要陌生得多。即使你从未使用 C 编写任何东西,它也比汇编要容易理解得多。 继续阅读

[翻译]编译器(9)-解析

原文在此
————翻译分隔线————

编译器(9)-解析

第一部分:介绍
第二部分:编译、转译和解释
第三部分:编译器设计概览
第四部分:语言设计概述
第五部分:Calc 1 语言规格说明书
第六部分:标识符
第七部分:扫描
第八部分:抽象语法树

长征已经走了很远。我们概览了扫描和抽象语法树的基本概念。现在终于可以向着解析前进。 继续阅读

[翻译]编译器(8)-抽象语法树

原文在此
————翻译分隔线————

编译器(8)-抽象语法树

第一部分:介绍
第二部分:编译、转译和解释
第三部分:编译器设计概览
第四部分:语言设计概述
第五部分:Calc 1 语言规格说明书
第六部分:标识符
第七部分:扫描

在构建解析器之前,首先应当谈谈如何处理目标数据。

需要用某种抽象数据类型来保存所有需要解析的数据。树形数据结构很好的满足了我们的需求。这个树描述了编程语言的语法结构,它被很恰当的叫做抽象语法树(AST)。 继续阅读

[翻译]编译器(4)-语言设计

原文在此。另外推荐阅读王大师的“设计和开发 Yin 语言”,你会看到另一个完全不同的语言设计思路
————翻译分隔线————

编译器(4)-语言设计

第一部分:介绍
第二部分:编译、转译和解释
第三部分:编译器设计概览

在第一部分概述了这一系列文章将介绍的内容。在第二、三部分粗略的浏览了计算机语言编译的各个步骤。

在本文中,将会比上几篇概述介绍的内容略微详细一些。我将讨论语言的规格说明书。 继续阅读

As Golang beyond PHP