为什么我会成为 Gopher

Go 可能是我继 C/C++ 和 Python 之后学的第一门语言了,但在体验了数个其他语言后,发现 Go 还是真香。

本文含有大量主观观点,没错我就是要开团,也仅能代表个人的观点。

犯下了怠惰之罪的 Python

Python 怠惰就怠惰在竟然把所有依赖做到一个环境里去,于是各种依赖版本不可避免的就开始打架,代码还没写,环境先变成了屎山。此外就是慢,不过当作一个脚本语言的话也不用期望太多。

干脆都用 Poetry 得了,有一个正常语言该有的 lockfile,所有问题都能得到解决。

犯下了傲慢之罪的 Java

Java 就是依托答辩,语法像 C 却没有一点 C 的轻捷,但对象这回事属实烙印在了 Java 的深处。读取 stdin 要定义一个 Scanner 对象,对字符串做操作要定义一个 StringBuilder 或者 StringBuffer 而不是 String,不胜枚举。用户自己定义的也是一样,明明没有面向对象的需要却非要做成一个对象,连带着画出那诡异的 UML 图,如果面向对象味儿不够还要再用各种设计模式包装,观察者,单例,工厂…… 能不能别给自己加那么多戏。

终于做完了一个项目,自信地点击了 Gradle Build,过了好久还没完成,于是睡了一觉,终于 build 完成了。打开它,可用内存便无影无踪,别人 30MB 能解决的问题 Java 搞上 300MB。

犯下了暴食之罪的 JavaScript

我不喜欢 JavaScript 的地方是它的依赖管理。其实应该说 Node.js 的依赖管理才更加合适,但现代的前端开发,又很难离得开 Node.js。首先拦在面前的便是一大串包管理器,npm、yarn、pnpm,各自宣称解决了一些问题,但各自又有各自的 lock 文件。何况最烂但 用得最广泛 的 npm 会在你的每一个源代码目录中拉一坨. node_modules,随便起一个小页面,300MB 没了,稍复杂的页面奔着 1GB 去了,而这 npm install 还经常由于各种奇奇怪怪的问题失败。

另可参阅:Programs are dead

犯下了贪婪之罪的 Kotlin

不得不说 Kotlin 还是缓解了大量 Java 的不足,大大简化了各种繁琐的模式。单例,直接上 object 或者 companion object;观察者模式,一个 by 关键字就能解决。换成 Java,不知道要打多少 snippet。此外还有各种把 if 赋值上提之类的语法糖,确实应了那句话,甜到齁。此外和 Java 类的互操作性也十分舒适。在开发 Android 应用时感觉到这俩简直是天造地设,完美契合。

但毕竟 Kotlin 设计之初就是为了在某种程度上与 Java 共存的,各种设计模式再简化也只能是语法简化。此外还有那又笨又重的 JVM,完全逃不过去。

犯下了怠惰之罪的 C

我说 C 为什么摆烂,C 有底气的啊,看到 C 就像看到了汇编,一目了然。这倒是一种独特的优势,除了 memory safety 之外十分适合偏向底层的开发,也没有 Rust 那么难学。但客观上,缺少诸多现代特性确实给 C 成为一个广泛用于应用软件的语言拖了后腿。

至于 C++,我感觉挺难说,坚持 ABI 兼容的后果,到现在还未知,但至少 Google 已经出去单干了。


在我看来 Golang 就是 if err != nil 还不够优雅了,不过似乎 Go 1.20 会缓解这个问题。我真不想写 try-catch。

许可证:CC BY-SA 4.0
最后更新于 Jun 13, 2023 11:44 +0800