手把手教你使用ANTLR和Go实现一门DSL语言(第三部分):建立和验证语义模型

本文永久链接 – https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3 在前面的系列文章中,我们为气象学家们设计了一门名为Tdat的DSL,使用ANTLR的文法规则编写了Tdat的文法,基于该文法生成了Tdat的语法解析器代码并初步验证了文法的正确性,Tdat可以成功将我们编写的Tdat语法代码样例解析为一颗内存中的树结构。 此时此刻,我们编写的DSL语法代码还无法按预期工作,因为缺少执行语义。在这篇文章中,我们就来为这门DSL建立语义模型,并单独对这个语义模型进行验证。 ...

May 27, 2022 · 13 min · Tony Bai

Go社区主流Kafka客户端简要对比

本文永久链接 – https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients 一. 背景 众所周知,Kafka是Apache开源基金会下的明星级开源项目,作为一个开源的分布式事件流平台,它被成千上万的公司用于高性能数据管道、流分析、数据集成和关键任务应用。在国内,无论大厂小厂,无论是自己部署还是用像阿里云提供的Kafka云服务,很多互联网应用已经离不开Kafka了。 互联网不拘泥于某种编程语言,但很多人不喜欢Kafka是由Scala/Java开发的。尤其是对于那些对某种语言有着“宗教般”虔诚、有着“手里拿着锤子,眼中满世界都是钉子”的程序员来说,总是有想重写Kafka的冲动。但就像很多新语言的拥趸想重写Kubernetes一样,Kafka已经建立起了巨大的起步和生态优势,短期很难建立起同样规格的巨型项目和对应的生态了(近两年同样火热的类Kafka的Apache pulsar创建时间与Kafka是先后脚的,只是纳入Apache基金会托管的时间较晚)。 ...

March 28, 2022 · 18 min · Tony Bai

通过实例理解Go Execution Tracer

本文永久链接 – https://tonybai.com/2021/06/28/understand-go-execution-tracer-by-example Netflix(奈飞公司)的性能架构师Brendan Gregg在其《BPF Performance Tools》一书中对tracing、sampling等概念做了细致描述,以帮助开发人员理解这些概念,并基于这些概念对性能优化辅助工具进行分类,明确它们的适用场合。这里引用部分内容如下: ...

June 28, 2021 · 23 min · Tony Bai

Go语言“十诫”[译]

本文永久链接 – https://tonybai.com/2021/04/09/ten-commandments-of-go 本文翻译自John Arundel的《Ten commandments of Go》。全文如下: 作为一名全职的Go语言作家和老师,我花了很多时间和学生们一起,帮助他们写出更清晰、更好、更有用的Go程序。我发现,我给他们的建议可以归纳总结为一套通用原则,在这里我将这些原则分享给大家。 1. 你应该是无聊的 Go社区喜欢共识(consensus)。比如:Go源代码有一个由gofmt强制执行的统一的代码格式规范。同样,无论你要解决什么问题,通常都有一个标准的、类似于Go行事风格的方法来解决。有时它是标准的方式,因为它是最好的方式,但通常它只是最好的方式,因为它是标准的方式。 ...

April 9, 2021 · 11 min · Tony Bai

对Go 1.16 io/fs设计的第一感觉:得劲儿!

1. 设计io/fs的背景 Go语言的接口是Gopher最喜欢的语法元素之一,其隐式的契约满足和“当前唯一可用的泛型机制”的特质让其成为面向组合编程的强大武器,其存在为Go建立事物抽象奠定了基础,同时也是建立抽象的主要手段。 ...

March 23, 2021 · 12 min · Tony Bai

官宣:Go专栏“改善Go语言编程质量的50个有效实践”上线了

断断续续写了一年多的Go专栏:《改善Go语言编程质量的50个有效实践》今天终于正式上线了!- https://www.imooc.com/read/87 慕课专栏:《改善Go语言编程质量的50个有效实践》 Go语言是Google大牛团队(Robert Griesemer、Rob Pike以及Ken Thompson)设计的一种静态类型、编译型编程语言,支持垃圾回收和轻量级并发,它于2009年11月诞生,一面世就以语法简单、原生支持并发、标准库强大、工具链丰富等优点吸引了大量开发者。经过10余年演化和发展,Go如今已成为云基础架构的标准编程语言,很多云原生时代的杀手级平台、中间件、协议和应用都是采用Go语言开发的,比如:Docker、Kubernetes、以太坊、Hyperledger Fabric超级账本、新一代互联网基础设施协议ipfs等。 ...

September 8, 2020 · 8 min · Tony Bai

开始'亡羊补牢'

就在昨天,就在我们的项目要结项的时候,一个影响力不亚于’广岛原子弹’的bug出炉了,蒙蔽我近一个月的问题终于被澄清了,不过为时已晚,项目即将上线,如果想彻底地解决这个问题,需要对整个系统的实现架构作调整,目前能做的只是’亡羊补牢’了。 ...

April 12, 2006 · 3 min · Tony Bai