当前位置:首页 > 科技  > 软件

Go 哪里没有做好?Rob Pike 深刻反思了

来源: 责编: 时间:2024-04-08 17:19:33 302观看
导读今天这篇将会继续延续前文,一起深入探究 Go 做错、失败的地方在哪。学习前人的经验。没有引导好并发理念从历史背景来看,在 Go 诞生的那个年代,并发编程是一个比较新颖的理念。许多其他编程语言、论文甚至书籍都写过关于

今天这篇将会继续延续前文,一起深入探究 Go 做错、失败的地方在哪。学习前人的经验。w6H28资讯网——每日最新资讯28at.com

没有引导好并发理念

从历史背景来看,在 Go 诞生的那个年代,并发编程是一个比较新颖的理念。许多其他编程语言、论文甚至书籍都写过关于并发编程的内容。并发编程还没有成为主流思想。w6H28资讯网——每日最新资讯28at.com

Go 团队发明了 “goroutine” 这个词,Go 让协程的使用变得非常简单。也正因为有了并发,让这一切看起来像是一种新鲜的事物。w6H28资讯网——每日最新资讯28at.com

听起来都很美妙。但是,Go 做错了什么?w6H28资讯网——每日最新资讯28at.com

rob 认为:Go 团队在并发上,缺乏对使用 Go 的开发者进行并发编程的指导。认为这是重大错误。w6H28资讯网——每日最新资讯28at.com

为此 Go 团队整体上花了非常多的时间做教育和宣导,来澄清并行和并发之间的区别。w6H28资讯网——每日最新资讯28at.com

这一现象,直到 2012 年在技术大会上做了以下分享:w6H28资讯网——每日最新资讯28at.com

图片图片w6H28资讯网——每日最新资讯28at.com

Concurrency is not Parallelism by Rob Pike[1]w6H28资讯网——每日最新资讯28at.com

自此,“并发不是并行” 这句 Go 哲学用语流行了起来。一直到现在。w6H28资讯网——每日最新资讯28at.com

编译器有些困扰

早期的 Go 编译器是用 C 编写的。对社区里的开发者造成一定的困扰。w6H28资讯网——每日最新资讯28at.com

普遍上正确的方式是使用 LLVM 或类似的工具包,或者用 Go 本身编写编译器。这被称为自托管或自举。w6H28资讯网——每日最新资讯28at.com

图片图片w6H28资讯网——每日最新资讯28at.com

The Go compiler architecture post Go 1.5w6H28资讯网——每日最新资讯28at.com

后面 rsc 加入后写了个工具,半自动地将编译器从 C 翻译为 Go。再到后面(现在)绝大部分都是 Go 编写的了。w6H28资讯网——每日最新资讯28at.com

编译器的正式完善,Go 团队一开始优先级是放的比较低的。只是 ken 用 C 快速写了个 plan9 风格的编译器。直至后面 Go 核心相对稳定,也有了新的人员进入后才逐步改变。w6H28资讯网——每日最新资讯28at.com

有的同学看到这,可能在想。这有什么错误的?rob 的解释是:有些人对这一选择感到不快,但这是我们当时最正确的选择。w6H28资讯网——每日最新资讯28at.com

项目管理没做好

这里特指的是开源社区。Go 团队一开始就知道,Go 如果希望成功,必须要是一个开源项目。w6H28资讯网——每日最新资讯28at.com

但是 Go 团队向开源的过渡的不是很顺利,也比较缺乏经验。花费了大量的时间与社区沟通、互动、讨论。w6H28资讯网——每日最新资讯28at.com

最终花了很长时间才了解转为开放源代码项目的影响,以及如何进行管理这个项目。w6H28资讯网——每日最新资讯28at.com

另外,Go 项目曾使用过 4 种不同的内容管理系统:SVN、Perforce、Mercurial 和 Git。Russ 做了一项艰巨的工作,让所有的历史都得以保留,这非常有价值。w6H28资讯网——每日最新资讯28at.com

包管理做的不太好

开发 Go 软件包管理的过程并不顺利。w6H28资讯网——每日最新资讯28at.com

严谨来讲,Go 本身的软件包设计非常出色,但包管理和过程不太好。w6H28资讯网——每日最新资讯28at.com

主要分为以下两点:w6H28资讯网——每日最新资讯28at.com

1、没有使用包管理的经验:早期 Go 核心团队的成员都很熟悉 Google 的工作方式,即使用 monorepo 和每个人都在进行构建。但是,我们在使用软件包管理器没有足够的经验,软件包版本众多,解决依赖关系图的问题也非常困难。w6H28资讯网——每日最新资讯28at.com

2、与社区的合作不太成功:让社区参与帮助解决依赖管理问题的初衷是好的,但当最终设计出来时,即使有大量的文档和关于理论的文章,社区中的许多人还是觉得被轻视了。w6H28资讯网——每日最新资讯28at.com

Go 团队认为这次失败给团队上了一课,让他们知道如何真正与社区互动,并且自此取得了很大的进步。w6H28资讯网——每日最新资讯28at.com

现在包模块的事情已经尘埃落定,新出现的设计在技术上非常出色,而且似乎对大多数用户来说都很好用。只是时间太长,道路崎岖。w6H28资讯网——每日最新资讯28at.com

本煎鱼表示,这次包管理的社区和官方的斗争事件,也成为了 Go 团队在社区里显著的黑料,这么多年了也一直被记着。反复被人提起。w6H28资讯网——每日最新资讯28at.com

文档和示例没写好

前期没有做好的事情是文档。Go 团队写了很多文档,并认为自己做得很好,但很快就发现,社区需要的文档水平与团队的预期不同。w6H28资讯网——每日最新资讯28at.com

原先的文档,即使是最简单的功能,我们也缺少示例。原以为只要说出某个功能的作用就可以了,我们花了很长时间才认识到,展示如何使用这些功能才更有价值。w6H28资讯网——每日最新资讯28at.com

Executable examplesExecutable examplesw6H28资讯网——每日最新资讯28at.com

划重点,要有例子!w6H28资讯网——每日最新资讯28at.com

图片图片w6H28资讯网——每日最新资讯28at.com

后面这些问题都已经解决,现在的文档中有很多示例,可以在浏览器上直接运行这些代码片段。w6H28资讯网——每日最新资讯28at.com

总结

在 rob 对 Go 过去那么多年做回顾时,我们能够发现无论是做得好,做的不好,都不是单纯一点就能够涵盖的。w6H28资讯网——每日最新资讯28at.com

在本篇文章中,我认为更多的是 Go 团队的成长过程中,一开始不懂,后面慢慢才懂的事情。我们可以以此吸取好的地方,争取站在大佬的肩膀上。w6H28资讯网——每日最新资讯28at.com

最后 rob 也再次强调了,Google 对 Go 的支持慷慨得令人难以置信,Google 并不制定议程。社区的参与度要高得多。核心 Go 团队由 Google 支付报酬,但他们是独立的。w6H28资讯网——每日最新资讯28at.com

参考资料

[1]Concurrency is not Parallelism by Rob Pike: https://www.youtube.com/watch?v=oV9rvDllKEgw6H28资讯网——每日最新资讯28at.com

w6H28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-82038-0.htmlGo 哪里没有做好?Rob Pike 深刻反思了

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 基于TTL 解决线程池中 ThreadLocal 线程无法共享的问题

下一篇: Java中的String,这一篇就够了

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top