如今,Unix 为 iOS 和 Android 提供了强大的动力——它的传奇始于一只鳄鱼和三名研究人员。

作者 | RICHARD JENSEN

编译 | 黄浩然,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

也许它的普遍性早就掩盖了它的起源。但是 Unix,这个操作系统在一个或另一个衍生产品中几乎可以驱动全世界所有的智能手机,它从 50 年前一个雄心勃勃的失败项目中诞生,这个项目涉及到贝尔实验室、通用电气和麻省理工等巨头。很大程度上,Unix 是贝尔实验室几个程序员的灵感结晶,这个故事始于新泽西州默里山(Murray hill)规模庞大的贝尔实验室综合体的一个原本不起眼的附属建筑顶层举行的一次会议。

那是一个晴朗却又寒冷的星期一,是 1969 年 3 月的最后一天,计算机科学系接待了两位贵宾,贝尔实验室副总裁比尔·贝克和研究主任艾德·戴维。贝克正准备接手 Multics(一种复合信息和计算服务的浓缩形式),这是一个计算机科学部门已经进行了四年的软件项目。Multics 已经延期两年了,远远超出了预算,而且只能在最宽松的条件下运行。

PDP-11前面的Ken Thompson(坐着)和Dennis Ritchie(站着)。Ritchie将贝尔实验室供给媒体的这张图片评注为“一张有趣的照片”;他开玩笑说,他的头发拍这张照片时比1999年3月那一期《科学美国人》等杂志上的样子“茂密浓黑多了”。(图片来源贝尔实验室)

为了美化这一明显失败的项目,贝克在演讲中声称,贝尔实验室已经在 Multics 中完成了它试图完成的所有工作,并且他们不再需要在继续这个项目。正如出席会议的伯克·塔格(Berk Tague)后来对普林斯顿大学(Princeton University)说的那样,“和越南一样,他宣布了胜利,并退出了 Multics。” 在部门内部,这一宣布几乎是意料之中的。程序员敏锐地意识到项目范围和他们被要求为之构建的计算机的各种问题。

尽管如此,只要贝尔实验室在开发  Multics,他们就还拥有一台价值 700 万美元的大型计算机可以在业余时间使用。从事 Multics 的程序员之一丹尼斯•里奇(dennis ritchie)后来表示,他们都认为项目的成功与否至关重要,尽管他们知道成功的可能性非常小。

Multics 的取消意味着计算机科学部门的程序员必须完成的唯一一个项目结束了,同时也意味着计算机科学系失去了唯一一台计算机。GE 645 主机被拆开运走后,计算机科学部的资源仅剩下了办公用品和一些终端。

正如参与该项目的另一位程序员 Ken Thompson 在评价 Unix Oral History 项目中所言,“我们的个人生活方式将变得更加简洁。”

幸运的是,对于计算机爱好者来说,资源紧张有时会带来巨大的创造力。因此,有史以来最有影响力的操作系统并不是由风险投资家资助的,而编写它的人并不是因为它而成为亿万富翁。Unix 的出现是因为贝尔实验室雇佣了聪明的人,让他们有自娱自乐的自由,相信他们的项目会有用。在 Unix 之前,贝尔实验室的研究人员已经发明了晶体管和激光器,以及计算机图形学、语音合成和语音识别方面的许多创新。

为 Multics 让路

Multics 一开始就被寄予厚望,尽管乍一看它的目标有点含糊不清,有些奢侈。

一个由通用电气、麻省理工和贝尔实验室共同参与的项目,Multics 被推广为一个将计算能力转化为像电力或电话服务一样容易获得的东西的项目。贝尔实验室的研究人员会在他们的办公室里安装一个插孔,将他们的终端连接到 Multics 主机上,他们将能够实时访问主机的全部资源,还可以在大型机上存储文件并随意检索。

如果这些听起来都是微不足道的,那么就证明了即使对于简单的计算任务,这些特性也会变得十分重要。但是,当 Multics 在 60 年代初被首次构想出来时,文件存储是一个新鲜事物,“分时”(即多个用户共享对单个计算机资源的访问的能力)只是在实验中完成的,而不是在具有大量用户的生产环境中。

