提供机制,而不是策略
2025-01-22 08:19:30 559 字
This post is also available in English and alternative languages.
提供机制,而不是策略
1. 正文
UNIX 有一个计哲学, “提供机制,而不是策略” 。就是说一个系统或者编程语言,提供的是一组操作的集合(机制 mechanism),而不是解决问题的方法(策略 policy)。策略是需要工程师在各种机制的组合上自己实现的。简单来说编程库(library) 是机制,而编程框架(framework) 是策略。从这个理念我们去分析编程语言,让程序员根据自己的需要实现相应的内存管理的手动内存管理(C/C++) ,或者对程序员完全透明(PHP/Python) 的 垃圾回收(GC),都是一种“机制” ,程序员不需要配合编译器来实现内存管理。
因为计算机的硬件和各种算法会不停的发展和更新,如果系统提供的是策略(policy) 的话,那它很快就会过时。所以在我看来,正是因为这个设计哲学,让 UNIX 和 C 语言成为操作系统和编程语言领域里的常青树。
这时候我们再去看一下 Rust 的那个不停需要程序员调整代码的 borrow checker ,就会发现它是一个绝对的烂设计。
- 程序员必需改变自己的思考方式去配合它(话说喜欢这一点的人是有受虐倾向吗?),甚至有些东西完全实现不了,所以它们有一个 unsafe 关键字做补丁,实现不了就用 unsafe ,多巧妙的设计(这是讽刺)。
- 它提供的策略(policy)会随着时间的发展而不停的修改,所以程序员永远写不出稳定的代码。
- 如果未来发明出一种非常高效的 垃圾回收(GC)算法(大概率事件),那 Rust 里的那些为了配合 borrow checker 或者绕过 borrow check 而实现的“精巧”的代码会瞬间被淘汰,以后的维护者还要在那海量的奇怪内存管理和符号逻辑里理解业务逻辑,想想就崩溃。
真的建议年轻的工程师去学习和实践 “文章的写法” 而不是 “回字有几种写法”。