当前位置: 首页 > 科技观察

再来说说第三个系统

时间:2023-03-20 15:23:58 科技观察

最近正好和同事在重写VSCode的一些小功能,在重写的过程中有一些具体的感受。就最近流行的操作系统这个话题,写下自己的感想。因为有某种约定的存在,不想给自己找麻烦,所以这里称之为第三系统。系统是由若干相互联系、相互制约的组成部分组成的具有特定功能的有机整体(集合)。这些元素可能是一些个体、组件、部分,也可能本身就是一个系统(或称为子系统)。因此,如果是一类操作系统,定义为系统更为合适。三个系统提到第三个系统,我就想到一本很不错的小册子(书),叫做《Linux/Unix 设计思想》。这本书主要是讲Linux/Unix相关的哲学(其实我一直觉得这样的书很容易写,学好Linux和哲学,然后把哲学应用到Linux/Unix上。唯一的难点是:domain知识)。先简单说一下三个系统的定义:在最后一站的情况下,人类创造了“第一系统”。PS:没有足够的时间把事情做好。“专家”利用“第一系统”的成熟思路,创造出“第三系统”。PS:“第二系统”是一个委员会设计的,“第二系统”又臃肿又慢。“第三系统”是由厌倦了“第二系统”的人创造出来的。PS:“第三系统”结合了“第一系统”和“第二系统”的优点。“第三系统”的设计者有足够的时间来完成这项工作。一起来看,我们会发现一些很有意思的事情:只有时间足够了,我们才能完成一个更好的系统。“第二系统”在足够的专家和时间的情况下完成。“第三系统”结合了“第一系统”和“第二系统”的优点。从上面可以得出一些有趣的推论:如果有足够的时间和资源,我们可能会设计WindowsPhone,而且来自巨头(微软)的专家太多了。新晋专家专家无论在什么地方都是稀缺资源,否则这个世界上怎么会有咨询公司。开发操作系统并不困难。市面上已经有各种书籍,从《操作系统导论》到《自己动手写操作系统》,《30 天自制操作系统》,培训班即将推出《7 天自制操作系统》。今天,我们基本达成共识,开发一个系统的难点主要在“生态”上。为了生态,可能会兼容某个系统的API,导致系统臃肿。为了生态,需要和上下游一起丰富起来。为了生态,需要开发各种工具……以我们熟悉的Android系统为例,其操作系统源代码(包括上下游工具)约120G,其开发工具IDE大约是60G。。。这个过程涉及到大量计算机相关的核心技术:编译器、虚拟机、操作系统、编译器优化、构建系统、图形编程……这么说吧,它几乎囊括了该领域所需的所有知识。但是,您没有时间预先进行研究。就构建而言,由于上下游众多,Android系统需要:LLVM、Gradle、CMake、Bazel、GCC、Clang、Soong、Ninja。从编程语言的角度来说,需要的语言知识是:Java、C++、C、Groovy、Kotlin。除了这些,还有很多硬件和芯片相关的知识。所以,经过这一战,世界上又多了一个可以制造操作系统的国家。Forking更难最近,我和我的同事正在用Rust重写VSCode的词法分析工具。起初,我认为这是一件容易的事,都是TypeScript。写测试,翻译就结束了。然而,事实并非如此。需要对原始逻辑有深刻的理解。不断调试旧系统的逻辑,重新梳理思路。业务不分离,造成很多耦合。语言之间存在用法上的差异,用法上的差异和类型上的差异都需要溯源。就算你在原文中写了一个没用的if-else,你也要纠结半天。更不用说,它可能有大量无用的代码。因此,我们需要找到一种有效的方法来做,比如TDD。语言交互界面(FFI)。Oniguruma是我们使用的regex库,里面有指针指向指针。…同样,对于一个复杂的系统,各个子系统之间的耦合程度更难剖析——需要大量来自不同领域的知识。每个问题不仅仅是某个语言和技术栈的问题,往往是跨越多个系统的问题。结论没有灵丹妙药。本文转载自微信公众号「phoda」,可关注下方二维码。转载本文请联系phod公众号。