20 世纪 60 年代早期的计算机一次一个、一个接一个地运行程序。贝尔实验室的一位研究人员想要编写一个程序,将其转换成计算机接受的任何形式的输入(打孔卡、纸带,或是非常奇特的机器的磁性介质),然后把它放到计算机中心。计算机操作员会将程序排队,运行它,然后将打印的结果和原始程序传递给研究人员。

如果代码中有错误,打印出穿孔卡片,把它们带到计算机中心,等待的结果搞不好就是会得到一个上面写着“语法错误”的打印输出。也许你还可以得到一行参考或其它可能有用的信息。

随着程序变得越来越复杂,这种调试代码的方法越来越让人沮丧。但是没有一家公司或大学,甚至贝尔实验室,能够为每位研究人员购买一台主机——在 1965 年,贝尔实验室用来开发 Multics 的 GE 645 成本相当于一架波音 737。

因此,人们对分时产生了广泛的兴趣,它允许多个研究人员同时在主机上运行程序,在远程终端上立即得到结果。在分时的情况下,程序不是打印在穿孔卡片上,而是写在主机上并存储在主机上。理论上,研究人员可以在不离开办公室的情况下编写、编辑和运行他们的程序。Multics 就是怀着这个目标构思的。它始于 1964 年,最初的交付期限是 1967 年。

MIT 将提供规范,通用电气将提供硬件,通用电气和贝尔实验室将分配编程任务,当时 MIT 已经开发一个名为 CTSS 的原始分时系统并投入使用。

Unix 团队:聚集!

Multics 项目的首批程序员之一:Rudd Canaday。1964 年,Rudd 被贝尔实验室聘用,他为耐克导弹防御计划编写了一个简单的分时系统,然后在 1966 年转移到 Multics 项目。

第二年,实验室雇用了 Ritchie,一位哈佛毕业生,他的父亲是贝尔实验室的校友,还有 Ken Thompson,一个自称军人子弟的小伙子,他自己承认至少花了一个月的时间在 Cal-Berkeley 校区躲避贝尔实验室的招聘人员。Canaday,Ritchie 和 Thompson 的出发点不同,但最终出现在同一个地方:贝尔实验室综合楼的顶层,在狭窄的地方工作。他们没有空调,但至少他们可以使用价值数百万美元的主机并且监管相当宽松。

这三位研究人员都是 MTS,或者是实验室技术人员。他们对找到自己项目的能力满怀自信,也认为他们所做的将对实验室的母公司 AT&T 有所帮助。还好这项工作也给了他们很大的自由。

Malcolm Douglas McIlroy 是程序员团队中的一员,名义上负责监督他们。Doug 是麻省理工学院的毕业生,自1958年以来一直在贝尔实验室工作。

Thompson、Ritchie、Canaday 和 McIlroy 非常清楚麻省理工学院的规范中的缺陷,到目前为止这些规范长达数千页,他们知道,至少他们的一些挑战可以归咎于通用 645 的艰难架构。随着时间的推移,他们中的四个人,特别是 Thompson,开始相信如果给他们一个全新的计划,他们可以想出一个比 Multics 更好的操作系统。

注:2011年,Ken Thompson因在Unix方面的工作获得了颇负盛名的科学奖项:日本奖(Japan Prize)。在上台领奖发言期间,他分享了互联网之父Vint Cerf会称之为关于贝尔实验室早期阶段“我听说过的最有趣的故事之一”:派驻伯克利分校的贝尔实验室招聘专员表示可以提供从加州到新泽西往来的一大笔差旅费,总算吸引了Thompson参加面试。这可是拿别人的钱享受长假的好机会,Thompson于是着手为自己想出一种“旅行推销员”问题,看看自己在一路上可以拜访多少位朋友,尽管几乎无意接受这份工作。他拜访过的一位朋友住在佛罗里达州的彭萨科拉,生性幽默。

