博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

语言开发随笔2

Posted on 2026-02-02 12:13  xuld  阅读(120)  评论(0)    收藏  举报

自 2023 年重新开发语言到现在,已经有三年了。

目前项目还在开发中,离发布还有一段时间。不过好的一点是,很多问题已经想明白了,对这个项目的未来也愈来愈清晰了。

为什么要开发新语言

不同的人对编程这件事的态度不一样。

对多数人来说,编程只是一份工作。代码嘛,怎么写都行,能跑就好。
但我不这么认为,我觉得,优秀的产品背后应该有一份优雅的代码,是一种艺术作品,具有美感。

能够稳定地高效地优雅地完成业务项目,是我一直追求的目标。
如果代码不能按直觉预期正确地执行,我认为是不稳定的。
如果常见的需求,也需要写很多代码、花大量时间来实现,我认为是低效的。
如果本来一行代码就能搞定的功能,却需要写十多行,我认为是不优雅的。

现有的编程语言总有一些地方让我觉得很不满。
这种不满不是因为个人习惯或喜好问题,而是它真正影响了项目开发效率。
为了我追求的目标,我决定打造自己的“干活工具”——刚好我还有这个精力。

我为什么不喜欢 Java

Java 总是给人一种“把简单问题复杂化”的感觉。

同样的需求,用 Java 需要的工作量总是比其他语言要多地多。

以读取文件为例,在多数语言的系统库都提供了现成的函数可以直接读取。

但在 Java 里,你需要先学习“Stream”的概念,然后需要学习“StreamReader”的概念,然后再学习“BufferedReader”,最后,你才可以实现真正的文件读取的功能。

虽然很多 Javaer 美其名曰“高性能文件读取就是这样的”,但业务中真的需要这么时刻在乎性能吗?而且用 Java 写的程序,好像总体性能都不如用 Go 写的程序吧?

Java 最新版似乎有点改进了,Files.readString(Path.of("test.txt")) 一行也能搞定。但 Path.of 又是什么鬼?总之吧,不逼你先学习下“Path”这个概念,就不是 Java 了。

对我来说,用 Java 开发就像开拖拉机一样慢(当然,也不是不能开)。

我为什么不喜欢 Kotlin

Kotlin 比 Java 确实好太多了,但同样热衷于发明新概念。
我认为这些新概念仅仅是简化了 Java 的语法,但没有本质区别——相当于大家不用学“拖拉机”了,但还是需要学“手动挡”——概念的复杂度并没有降低。
而且 Kotlin 离不开 Java 生态,一个没学过 Java 的人,我觉得他也很难用 Kotlin 干活。

比如 companion object,本质就是静态方法、静态类、命名空间的另一种写法而已。
其他语言不需要类似概念,因为他们要不选择直接使用静态方法,要不选择彻底删除静态方法。

我为什么不喜欢 Rust

Rust 号称很先进。
但我不喜欢需要手动管理内存,因为这会增加工作量。
虽然手动管理的性能更好,但实际业务中,我也不需要为了追求极致性能而牺牲开发效率。

我为什么不喜欢 Go

相比其他语言,Go 的简单和性能,使它成为我目前开发后端的首选语言。

但 Go 的语法实在是太简陋,仿佛回到了 C 时代。

特别是业务中常用的 a ? b : ca?.fn(),使得实际代码量增加不少。

我为什么不喜欢 C#

在 Go 之前,我倾向于用 C# 开发后端。
但相比 Go,C# 就显得过于复杂了。

C# 的约束太多,一股“大公司味”:如果我的项目有上百人一起开发,C# 的合规性约束确实是有意义的。
但我的项目没有这么多人一起开发,很多时候,我不想为了所谓的“合规”而牺牲工作效率。

比如 C# 的规范要求所有参数都作 null 校验,否则报 ArgumentNullException,而不是更普遍的 NullReferenceException。如果自己的项目不校验,显得代码不正规。如果校验了,又增加了工作量。

我为什么不喜欢 JavaScript/TypeScript

从语法上,我认为 TypeScript 是所有语言中最优秀的。
既符合传统 C 语言的美感,又为业务开发提供了需多语法糖。

但核心的缺点是“慢”。
慢到无法写实际业务的后端,毕竟它是单线程的。

虽然有很多人反对说,很多公司也用 Nodejs 写后端的。
但用 Nodejs 写的后端一定不能处理复杂业务的高并发,或者 Nodejs 只是个代理,真正的业务由其他语言开发完成。

我为什么不喜欢 Python

将空格作为语法的一部分,在代码复制时特别麻烦。

特别是业务项目里,复制代码是很常见的。

我需要的是什么

目前,我的首选语言只有 TypeScript 和 Go,分别写前后端。

相比其他语言,它们是最好的选择。

但我希望为自己打造一门更好的语言,它是 TypeScript 和 Go 的结合体:
拥有和 TypeScript 一样强大的类型系统,一样便利的语法糖,同时又具有 Go 的高性能、编译能力。
它既可以用来写前端,也可以用来写后端。

对语言设计的思考

虽然每个语言都有不同的语法、特性,但多数语法本质是相通的,纯粹是写法的区别。
每个语言作者都有自己的偏执和抉择,并试图让他人接受和自己相同的选择。

我非常反感有些语言设计者把多数人都熟知的概念换成一个新概念,但这种新概念又没有引入什么优势,纯粹是习惯上的区别而已。

比如 PHP 里面,用 “.” 作字符串连接符,导致对象调用必须用 “->”,在所有语言里独树一帜,就是不好的设计。

新设计语言时,应该尽量追求和主流语言类似,因为主流的背后代表有很多已经习惯他的用户。
如果没有功能性上的改进,尽量不要发明新语法。