展开讨论

经验与复盘经验摘录 · 机器翻译

不幸的是我不得不提出一些不同意见,尽管为这篇帖子所付出的大量努力表示赞扬

不幸的是我不得不提出一些不同意见,尽管为这篇帖子所付出的大量努力表示赞扬。> 当你仔细阅读内容时,可以看出C++替代方案更多是关于谷歌而不是Go语言。看起来在2009年,谷歌使用C++作为编写网络服务器的主要语言。我在2006年至2014年期间在谷歌工作,我不认同这种描述,实际上也不认同Rob Pike在他的演讲中所说的许多内容。在2009年,大多数谷歌的网络服务器(按独立代码库计算,而不是副本数量)是用Java编写的。一些最古老的网络服务器是用C++编写的,比如网络搜索和地图。C++仍然主导着基础设施服务器,比如BigTable。然而,大多数网络前端是用Java编写的,例如,Gmail和账户前端是用Java编写的,但垃圾邮件过滤器是用C++编写的。因此,Rob的演讲读起来有些奇怪。他声称解决了只有谷歌才有的大问题,但据我所知,谷歌的高级管理层并没有要求他开发Go语言,尽管在基础设施上投入了大量资金。

源讨论Go:我们做对了什么,做错了什么原帖 689 条评论 · 导入时统计
3

这条内容在回应什么?

父级讨论 · 节选

UN

这并不是"意外",Go也没有" somehow"未能在系统编程领域取代C++。Go未能取代C和C++的原因对任何人来说都不是秘密:强制性垃圾回收(GC)和相当重量级的运行时。 当拥有GC的性能开销小于处理手动内存管理(或Rust借用检查器)的认知开销时,Go非常成功:命令行工具和网络程序。 在Go发布的时候,它的创建者确实宣传它为"系统编程语言"[1]和"C++的替代品"[2],但重新评估Go团队的声明,我认为他们并不是我们大多数人所理解的那种意思。 1. Go团队成员使用"系统编程语言"这个词的范围非常广泛,包括所有非脚本或网络的东西。我非常讨厌这个定义,因为它...…

完整原文

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 3

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

UN

> 2009年,大多数Google网络服务器(按独特代码库计算,而不是副本数量)是用Java编写的。一些最古老的网络服务器是用C++编写的,比如网络搜索和地图服务。C++在基础设施服务器如BigTable中仍然占主导地位。然而,大多数网络前端是用Java编写的,例如,Gmail和账户前端是用Java编写的,但垃圾邮件过滤器是用C++编写的。 谢谢。我对2009年左右Google不同服务按语言的划分了解不多,所以你的反馈帮助我理清了这些情况。我知道Java比Rob在2012年演讲[1]中描述的更受欢迎(不是这篇论文),但我不知道它有多受欢迎。 我仍然认为,像用C和C++替换服务器代码是开发Go的主要动因。这在像Google这样的大型科技公司之外,会是一个相当奇怪的动因,因为Google当时编写了大量的C++服务器代码…

完整原文
FO

是的。我在同一时期在Google工作过。Adwords和Gmail是我们团队的客户。 我记得很欣赏运行Java服务器有多方便,因为C++的最佳实践是(而且可能仍然如此)在任何不变量被破坏时立即终止整个进程。这意味着经常会出现查询死亡的情况,这会轻易地摧毁整个集群。而使用Java时,你只需终止特定请求,然后继续运行。 在我在Google工作期间,我没有看到Java向Go语言的明显流失。同样,在我上一份工作中,Go语言的大部分工作都是来自从Ruby转过来的人。后来我了解到,选择Go语言而不是Java的一个常见原因是对Java工具链/开发流程的混淆。例如,从Ruby转过来的人经常用日志语句进行调试,并处理进程…

完整原文
CH

John Ousterhout曾著名地写过线程是不好的,很多人同意他的观点,因为他们觉得线程非常难以使用。 Google软件几乎总是避免使用线程,基本上直接禁止使用,而进行禁止的工程师引用了Ousterhout。 是的,这根本不是真的。当时C++世界中使用的是线程和异步(当然C++占据了大部分的计算量)。 要使用所有核心的唯一方法是使用线程或进程,而Google更倾向于使用线程而不是进程(至少是基于fork()的并发,Burrows告诉人们不要使用)。 例如,我99.99%确定MapReduce工作进程启动了很多线程来利用机器中的核心,而不是很多进程。这可能在MapReduce论文中提到过。 所以,说线程“几乎总是被避免”是完全不正确的。 --- 我想说的是,一种模式是将请求分发到50或200台服务器…

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。