最终,Thompson来到了默里山。令他大吃一惊的是,他发觉贝尔实验室颇合心意,于是接受了这份工作。没过多久,他收到了彭萨科拉的那位朋友寄来的一个盒子,里面居然装有一条小鳄鱼。Thompson没有马上处理掉鳄鱼,而是养了起来,把它放在办公室暖气装置上的玻璃烤盆里,不时给它喂大红肠和热狗,直到有一天逃走。几天后这条鳄鱼又现身了,出现在较低楼层的打字室,气势汹汹。Thompson回忆当时鳄鱼对一位秘书发出嘶嘶声,秘书吓得大声尖叫。最终,Thompson被允许继续留在贝尔实验室,但鳄鱼得走……至少据Thompson声称,这条鳄鱼咬过好几位诺贝尔奖获得者。

舒适的环境

对于贝尔实验室的任何程序员来说,做 Multics 并不是一个全职工作,他们正在使用的 GE 大型机可以用于辅助项目。Thompson 的操作系统就是其中之一。那个冬天他一直在努力,并且想出了如何让每个连接到机器的终端同时打印“ HELLO ”。但是在他能够进一步发展之前,Multics 项目被取消了,大型机被打包并搬出了计算机科学系。

Baker 和 Davis 最初在没有给 McIllroy 的团队提供新工作的情况下就取消了 Multics 项目,这给McIllroy 团队的程序员带来了些许担忧。他们担心他们在贝尔实验室的职位在 Multics 公司倒闭后不会长久。

然而,这个蓬勃发展的开发团队恰好处于 Unix 蓬勃发展的正确环境中。贝尔实验室(bell labs)的资金来自美国几乎所有电话线每月收入的一部分,与其他工作场所不同,把一小部分程序员藏在默里山建筑群的顶层不会让公司破产。汤普森和公司也有一个理想的经理去满足他们的好奇心。管理计算机科学研究部(由麦克罗伊的程序员和一组数学家组成)的萨姆·摩根不会依靠麦克罗伊的团队,因为他们没有什么特别的工作要做。

摩根是一位受过训练的应用数学家,1967年被提升为系主任。他的同事布莱恩·克尼根(Brian Kernighan)在接受采访时,表示“我不认为管理是他最喜欢的工作,但是他非常努力地把它做好。他很和蔼,对每个人都很好,也很公平。”

摩根自己在 Unix 口述历史项目中回忆道:“这里的管理原则是雇佣聪明人,并向他们介绍环境。” “你给了他们想要的东西的大致方向,你给了他们很大的自由。”因此,摩根没有提供具体的方向,而是更愿意运用他所谓的“选择性热情”来鼓励某个特定的研究项目,并指出,“如果你错误地回应了后来证明是好的事情,不要气馁,如果真的是个好主意,它会回来的。”

克尼根回忆说:“他让人们做自己的事情,从不试图告诉任何人他们应该做什么。”当时,贝尔实验室也强调跨学科合作。“每个人的门都一直开着,所以如果你有问题的话,附近有个专家,走进去寻求帮助就好”。

尽管如此,汤普森和他的修补工伙伴们还有一个小问题:目前没有人有电脑。虽然实验室管理人员对计算机本身没有问题,但麦克罗伊的程序员无法说服他们的老板给他们一台。由于遭受了 Multics 的惨败,Davis 并没有在球队的球场上出售给他们一台新电脑以便他们可以继续进行操作系统的研发。从实验室管理的角度来看,汤普森和其他团队成员似乎只是想继续致力于Multics 项目。

共享计算财富

计算机科学系与声学和行为研究部共用一层楼,后者是一个更大的部门,由电子音乐、语音合成和语音识别领域的先驱 Max Mathews 领导。声学部门,在 AT&T 的核心业务上有着明显的应用,显然比紧邻计算机科学部门得到了更好的资助。

在似乎有意激怒里奇和汤普森的情况下,声学部门并不缺少计算机,他们都已经对公司的官僚作风产生了一定的蔑视。事实上,声学有比他们所需要的更多的计算机。当那个部门的程序变得过于复杂,无法在计算机上高效运行时,他们只需要向实验室管理人员申请新的计算机,就可以得到它们。

尽管对资金有一定程度的嫉妒,但在 60 年代和 70 年代,声学和计算机科学之间有相当一部分的合作,许多贝尔实验室在计算机技术方面的创新实际上来自声学部门。例如,在 60 年代早期,声学研究人员 billnike 展示了一个带有 dec pdp-7 微型计算机的基本图形用户界面。音响系统里还有那台电脑他们没用,把它插在了六楼的某个地方。

