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。