近年来,围棋语言逐渐赢得了越来越多开发者的青睐。在围棋社区庆祝围棋诞生十周年前不久,谷歌云软件工程师本杰明·康登(Benjamin Congdon)发表了一篇个人博客,表达了他加倍喜欢围棋的一些原因。他说,“简单”是他喜欢使用围棋的最重要原因。
以下是博客内容:
我已经使用围棋好几年了,围棋的简单性是我最喜欢的东西之一。几个月前,我开始在工作中使用Go编写代码,发现实现迭代非常容易,比Python和Java更复杂。
当围棋社团庆祝其10岁生日时,总是想知道是什么让围棋如此不同。我认为Go的许多真正优势来自其设计师的理念:它非常强调向前兼容性。这种语言不会损害可读性,并且易于使用。它提供了用户真正需要的一切(基本测试库、可靠的网络、同步原语、模板等)。)。
前向兼容性有多高、版本依赖性就有多低
我认为,与其他语言相比,围棋拥有最完美的版本控制和依赖性。我没有因为围棋版本的更新而遭受任何损失。这非常重要。大约在同一时期,由于Rust的应用编程接口变化和臭名昭著的Python 2-3转换,我的项目一度中断。坦率地说,我认为很难说任何旧的JS项目在npm升级后能否继续。
随着围棋,我注意到围棋的库正在稳定。在Python和JavaScript中,一个已经3年没有更新的库表示这个库已经死了。在围棋生态系统中,图书馆可能仍然可用。在其他社区被视为停滞或忽视的是围棋复兴的标志。
在运行中,我需要更少的依赖项和更少的依赖项本身。Go没有向外部依赖导出更多逻辑的习惯。代码复制在围棋界也更容易被接受。有时这会令人沮丧。有时,您可能只是想要一个执行某种环境或分析的库。大多数时候,你需要自己写或者在斯塔克夫洛夫(StackOverflow)的答案中寻找。然而,总的来说,我认为利大于弊。依赖性减少意味着项目在闲置几个月后不太可能被迫暂停。
然而,现在得出结论可能对其他编程语言不公平。锈病还没有达到围棋所拥有的稳定性,这可能是因为锈病还不是一种成熟的语言,但它也在向成熟发展。Python 3本身是向前兼容的,我希望Python核心开发人员可以从中吸取一些教训。在这方面,我对Javascript不再抱太大希望了。
Go的附件系统并非没有问题。虽然GoModules很棒,但是社区还没有达到100%的采纳率。在使用GoModules之前,将所有东西保存在$ GOPATH之下的要求是如此恼人,以至于我延迟了许多年才使用Go。现在情况有所改善,并开始显示出逐步改善的迹象。
就前向兼容性而言,Go保证自Go 1发布以来编写的所有Go代码都可以运行到Go 2,直到未来某个不确定的时间。这是一个坚定的承诺,至少到目前为止,我使用这种语言的经验是非常积极的。
一些功能虽然现在不需要,以后可能很想要
在使用围棋一段时间后,我开始想要围棋语言本不支持的一些附加功能。嗯,我和其他任何人一样拒绝C模板,但是拥有基本的集合类泛型并不算过分,是吗?
仅有的两种“开箱即用”的常见数据结构是数组(切片)和字典(映射)。您想编写自己的数据结构吗?要么必须为特定类型设置,要么需要盯着一个充满接口的字段{}。这两种方法都有各自的优势,但有时,我希望我只能导入类型安全、通用、双向的地图。
围棋把“不需要”发挥到了极致。“需要”是这里的关键词。你将“不需要”泛型,但你几乎肯定会需要它们。它是错误处理、函数编程和运算符重载的首选。
你对那句“陈词滥调”说了什么?有时“少即是多”。除了指定的返回值,我想不出围棋语言中有什么能让用户抓狂的函数。令人印象深刻的是,围棋核心开发者对模仿围棋中其他语言的开发者群体表现出了极大的克制。围棋2的未来对我来说非常激动人心,因为我期待着看到“下一代”围棋是什么样子。
围棋的另一个惊人之处是它几乎提供了你需要的一切。
go test是一个很好的基本测试框架。你不需要成为JUnit领域的专家或者在单元测试类型之间做出选择。同样,Go的同步功能涵盖了您需要的大多数同步原语。http可以提供可以在生产环境中使用的服务器和客户端(甚至支持HTTP2),并且编码包中有足够的工具来处理json、xml、csv和许多其他常见的数据格式。
格式化,格式化,格式化,重要的事情说三遍
最后,必须提到gofmt。我对格式有点挑剔。我并不特别关心适用哪些规则,但我关心一致性。go的内部格式化工具Gofmt被社区广泛采用,并提供足够的一致性,使Go的代码“看起来”非常有用,而不是看起来对代码很恼火。
就个人而言,我发现使用gofmt阅读开源Go代码很容易。虽然每个项目都有自己的处理方法,但是每个项目都遵循相同的格式约定。从美学角度来看,这是令人愉快的。
所以,我喜欢围棋。曾经有一段时间,我被蟒蛇的禅迷住了,对其他语言视而不见。但是现在,我期待着围棋有一个光明的未来。在Rust流行之后,我可能会用Rust来追赶时尚,因为我真的很喜欢一些函数式编程。
但是现在,我非常愿意继续使用围棋。
极牛网精选文章《谷歌软件工程师:我为什么喜欢用Go语言?》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/2400.html