因此,汤普森,一个不知疲倦的实验室角落和缝隙探险家,在戴维斯和贝克取消multics 后不久,终于发现 pdp-7。

在小组其他人的帮助下,汤普森把 pdp-7 这台大小和冰箱差不多的机器的各个部件捆起来(不算终端),把它搬进了分配给音响部门的壁橱里,并把它装起来运行。不管怎样,他们说服声学部门为这台电脑提供场地,并从该部门的预算中支出不少的维修费用。

McIlroy 的程序员突然有了一台电脑。因此,在1969年夏天,汤普森、里奇和卡纳迪研究出了在 pdp-7 上运行的文件管理器的基本原理。这不是一项简单的任务,一个接一个运行程序的批处理计算很少要求计算机能够永久存储信息,而且许多大型机没有任何永久性存储设备(无论是磁带还是硬盘)。但是,这些程序员已经爱上了所需的附加存储的分时环境。由于多个用户同时连接到同一台计算机,文件管理器必须写得足够好,以防止一个用户的文件被另一个用户的文件所覆盖。读取文件时,必须将该文件的输出发送给正在打开该文件的用户。

这是麦克罗伊的团队愿意接受的挑战,他们看到了计算机的未来,想探索它。他们知道 multics是一个死胡同,但是他们发现了共享开发、共享访问和实时计算所带来的可能性。20年后,里奇在普林斯顿大学这样描述:“我们想要保留的不仅仅是一个良好的编程环境,而是一个可以便于同仁合作的体系。”

布莱恩·克尼根告诉记者:“ 20 世纪 60 年代末,我还在使用批处理计算,普林斯顿大学有一台ibm 7094,贝尔实验室有一台 ge 635。”“但 1966 年夏天,我在麻省理工学院使用了 CTS,这给我带来了一个启示,告诉我交互计算有多好。”一旦 Unix 开始运行,Kernighan 就从研究抽象主题转向编写程序,最终与里奇合作开发 C 编程语言,它立即成为编程手册的黄金标准。

从贝尔实验室的自助餐厅到我们的现代手机

尽管实验室没有密切关注研究人员什么时候上班,什么时候离开加拿大,但在那个夏天,他们尽了最大努力保持正常的工作时间。不过,汤普森和里奇则放松了一点。

他们两个都不规律地工作。汤普森告诉 unix 口述历史项目,他当时每天工作大约 27 小时,这使他与其他人的 24 小时工作不同步,里奇是个传统的夜猫子。因此,这三个开发商最早聚在一起的时间大多是在午餐时间,甚至有一天,Canaday 发现自己在家里给汤普森和里奇打电话,提醒他们贝尔实验室的自助餐厅什么时候关门。

在自助餐厅里,三位开发人员为这个新的操作系统详细讨论了文件管理器的基本原理,几乎没有注意到工作人员清理他们周围的午餐。他们还在计算机科学系的办公室里研究这个系统,麦克罗伊的办公室就在卡纳迪对面,他记得那年夏天他们围着黑板工作。

最终,当他们在概念上或多或少地充实了文件管理系统时,是时候真正地编写代码了。这三个人的笔迹都很糟糕,他们决定使用实验室的口授服务。其中一个打电话给实验室的分机,把整个代码库口授给录音机。因此,一些身份不明的文书工作人员很快就有了一项令人不快的任务,试图将其转换成打字文件。

当然,这是不完美的。在各种错误中,“ inode ”作为“ eye node ”返回,但输出仍然被视为对其各种乱涂乱画的决定性改进。

1969 年 8 月,汤普森的妻子和儿子去伯克利度假三周,看望家人,汤普森决定用这段时间编写汇编程序、文件编辑器和管理 pdp-7 处理器的内核,这将使该组的文件管理器成为一个成熟的操作系统。他慷慨地为每项任务分配了一周的时间。

汤普森差不多按时完成了他的任务。到了 9 月份,贝尔实验室的计算机科学部门已经有了一个在 pdp-7 上运行的操作系统,而不是 multics。

