1989 年,Guido van Rossum 厌倦了当时已有编程语言的缺点,决定创造一种新的编程语言,于是 Python 诞生了。现在 Python 已经拥有数百万用户,那么关于这门语言的过去、现在和未来,创造者 van Rossum 有什么要说的呢?
1994 年末,一组从全美国选出来的程序员聚在一起讨论他们的新型秘密武器。
这是针对新型编程语言 Python 举办的第一次 workshop,共有二十来个程序员参加,Barry Warsaw 是其中之一。他记得当时这些第一批用 Python 的人都很兴奋。
「我记得有个人说:『不要告诉别人我参加了这次 workshop,因为使用 Python 是我们的独特竞争优势。』Python 是一个秘密武器。」
这次 workshop 在当时的美国国家标准局(NBS)举办,Warsaw 表示:很显然,当时 Python 提供了一些新特性,使写代码的过程变得简单、便捷。
「第一次使用 Python 时,我就知道它很特别。它提高了代码的可读性,写 Python 代码是很愉快的过程。」Barry 回忆道。
现在,Python 热潮早已突破了最初的开发者圈子。有人预测它将很快成为世界上最流行的编程语言。它吸引新用户的速度远超其他语言,每天有数百万人使用 Python,且用户数量的指数级增长没有显现出衰退迹象。
Python 可用于大型任务和小型任务,专业开发者、业余开发者都可以使用。该语言尤其受到 web 开发者、数据科学家和系统管理员的青睐。今年 4 月,人类成功拍摄了首张黑洞照片,这其中 Python 功不可没,它将分布在世界各地的电脑上的脚本合成起来。
在许多世界知名的组织中,Python 也发挥着重要作用,如它帮助 Netflix 向全世界 1 亿多个家庭提供视频流,支持照片分享社区 Instagram,还帮助 NASA 探索太空。
Python,诞生伊始
就某些方面而言,Python 的崛起就像英国同名喜剧组合「Monty Python」一样离奇怪诞,而它也同样在自己的生态系统中积聚出名气和影响力。
Python 最初只是荷兰程序员 Guido van Rossum 的「副业」。1980 年代末,van Rossum 在荷兰数学和计算机科学研究学会 (CWI) 工作。他厌倦了当时已有编程语言的缺陷,决定创造一种既好用又高能的新语言。
Guido van Rossum,2001 年。这一年 Python 软件基金会成立。(图源:Guido van Rossum)
对于门外汉来说,创造一门自己的编程语言不亚于「自己造一架飞机」,但是时年三十多岁的 van Rossum 有他自己的优势。当时他与 CWI 的一个团队用三年时间创造了一种解释性编程语言 ABC,所以他对构建执行编程指令的解释器需要什么、新语言需要哪些语法构建块都有自己的见解。
对于当时的 van Rossum 来说,意识到已有编程语言的易用性缺陷也是非常重要的。他当时正在开发的 Amoeba 分布式计算系统需要使用 C 语言或 Unix shell,这两种语言都有很明显的缺陷。
C 语言不仅需要开发者执行手动管理内存的复杂工作、时刻面临潜在的错误,还缺少可重用代码库,这就使得开发者在每执行一个新项目时就得重新造一个轮子。而 Unix shell 存在另外一些问题:它为常见任务提供了一套实用工具,但是运行速度很慢,无法处理复杂逻辑。
这些语言对开发者造成的限制使得 van Rossum 决定自己创建一种解释性语言,这门语言借鉴了 ABC 语言的最优特性。
「我当时的想法是『为什么不创造一种自己的语言呢』,借鉴 ABC 语言的思想,但缩小项目的规模,把一个团队三年完成的事情缩减到我自己三个月就能完成的规模(就像臭鼬工厂的项目那样)。就这样 Python 诞生了。」van Rossum 说道。
1989 年底,van Rossum 开始积极投入该项目。他借用了自己最喜欢的喜剧组合 Monty Python’s Flying Circus 的名字为该语言命名,并在任何可以工作的时候投入该项目的研发。
「那时候我的社交活动很少,在闲暇时刻我也不看电视,而是把时间花在编程上,或者同时做这两件事。」
尽管创造 Python 名义上是为了辅助自己的工作,但 van Rossum 发现创建这门语言的动力多过挑战。
「我也不知道自己有多大信心能通过这个工具提高效率。我认为我只是享受独自做大项目的快感,写自己想写的代码,按照自己的想法设计。我喜欢编程。」van Rossum 说道。
一个人自己创造了一种编程语言,这听起来很不寻常,但是 van Rossum 得到了足够的支持。1980 年代末,出于对当时可用开发工具的失望,多种主流语言应运而生。
Larry Wall 曾说过:他创造 Perl 是因为用现有工具编程很难解决某个问题,而且他具备伟大程序员的三大优点:懒惰、暴躁和自负。(懒惰会促使程序员写一些省事的程序,辅助自己或别人更好地完成工作,无需做重复和繁琐的劳动;暴躁让程序员主动去完成一些你还没有提出的工作,去优化自己的代码让它更有效率,能够 3 秒钟完成的任务,我们绝不能容忍 1 分钟的等待;自负会促使程序员写出可靠无误的代码,我们写代码不是为了接受批评和指责,而是为了让其他人来膜拜。)类似地,为了寻找一种更好的语言来创造构建集成电路的交互工具,John Ousterhout 设计了 Tcl 语言。
仅仅用了三个月时间,van Rossum 就创建了 Python 的工作原型,他认为该原型虽然缺乏一些现代特性,但是仍然能够从中看出今天 Python 的雏形。
「现在 Python 具备大量当时还没有的重要抽象,但是不管怎么变化,Python 语言看起来是类似的。当时我已经具备 Python 解释器、Python 语言运行的所有基本组件。第一个 Python 解释器创造的简单 Python 程序可能到现在还能运行。」他接着补充道,函数的定义方式没有变化、代码缩进规则没有变化、字典和元组也是使用相同的语法创建,同样不变的还有,在交互式模式下直接输入 Python 代码即可立即执行计算。
但是,当 van Rossum 的两个同事开始使用这门语言时,他对 Python 的广泛传播不抱太大期望,他已经经历过前互联网时代让编程语言取得进展的艰难。
今天向全世界共享软件只需几次点击即可,而在 1980 年代,这事儿要难得多。van Rossum 回忆起尝试分发 Python 前身 ABC 语言时的重重困难。
「我记得大概是在 1985 年,第一次去美国,我带了一箱磁带,磁带里是 ABC 语言。」
有一些人通过当时初级的电子邮件系统传达了他们对 ABC 语言的兴趣。van Rossum 借助这些人的地址和电话号码,挨个发放磁带。但是,ABC 并没有流行起来。
「这也难怪,ABC 有那么多优秀的特性,却无法得到很好的分发。」但是随着互联网革命的发展,分发 Python 要简单多了,最起码不用再弄一箱子磁带了。
1991 年,van Rossum 通过 alt.sources newsgroup 向全世界发布了 Python。尽管 Python 解释器仍然需要由 21 个单独的部分组合并压缩成一个文件,需要通过 Usenet 网络下载一整晚,但这比之前的当面派发还是要高效多了。
「我希望 Python 能够获得成功,但是我之前发布的语言失败过。」
失败的经历萦绕在脑海中,van Rossum 说他很长时间都不去看 Python 用户群增长方面的信息。渐渐地,他意识到发展势头不错,在与 Python 社区定期交流一段时间之后,他发现自己成功了。
「我认为这种发现来得非常非常缓慢。在我们第一次开源发布之后,我的工作节奏是开发新的发布版本、与刚出现的 Python 社区交流。」
Python 为什么能赢?
1990 年代早期和中期,Python 语言发展迅速,Python 的时代似乎到来了。这令 van Rossum 感到震惊。
van Rossum 认为开发者使用 Python 的原因和他最初创建 Python 的原因一致。他们想要一种高级的脚本语言,能够平衡易用性和强悍能力,在处理复杂逻辑时不会出现 Unix shell 的局限性。他们想要结束使用 C 语言时必须手动执行内存管理、必须在每个项目开始时重复造轮子的局面。
Barry Warsaw 表示,Python 既具备易用性,其能力也不打折扣,这种平衡是 1990 年代早期的主流编程语言所不具备的。「我之前写过大量 Perl、Tcl 和 C 代码,写的过程并不怎么愉悦。当 Python 出现时,我的感觉是:『哇,它让编程重新变得有趣了!』」
Python 当时所提供并一直提供到现在的,是清晰、不含混的语法,用缩进将代码分块,帮助开发者更轻松地理解代码。
高德纳咨询公司(Gartner)应用平台战略团队研究总监 Fintan Ryan 表示,清晰性是 Python 赢得开发者的重要因素,尽管用缩进实现这一重要功能引起了分歧。「它提供非常简洁的语法。你也可以在其他语言中执行缩进,但 Python 能够自动执行。一些程序员喜欢这一点,一些则讨厌它。」
1994 年 Barry Warsaw 参加第一次 Python Workshop 时的照片。(图源:Barry Warsaw)
Python 强调简洁、可读的代码,这一点并非偶然。van Rossum 曾表示,编程语言不仅告诉计算机要做什么,也用于开发者之间的信息交流。
关于可读性,Ryan 表示,Python 从一开始就提供有别于其他语言的内置功能。「你一上手就可以使用类、异常处理等功能。Python 还提供对 lambda、map 和 filter 等函数的支持,这些函数在很多案例中非常有用。」
如果 1980 年代末的流行编程语言能够更好,或许 Python 压根就不会出现。van Rossum 当时创造 Python 的一大动力来自于,他在 CWI 开发的 Amoeba 分布式计算系统与 Perl 脚本语言不兼容。「对于 Python 而言,最幸运的事莫过于 Perl 与 Amoeba 不兼容了。如果 Perl 可以移植到 Amoeba,那我可能不会想自创语言。」van Rossum 说道。
尽管 Python 一经发布就吸引了一票硬核粉丝,形成了用户群,但在 1990 年代 Python 仍然处于劣势。van Rossum 表示,Python 的竞争对手是 Tcl/Tk 和 Perl,它们和 Python 的目标一样:兼具易用性和强悍能力。「1990 年代 top 3 编程语言中,Perl 绝对是第一,Tcl/Tk 排名第二,Python 只占第三名。」
根据 Stack Overflow 开发者调查报告,现在 Python 是活跃用户增长最快的编程语言,而 Perl 已经滑出最新的 Stack Overflow 调查报告。
下图展示了 Python 的爆炸式增长:近年来在 Stack Overflow 网站上,Python 相关问题的阅读量增长速度远远超过其他编程语言。
在 Stack Overflow 网站上,Python 与其他语言相关问题的阅读量增长速度对比显示出 Python 用户群的巨额增长。(图源:Stack Overflow)
那么 Python 是如何超越前对手 Perl 的呢?又该怎么解释二者迥然不同的命运呢?van Rossum 认为,这与代码库超出一定规模后能否轻松维护有关。「人们的经验是,对于 10 行的代码,Perl 绝对没问题。但如果你有 500 行主线代码、包含几千行代码的库,那在 Perl 中维护该代码库就需要大量精力了。而使用 Python 的话,即使没有足够的精力去管理,代码仍然是相对可读且可维护的。」
既易于使用,又足够稳健可以写大型应用,van Rossum 认为这是 Python 在 1990 年代取得初步成功的原因。「当时的一些网络开发者想写更大的应用,他们认为用 Python 写大型应用比使用 C、C++ 或 Java 要省力很多。」
随着 1990 年代 Python 使用范围的扩大,当时仍在 CWI 工作的 van Rossum 发现他创建的这门语言越来越多地把他和世界各地的人们联结起来。
Python 和 web
1990 年代中期,Python 的使用开始出现新方式,从音频录制和回放脚本到首次涉足 web 开发。而后者成为了 Python 使用的主流。
「最大的应用方向是 web 开发,这也是我很感兴趣的方向。你可以用 Python 创建动态网页,这是我最喜欢的 Python 应用之一。」van Rossum 说道。
Ryan 表示,1990 年代 Python 在开发者之间流行的原因是,它成为快速创建强大脚本的最受欢迎语言。「作为具备强大功能的脚本语言,它降低了很多用户的使用门槛。」
此外,Ryan 还表示 Python 足够灵活,很容易学习,从而吸引了具备不同技术专长的不同类型用户。「系统管理员等使用 Python 执行系统自动化和系统编程,开发者看重 Python 的函数式编程和类的继承等特性。而 Perl 在这方面要逊色很多。一旦人们熟悉了 Python 语言,况且这门语言比较好学,他们的生产效率就会得到迅速提升。」
1994 年,时任美国国家标准局(NBS,现美国国家标准与技术研究院 NIST)高管的 Michael McLay 注意到了 Python。他对 NBS 科学家能够以何种方式使用 Python 很感兴趣,这预示着 Python 会因其易用性受到研究人员和科学家的青睐。van Rossum 表示 NBS「有大量数据需要处理,但是缺乏优秀的编程人员」。
为了让 NBS 内部的其他人员接受 Python,McLay 邀请 van Rossum(当时仍在荷兰 CWI 工作)来 NBS 担任为期两个月的客座研究员。这一任命成为 Python 未来演进的催化剂,也为 van Rossum 的生活带来了巨大改变。
首届 Python Workshop 时 van Rossum 与 Barry Warsaw、Roger Masse 的合照(当时 Barry Warsaw 和 Roger Masse 都在 CNRI 工作)。(图源:Barry Warsaw)
正是在这一任命期间,首届 Python Workshop 在 NBS 的办公室里举办了,van Rossum、Barry Warsaw 等 Python 早期用户齐聚一堂,讨论他们用 Python 做了什么以及对 Python 未来发展的期待。
在 NBS 的办公室里,van Rossum 见到了 Bob Kahn,后者因发明互联网基础技术 TCP/IP 协议而闻名。
这次会面为 van Rossum 带来了一个工作 offer——与 Kahn 一起在美国全国研究创新联合会 (CNRI) 工作。CNRI 是一个非盈利性研究组织,专注于网络技术的战略开发。
正像 Python 满足了人们对新型编程语言的需求一样,这个工作 offer 也来得恰如其时。当时 van Rossum 对自己在 CWI 的未来正持怀疑态度。「CWI 更像一个学术机构,他们给了我一点压力,要么拿到 PhD 学位,要么到别处找工作。」
「当时我 35 岁左右,读 PhD 对我没什么吸引力。由于 Python 的缘故,我的生命中出现了一些其他的可能性,经过一些电话聊天和思考,我决定不去读 PhD,而是去尝试新的选择。」
1995 年 4 月,van Rossum 加入 CNRI。在 CNRI,van Rossum 和一群 Python 爱好者一起构建了管理 Python 语言的结构。在这里他领导了一支小型开发者团队构建 Knowbot 程序,该软件是在分布式计算机系统(如互联网)上运行的移动代理。
这支团队使用 Python 工作,团队成员包括 van Rossum、Jeremy Hylton、Roger Masse、Barry Warsaw、Ken Manheimer 和 Fred Drake,他们在 Python 社区中都发挥了重要作用。
「我们组最后有 4 到 10 人,大部分在 CNRI 工作,是 Python 开发的主力军。」van Rossum 表示。
在 CNRI 工作期间,这支团队创建了用于管理核心代码库变更的 CVS 服务器——python.org (http://python.org/) website,以及帮助改善和维护 Python 的 Python Special Interest Groups 邮件列表。
自 1991 年 Python 公开发布后,Python 用户社区发展迅猛。1990 年代下半叶,Python 吸引了大量全球用户群体。在这段时间内,Python 的管理开始变得正规,成立了管理结构,2001 年还成立了 Python 软件基金会 (PSF)。随着社区的发展,自 1994 年开始一年两次的 Python workshop 演变成大型年度盛事,最终成为每年一次的 PyCon 大会。
进入 21 世纪,Python 的用户群变得更加庞大,社区在发展过程中发挥了积极的作用。van Rossum 仍然是核心,而且关于他会一直担当 Python 核心的想法不曾消失,比如人们称他为「终身仁慈独裁者」(BDFL)。
「在很长一段时间里,我承受住了压力,也提升了项目管理技能,比如把大量工作委托给别人、让大家各司其职。」van Rossum 表示。
Ryan 称,语言的创造者成为管理者,这并不鲜见,比如创造了 Perl 的 Larry Wall、创造了 Node.js 的 Ryan Dahl,而 van Rossum 因其在 Python 管理过程中的公平公正而著称。「大家都认同,他在项目的发展方向和自己的管理工作之间做出了很好的平衡。」
的确,van Rossum 确立的开放性本质(核心开发者通过公开辩论帮助决策)是 Python 成功的决定性因素。
Python 的演变
Python 发布以来,出现过几次大的飞跃,如 2008 年 Python 3.0 的出现使该语言现代化,以及最近关于 Python 管理机制的重大变化。
变化是从去年开始的,van Rossum 宣布卸任 BDFL,直接导火线是 Python 改进提案 PEP 572,该提案是关于给 Python 添加表达式内赋值的语法,但引起了公开反对。
尽管该提案的目的是写出更高效的代码,但 van Rossum 迎来了反对者铺天盖地的批评,有些用户认为该语法会降低代码的可读性,使代码更难维护。
van Rossum 说他已经习惯了关于新特性的争论,但是这一次,一些批评者不妥协的态度以及针对个人的攻击使得他下定决心退休。
「技术层面持反对意见的人竟然跑到社交媒体上,大喊决策流程崩溃或我犯了重大失误,这令我失望。我觉得自己受到了来自背后的攻击。」
「过去,在需要对 Python 做出改变或者改进某个特性时,核心开发组会讨论优缺点再进行决策。不管大家是否达成共识,我最终都会认真考量并做出决定。关于 PEP572 提案,尽管存在争议,但是我最终决定「Yes,我想做这个功能」,而人们却没有选择信服。这并不是反叛,不过我觉得我和核心开发者之间缺乏足够的信任来继续下去。」
他认为,这种争议的变化部分原因在于用户量太大。「或许 Python 社区太大了吧,达成任何形式的共识都变得更加困难,因为不管你做出什么决定都会有人反对。」
今年早些时候,Python 核心开发者选出了指导委员会来监督 Python 的未来发展。van Rossum、Barry Warsaw、Brett Cannon、Carol Willing 和 Nick Coghlan 当选指导委员会成员。
Warsaw 表示,这一变化对管理用户群增长如此迅速的语言是一种必然。「我认为 Guido 确实把所有事情扛在自己的肩上。25 年前这没什么问题,那会儿 Python 社区比较小,而现在再把所有事情一肩挑就太难了。我认为,为了他的健康和对社区的参与,将负担分给五个人是明智的。」
指导委员会的新选举会在每次新特性发布之后举行,Warsaw 称这将为下一代 Python 领导者铺平道路。「如果 Python 还能再健康发展 25 年,到时候肯定不是我和 Guido 管理它了。」
指导委员会的成立受到了更广泛核心开发者社区的欢迎,核心开发者 Mariatta Wijaya 称这一举措走在了正确的方向上。「我认为,指导委员会比一个人决定所有事要好,(一个人决定所有事)对那个人来说责任和负担都太重了。指导委员会的成立是一个好信号,这意味着社区将有更多输入。」
Python 核心开发者 Mariatta Wijaya 欢迎 Python 指导委员会的成立,指导委员会将监督 Python 的发展。(图源:A. Jesse Jiryu Davis)
Python 的未来
尽管 Python 仍在以惊人的速度吸引新用户,但社区中一些人已经看到了未来面临的挑战——要想保持先进,Python 需要进化。
在今年的 Python 语言峰会(PLS)上,BeeWare 联合创始人 Russell Keith-Magee 提醒道:如果对移动和新 web 平台的支持没有改进的话,Python 将面临「生存危机」。(BeeWare 项目旨在使写出的 Python 应用可在任意设备上运行。)
「手机和平板达到的市场渗透率远非 PC 和笔记本电脑可比,而作为一个社区,我们还没有一个故事是关于如何在这些设备上使用 Python 的。当笔记本电脑成为小众设备时,Python 又将面临什么呢?」
Keith-Magee 列举了 Python 目前在支持平台方面面临的一系列问题(除了标准 x86 PC)。比如,Python 需要对更新的非 x86 硬件平台提供更好的支持;Python 的测试套件在移动和 web 平台上可能会崩溃;Python app 的安装包过大,无法压缩为一个小的依赖项子集;在安卓、Windows 和 web 上写 GUI 代码时,asyncio 库的运行需要做很多努力;标准库中的模块数与 Python 解释器不兼容(CPython 除外)。
Warsaw 表示,Keith-Magee 提出了很多有用的点,他也认为考虑如何使 Python 与手机、平板以及 WebAssembly 等较新的 web 技术接轨是非常重要的。「目前,Python 在这方面没有好故事。」Warsaw 说道。
现代芯片的处理器内核数量不断增长(英特尔最新的服务器芯片已经高达 48 核),Warsaw 期待看到 Python 能够更好地在多核上执行任务。
他对 Eric Snow 在 Python 子解释器方面的工作感到兴奋,该项目旨在将 Python 的能力扩展为多核并行运行代码。「我真的希望看到更多工作能够利用多核。」
Snow 正在参与一个使 Python 能够更容易地在多个处理器内核上高效分割任务的项目。他主要利用 Python 现有子解释器特性的修改版本,并改变每个子解释器与 Python 全局解释器锁(GIL)的交互方式。
Warsaw 称,「Python 3.8 应该来不及加入该特性,或许 3.9 版本可以。我认为未来两年到两年半时间内我们将见到这一新特性。我对此很乐观,也很欣慰 Eric 继续为此而奋斗,我认为这是一项重要的工作。」
Warsaw 还表示,曾经失败过的类似项目(如 Gilectomy)也带来了一些有趣的经验教训,帮助 Python 更好地在多核上分配工作负载。
Python 社区正在现代化该语言的内置代码标准库,近期发布的 PEP 594 提案建议移除标准库中过时的模块。这样做可以解决用户近期对 Python 标准库的批评。大家通常认为标准库是 Python 的优势,因为它可用于执行大量常见任务,这也是为什么 Python 被认为装有「内置电池」。
但是在今年的 Python 语言峰会上,Amber Brown 批评了 Python 标准库,她提出疑问:如果让用户从 PyPI 库中自行选择代码库,而不是使用作为内置功能的标准库,是不是会更好?
关于 Python 核心开发者和指导委员会能否更好地反映多样化的用户群,也存在问题。
「我希望看到更完备的多样化指标,不只是性别平衡,还需涵盖种族等其他指标。」Wijaya 表示。「在 PyCon 大会上,我和来自印度和非洲的 PyLadies 成员进行了交谈(PyLadies 是帮助更多女性积极参与和领导 Python 社区的国际团体)。她们说:『当我们听到 Python 或 PyLadies 时,我们会想起北美或加拿大的人,而事实上世界其他地方也有庞大的 Python 用户群。为什么不多看看他们呢?』我认为这意义非凡。因此我希望看到它发生,我们都需要尽自己的一份力量。」
最后,尽管「仁慈的独裁者」管控一切,近年来还是有很多塑造 Python 的想法来自于社区,来自那些不断使用 Python 探索新应用的人,Warsaw 表示。「从社区中吸取能量要比『自上而下』有用很多。」
简单的社区项目对 Python 产生重大影响的一个实例是「类型提示」(Type Hints),这个 Python 3.5 特性受 2012 年一名博士生创建的 mypy 项目的启发。这些提示可以执行可选类型检查,帮助开发者发现容易被忽略并侵入软件的 bug。
这层额外的安全保障,不仅能够帮助多人合作大型代码库的情况。增加用户对代码应该做什么、不应该做什么的理解也很有意义。
「对我来说,asyncio 帮助 Python 扩展至大型组织(如基于 Python 3 运行的 Instagram)是最珍贵的。」Warsaw 表示。他认为 asyncio 是从社区产生想法的另一个示例,对 Python 的能力范围产生了显著影响。
有了指导委员会和更加庞大的用户群,van Rossum 很乐观:「由社区驱动的 Python 语言进化」将继续获得「无与伦比的成功」。
「Python 坚实的核心开发者社区以及新的管理系统令我坚信,我们对 Python 进化过程中将遇到的要求做好了充分的准备。」van Rossum 说道,并赞扬了社区内部对 Python 特定方面的深刻理解。
如果有人对 Python 社区继续寻找新应用案例的能力存有疑问,那他只需要看看 Python 在世界首张黑洞照片拍摄过程中的作用就可以了,Warsaw 说道。
今年早些时候,Python 帮助合成了世界首张黑洞照片。(图源:事件视界望远镜合作组织等)
「这件事惊到我了。我觉得 Python 社区中的一些人是疯狂的 Python 科学家。他们总是在思索今天我能用 Python 做点什么,以及我可以把这件事推到什么地步。」
原文链接:https://www.techrepublic.com/article/python-is-eating-the-world-how-one-developers-side-project-became-the-hottest-programming-language-on-the-planet/
来源:机器之心
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。