pdp-7 在系统“启动”时没有磁带机或硬盘,而是将穿孔纸带送入其中。没有附加的驱动器,他们辛苦工作的文件系统不得不等待。至少,他们有一个多用户的时间共享环境。

尽管如此,该团队还是觉得这是一项成就,并将其操作系统命名为“ unics ”,即 uniplexed information 和 computing system 的缩写。(至少,这是官方的解释。根据 multics 的历史网站multicians.org 的说法,这种发音,就像“太监”一样,被认为是双重合适的,因为研究小组认为这种新的操作系统,运行在一台过时的手提电脑上,是“没有任何 balls 的 multics ”。)

那年 11 月,汤普森的自我评估:或者,正如计算机科学系所说的“我是最棒的报告”,包含了他所建立的这个新操作系统的描述。

到了 1970 年夏天,这个团队已经在 pdp-7 上安装了一个磁带驱动器,而且他们正在蓬勃发展的操作系统也为程序员提供了越来越多的工具选择(其中一些工具一直持续到今天)。但是,尽管取得了成功,汤普森、卡纳迪和里奇在努力获得一台全新电脑的过程中,仍然遭到实验室管理层的拒绝。

直到 1971 年底,计算机科学系才有了一台真正的现代计算机。Unix 团队在过去一年左右的时间里开发了一些工具,用于自动格式化文本文件以供打印。他们这样做是为了简化他们宠物项目文档的制作,但他们的工具已经没了,并被顶层其他地方的一些研究人员使用。与此同时,法务部门准备在一个叫做“ astrotext ”的大型机程序上花一大笔钱,Unix 工作人员意识到,只要稍加努力,他们就可以将自己编写的工具升级为法务部门可以用来准备专利申请的东西。

计算机科学部门向实验室管理层提出购买一台用于文件制作的 dec pdp-11,Max Mathews 提出从声学部门的预算中支付这台机器的费用。最后,管理层让步并购买了一台计算机供 Unix 团队使用。最终,关于这个操作系统的消息泄露出去,拥有 pdp-11s 的企业和机构开始就他们的新操作系统联系贝尔实验室。实验室可以免费提供,只需向任何想要复印件的人索取邮资和媒体费。

到了 20 世纪 70 年代末,该操作系统的副本被送到了加州大学伯克利分校,在 20 世纪 80 年代初,那里的程序员将它改编成在 PC 机上运行。伯克利软件发行版(BSD)的 Unix 版本,被在 Next 的开发人员拿走,这个公司是乔布斯 1985 年离开苹果后创立的。1996 年苹果收购 Next 时,BSD 成为了 OS X 和 iOS 的起点。

Unix 的免费发行在 1984 年停止,当时美国政府拆分了 AT&T,此前早先的一项禁止该公司从贝尔实验室的许多发明中获利的协议也到期了。然而,Unix 社区已经习惯了自由软件,因此当得知 AT&T 很快将对 Unix 的所有副本收费并禁止对源代码进行修改后,Richard Stallman 和其他人开始重新创建 Unix。他们称他们的项目为“ GNU 不是 Unix ”,简称“ GNU ”。1991 年,芬兰赫尔辛基的一名大学生 Linus Torvalds 用几个 GNU 工具编写了一个可以在 PC 机上运行的操作系统内核,他的软件最终被称为 Linux,在2004年成为了 Android 操作系统的基础。

原文:https://arstechnica.com/gadgets/2019/08/unix-at-50-it-starts-with-a-mainframe-a-gator-and-three-dedicated-researchers/

本文为 CSDN 翻译,转载请注明来源出处。

【END】

 热 文 推 荐 

☞华为发布麒麟 990 芯片;苹果召回部分电源插头转换器;KDevelop 5.4.2 发布 | 极客头条

☞高级软件工程师教会小白的那些事!

我如何在 16 岁成为全栈开发者?

☞2亿日活,日均千万级视频上传,快手推荐系统如何应对技术挑战?

☞Docker容器化部署Python应用

☞给面试官讲明白:一致性Hash的原理和实践

☞预警,CSW的50万枚尘封BTC即将重返市场?

☞她说:行!没事别嫁程序员!

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

Unix 激荡 50 年:驱动 Android、iOS 的操作系统是如何从失败开始的?相关推荐

  1. 优秀博客链接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM 深度/机器学习 AI opencv nlp)

    pudn 阿甘兄 前端 服务端 底层 移动端 大数据 云计算 AI 培训机构的课程差不多就这一套了 大数据 AI NLP 高等数学 LeetCode.<数据结构与算法之美>学习笔记.AI ...

  2. 用HTML5/CSS3/JS开发Android/IOS应用

    现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...

  3. 部分优秀博客主链接汇总(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM AI 深度/机器学习 opencv nlp)

    给大家推荐一个学习人工智能的网站:人工智能社区 https://chenyu.blog.csdn.net/article/details/79449026 <a href = "htt ...

  4. 优秀博客链接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM AI 深度/机器学习 opencv nlp)

    pudn 阿甘兄 前端 服务端 底层 移动端 大数据 云计算 AI 培训机构的课程差不多就这一套了 LeetCode.<数据结构与算法之美>学习笔记.AI 前端资料学习,vue.js re ...

  5. appium python框架结构,GitHub - wyybingo/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...

    0910 UPDATE 新增控件集参数化,相同测试步骤的Android/iOS可共用一份测试用例 不同测试步骤的用例还需要单独写 0904 UPDATE 优化Android log及crsahinfo ...

  6. pythonwebview自动化测试_GitHub - githubwzg/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...

    0910 UPDATE 新增控件集参数化,相同测试步骤的Android/iOS可共用一份测试用例 不同测试步骤的用例还需要单独写 0904 UPDATE 优化Android log及crsahinfo ...

  7. ofo 破解 android ios 版 (类似 wifi 万*能*钥*匙 )

    ofo 破解 android  ios 版   (类似   wifi 万*能*钥*匙   ) 使用 七牛云 做一个 破解ofo 的 大数据存储平台 举例说明 http://oi5lgyv8t.bkt. ...

  8. 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信

    一文读懂Android/iOS手机如何通过音频接口与外设通信 更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: 目录 一文读懂 ...

  9. Android IOS WebRTC 音视频开发总结(五一)-- 降噪基本原理

    Android IOS WebRTC 音视频开发总结(五一)-- 降噪基本原理 文章主要介绍噪声消除,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注微信公众号blacker ...

最新文章

  1. 如何运用UIControl自定义iOS中的控件
  2. Python递归实现汉诺塔
  3. java.sql.SQLException: Io 异常: Got minus one from a read call
  4. [USACO12FEB]牛的IDCow IDs
  5. JAVA学习笔记--类型转换(父类子类 Object 基本类型 String) 拆装箱 包装类
  6. 1个月教你学会用Python实现机器学习
  7. Linux服务器上新增开放端口号
  8. 图片里的标志化的构造和执行
  9. linux startx无法启动
  10. 关于中国天气网API接口
  11. 计算机网络及标准化组织
  12. GPIB接口的自动测试系统
  13. NATAPP vscode SSH远程连接Linux服务器出现couldn‘t establish connection
  14. quantization 顶会文章简介 2017
  15. L1-009 N个数求和(解决测试点三错误)
  16. 油菜花王国(并查集)
  17. 火狐 浏览器 历史版本下载地址
  18. 【如何中医调理过敏性鼻炎】
  19. 小白也能学会的调色教程,你学会了吗?
  20. 【测试用例练习】微信发红包(含思路)

热门文章

  1. HBase-TDG Architecture
  2. 几个有用的小程序(转载)
  3. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·002【SQL介绍、数据库的CRUD操作(DDL语句)】
  4. 矩池云conda创建指定cuda cudnn tf版本的虚拟环境
  5. python if not A 和 if A is None
  6. leetcode python3 简单题198. House Robber
  7. 2021年中国氮化镓适配器市场趋势报告、技术动态创新及2027年市场预测
  8. mysql root 登录权限管理_MySQL基础教程(7)MySQL用户与权限管理
  9. 如何判断stdin的数据类型
  10. 字节跳动证实28岁员工离世;《英雄联盟》回应服务器崩了:官方直接回退了旧版本;Deno 1.19 发布|极客头条...