python为什么我放弃了运维必学必会的

640?wx_fmt=gif Python之父谈到了退位的原因以及Python的未来。 640?wx_fmt=jpeg 在Python社区中,Python的发明者Guido Van Rossum被称为“生命的仁慈独裁者”(BDFL)。他于今年7月12日突然宣布退位。

消息一出,就震惊了整个Python世界 。当时,他以PEP 572改进提案的争吵为例,说明了撤消PEP 572的原因。

Guido van Rossum于1990年发明了Python。他认为,即使没有他的领导,Python语言也可以继续发光。现年62岁的van Rossum是Dropbox的首席工程师。最近,他接受了国外媒体InfoWorld的采访。
640?wx_fmt=png 你为什么从BDFL辞职?

范·罗苏姆: 所谓的一生和独裁只是开玩笑。实际上,在过去十年中,退休的想法一直在我脑海中徘徊。

我还不太年轻,并且有一些健康问题。作为Python社区的主要负责人,我需要教社区的其他成员一遍又一遍地工作,并且我需要一遍又一遍地向Python的新手解释Python的语言哲学。更糟的是。

问题的引爆点是一个有争议的Python改进建议( PEP 572 ),在我接受该建议后,一些对我不利的评论出现在Twitter和其他社交媒体上。 更令人不寒而栗的是,这些评论大部分来自Python的核心成员,对此我感到非常失望!


640?wx_fmt=png 你能谈谈 PEP 572 提案的好处,为什么有争议?

范·罗苏姆: 该提案提出了一种新的语法,该语法允许在表达式内进行赋值。总体而言,这是对Python语言的一小部分补充。如果需要,开发人员可以在表达式中分配值。

许多编程语言都具有这个小功能,例如我熟悉的C和C ++。据我所知,还支持Java和JavaScript。这是一个相当小的语法,但是在某些情况下,它可以使代码编写更加容易,并且通过消除冗余可以提高代码的可读性。 许多人认为他们熟悉Python的设计理念,并且他们认为该建议未遵循Python的设计原则。该提案引起争议的另一个原因是其作者自己的错误。以前的版本中存在一些严重的问题,所以这次,即使以前同意其基本思想的人也对此表示反对。但这只是语法上的微小变化,不是彻底的。
640?wx_fmt=png 在哪个版本的Python中将包含此功能?

范·罗苏姆: 它将出现在Python 3.8中。

Python 3.8将在一年半内发布。我们之前已经发表了一篇文章来讨论 为什么Python这么慢 ,在此更新版本中, Python 3的缓慢启动将是CPython核心团队解决的主要问题之一。


640?wx_fmt=png

会有新的BDFL吗?未来将如何管理Python?

范·罗苏姆: 对不起,真的没有评论。

实际上,我给核心开发小组 100 多人 )分配了一项任务,让他们考虑未来的管理模型并选择新的负责人。他们需要在解决Python问题时认真完成此任务。这可能需要长期讨论,并且短期内难以达成共识。 令我高兴的是,他们很高兴接受了这项任务并制定了任务时间表。 他们将在2018年10月1日之前完成提案的收集。然后,在2018年11月1日之前,他们将从许多提案中选择最终管理计划。然后在2019年1月1日之前,他们将整理管理计划的相关文件,并选举或任命新的负责人。 如果提案表明需要BDFL,则提案必须指定详细信息,例如如何选择BDFL,BDFL任期的持续时间以及BDFL的弹imp机制。 我认为最快的10月1日以及最近的明年1月1日将产生新的BDFL。
640?wx_fmt=png 谁是Python的核心成员?

van Rossum :Python有很多核心成员。

像布雷特·坎农(Brett Cannon)一样,他是一位真正的伟大神。另一个例子是蒂姆·彼得斯,作为我的导师和朋友,他提出了“ Python之禅”,生动地诠释了Python的编程哲学。另外,巴里·华沙也是核心开发商之一。
640?wx_fmt=png 将来您将在Python项目中扮演什么角色?

van Rossum :我将成为普通的贡献者或核心开发人员。偶尔编写或查看代码。另外,我将重点关注核心开发人员的指导,尤其是新的核心开发人员,妇女或少数民族。

因为我个人很重视核心开发人员的多样性。
640?wx_fmt=png 作为前BDFL,您认为您的离开会吓走一些Python爱好者吗?

van Rossum :我不这么认为。 Python社区非常健康,Python核心团队非常强大且充满活力。我相信他们可以克服这个小困难,并在接下来的几十年中继续推动Python向前发展。如果我没有这种信心,我不会辞职。尽管这已经结束了,但这只是很小的变化,我对Python的未来充满信心。


640?wx_fmt=png
过去几年中Python的发展过程是什么?您如何看待它的未来发展?

van Rossum :显然,在过去的几年中,Python语言发生了重大变化。我们在语言和库中添加了一些新功能。最大的变化可能是受欢迎程度急剧增加。大约五年前,Python仍然是一种非常特殊的编程语言。

同样是在五年前,随着数据科学的兴起,Python幸运地成为其主要工具并广受欢迎。这也导致核心开发人员的决策压力急剧增加,但总的来说,我们的开发和发布方式非常稳定。 我们有负责发布的经理,主版本的发布周期约为一年半。对于修复该错误的版本,具体时间取决于具体情况,间隔时间可能从几个月到半年不等。 我们有一个非常稳定的Python改进提案流程,也许还有PEP随着社交媒体的发展而变化的方式。但是总的来说,除了几年前从Mercurial过渡到Git之外,PEP流程非常稳定,也没有问题。
英语:Guido van Rossum辞职:Python链接的下一步:https://www.infoworld.com/div/3292936/python/guido-van-rossum-resigns-whats-next-for-python.html 作者:Paul Krill是InfoWorld的特约编辑,致力于桌面应用程序和移动终端以及HTML5,Java,Flash等Web技术的开发。 译者:安翔,编辑:郭睿

征稿啦 CSDN公共帐户坚持“以一千万技术人员成长”的概念。它不仅通过“ Geek Headlines”和“ Changyan”列从技术人员的独特角度描述了技术人员关注的行业焦点事件,而且“ Technology Headline”列提供了对流行技术和场景的深入解释。应用程序,使所有开发人员都能跟上技术趋势,保持警惕的技术意识,并对行业趋势和技术有更全面的了解。

如果您有高质量的文章,或者对行业热点,技术趋势有深入的了解,或者对深入的应用程序实践,方案解决方案等有新的见解,请与CSDN联系,以提交相关信息, 联系人:微信(guorui_1118,请注意提交信息+名称+公司职位),电子邮件(guorui@csdn.net)。


—————推荐读物——————
640?wx_fmt=png 640?wx_fmt=png 640?wx_fmt=png

640?wx_fmt=gif 640?wx_fmt=gif

脸书为什么放弃python

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

“ “Go will be the server language of the future.[1]” — Tobias Lütke, Shopify

在过去的几年中,出现了一种新兴的新语言:Go或GoLang [2]。没有什么比新的编程语言更能激发开发人员了,不是吗?因此,我在4到5个月前开始学习Go。在这里,我将告诉您为什么您应该学习这种新语言。

在本文中,我不会教您如何编写“ Hello World !!”。在线上还有许多其他文章可以教您。我将解释硬件和软件开发的当前状态,以及为什么我们需要学习Go等新语言?因为如果没有问题,我们不需要解决方案,对吗?

硬件的局限性

摩尔定律[3]失败了。

2004年,英特尔推出了第一种[4]时钟频率为3.0 GHz的奔腾4处理器。今天,我的2016 MacBook Pro [5]的时钟速度为2.9 GHz。因此,近十年来,原始处理能力并未增加太多。在下图中,您可以看到处理能力增长与时间之间的关系。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

从上图可以看出,在过去的十年中,单线程的性能和处理器的频率几乎保持稳定。如果您认为添加更多的晶体管是解决问题的一种方法,那您就错了。这是因为在微观尺度上,量子特性开始显现(例如,量子隧穿),放置更多晶体管的成本增加(为什么?[6]),每美元可添加的晶体管数量开始增加。下降。

因此,上述问题的解决方案如下:

  • 制造商开始向处理器添加越来越多的内核。今天,我们已经有四核和八核CPU。
  • 我们还介绍了超线程技术。
  • 向处理器添加更多缓存以提高性能。

但是,上述解决方案也有其自身的局限性。我们不会向处理器添加更多缓存以提高性能,因为缓存具有物理限制:缓存越大,速度越慢。向处理器添加更多内核也有其成本。此外,这不能无限扩展。这些多核处理器可以同时运行多个线程,还可以带来并发功能。我们将在后面讨论。

因此,如果我们不能依靠硬件改进,唯一的出路就是找到一种有效的软件来提高性能,但是不幸的是,现代编程语言并不是那么有效。

“”现代处理器就像带有氮氧加速系统的直线赛车。他们在直线赛车中表现出色。不幸的是,现代编程语言就像蒙特卡洛电路一样,它们有很多曲线。 “-大卫·昂加[7]

去有goroutines! !

如上所述,硬件提供商正在向处理器添加更多内核以提高性能。所有数据中心都在这些处理器上运行,我们预计在未来几年内内核数量将会增加。更重要的是,当今的应用程序使用多个微服务来维护数据库连接,消息队列和缓存维护。因此,我们开发的软件和编程语言可以更轻松地支持并发性,并且随着内核数量的增加它们应该可以扩展。

但是大多数现代编程语言(例如Java,Python等)都来自1990年代的单线程环境。这些语言中的大多数都支持多线程。但是真正的问题是并发执行,线程锁,竞争条件和死锁。这些问题使得很难在这些语言上创建多线程应用程序。

例如,在Java中创建新线程会消耗大量内存。因为每个线程消耗大约1 MB的堆内存,所以如果您运行数千个线程,它们将对堆造成巨大压力,并最终由于内存不足而关闭。此外,您很难在两个或多个线程之间进行通信。

另一方面,Go于2009年发布,当时多核处理器已经可用。这就是为什么在构建Go时要考虑并发性。 Go使用goroutine而不是线程,它们从堆中消耗了大约2 KB的内存。因此,您可以随时启动数百万个goroutine。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

Goroutine如何工作?参考:http://golangtutorials.blogspot.in/2011/06/goroutines.html

其他的好处:

  • Goroutine具有可增长的分段堆栈,这意味着它将仅在需要时使用更多内存。
  • Goroutine启动快于线程。
  • Goroutine具有内置原语,可在它们之间(通道)进行安全通信。
  • Goroutine允许您在共享数据结构时避免使用互斥锁。
  • 此外,goroutine和系统线程之间没有1:1:1的映射。一个goroutine可以在多个线程上运行。 Goroutine也可以在少数系统线程上重用。

“您可以深入了解Rob Pike出色的语音并发性不是平行的[8]。

这些点使Go具有强大的并发处理功能,例如Java,C或C ++,同时又确保了严格的并发执行代码,就像Erlang一样漂亮。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

Go takes good of both the worlds. Easy to write concurrent and efficient to manage concurrency

Go直接在基础硬件上运行

与其他现代高级语言(例如Java / Python)相比,使用C和C ++的最大好处是它的性能,因为C / C ++是编译语言而不是解释语言。

处理器可以理解二进制文件。一般而言,当您编译用Java或其他基于JVM的语言构建的应用程序时,它会将人类可读的代码编译为字节码,可由运行在底层操作系统Understood上的JVM或其他虚拟机使用。在执行时,虚拟机将解释这些字节码并将其转换为处理器可以理解的二进制文件。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

基于虚拟机语言的步骤

另一方面,C / C ++不在VM上执行,并且从执行周期中删除(编译为字节码)的步骤可提高性能。它将人类可读的代码直接编译为二进制文件。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

但是,使用这些语言释放和分配变量非常痛苦。虽然大多数编程语言都使用垃圾收集器或引用计数算法来处理对象的分配和删除。

Go实现了两全其美。 Go是一种编译语言,就像一些低级语言(例如C / C ++)一样,这意味着Go的性能几乎接近于低级语言。它还使用垃圾回收来分配和删除对象。 。因此,不再需要malloc()和free()声明! ! !太酷了! ! !

用Go编写的代码易于维护

我告诉你一件事,Go并不像其他语言那样疯狂地喜欢编程语法,它的语法非常简洁。

当Google创建该语言时,Go的设计师就考虑到了这一点。由于Google具有非常强大的代码库,因此成千上万的开发人员在同一个代码库中工作,因此其他开发人员应该可以轻松编写这些代码。了解一段代码对另一段代码的影响应该最小。这些将使代码易于维护和修改。

Go故意忽略了许多现代面向对象语言的某些功能。

  • 没有课。所有代码仅由包分隔,Go仅具有结构而不是类。
  • 不支持继承。这将使代码易于修改。在其他语言中,例如Java / Python,如果ABC类继承了XYZ类,并且您在XYZ类中进行了一些更改,那么这在继承XYZ类的其他类中可能会有一些副作用。通过删除继承,Go还可简化代码的理解(因为您无需在查看一段代码的同时查看父类)。
  • 没有构造方法。
  • 没有注解。
  • 没有泛型。
  • 没有异常。

这些更改使Go与其他语言有很大不同,这使Go编程与其他语言有很大不同。您可能不喜欢以上几点。但是,并不是没有这些功能,就无法编写应用程序代码。您所要做的就是编写几行代码,但从积极的方面来说,这将使您的代码更清晰,并使代码更清晰。

为什么我放弃了运维必学必会的Python,而选择了更加高大上的 Go?

代码可读性和效率比较

如上图所示,Go几乎与C / C ++一样高效,同时保持诸如Ruby,Python和其他一些语言的代码语法简单。对于人类和加工者来说,这是双赢的局面! ! !

与Swift [9]等这些新语言不同,Go的语法非常稳定。自2012年首次公开发布1.0版以来,它一直保持不变并向后兼容。

Go 由谷歌背书

  • 我知道这不是直接的技术优势,但是Go是由Google设计和支持的,它拥有世界上最大的云基础架构之一,而且规模巨大。 Google设计了Go,以解决可扩展性和有效性问题。这些都是我们在创建自己的服务器时都会遇到的问题。
  • 结论

    • 尽管Go与其他面向对象的语言有很大不同,但它也产生了巨大的影响。 Go提供像C / C ++这样的高性能,像Java这样的高效并发处理,以及像Python / Perl这样的编码乐趣。
    • 如果您没有学习Go的计划,我仍然会说硬件限制会给我们带来压力,软件开发人员应该编写超高效的代码。开发人员应了解硬件并相应地优化程序。经过优化的软件可以在较便宜或较慢的机器(例如,物联网[12]设备)上运行,并且对最终用户的整体体验有更好的影响。

    [负责人:庞桂玉TEL:(010)68476606]

    让我们谈谈YouTube的故事。至于我们的YouTuber和Instagram朋友,我们必须同意不提前谈论Python,否则YouTuber将成为a子。但是,不管有多吵杂,YouTube都是成功的大型Python Web项目,无论历史记录,代码大小,代码农夫的数量或所支持的业务规模如何-至少是,为什么,请确保查看最后一个。

    从一开始,YouTube就是一个典型的Python + MySQL项目。随着业务的发展,代码自然地增长,而代码的数量是数百万年前的。这时,主要的工程实践是一些老套话:接口文档,单元测试和集成测试,严格的代码审查或功能开发可以保留;数据库代理(https://vitess.io/)后面的高度优化的模板引擎(https://github.com/youtube/ Spitfire)支撑了巨大的流量。 Google的代码管理,构建系统和持续集成系统确实不错,并且服务基础架构足够强大。这些基础很好,因为该项目无需很多技巧即可支持如此之大的理由。

    但是此时,软件复杂性的问题已经非常明显。在这个规模上,YouTube仍然是一个项目。拆除它并非不可能。问题在于“自然增长”。 YouTube代码具有典型的分层和业务模块分离设计。但是,在这个开发团队的规模上,权威架构师很难控制代码设计。工程师为一些局部优化目标添加了一些。异常会破坏原始的体系结构设计,例如将业务特定的代码放置在看起来像ORM层的位置,或者直接在模块之间调用以实现功能。代码审查可以确保部分代码设计合理,并且高覆盖率测试可以保证它可以在线运行,但是从长远来看,如此众多的工程师和如此众多的异常,整个软件成为了一个层次。未知的,相关的混乱状态,并且无法拆分。这是一个常见的软件工程问题,但与Python无关。它在Python项目中的表现是,如果您更改一两行代码,它可能会破坏完全不相关的内容,并且不会花费至少半个小时来运行至少几千次单元测试之后,您找不到它(不能保证您可以在运行后找到它),开发人员一定很不高兴,而我已经成为了香琳的妻子。对于快速发展,它永远不存在。

    因为核心数据库访问逻辑在这个无法拆分的大程序包中,所以要添加涉及核心数据的功能,您只能像笨蛋一样笨拙,然后继续添加代码。但是对于相对独立的新功能,工程师首先考虑不再需要MySQL-Google唯一的大规模MySQL部署是广告后端和YouTube。广告后端削减了Spanner / F1后,仅保留了YouTube,并保留了所有新功能。建议使用Google本地存储平台,例如Spanner。在这种情况下,不存在看起来像ORM而不是ORM的Python代码之类的东西。当然,业务逻辑可以编写为C ++或Java后台服务。目前,YouTube已经是Python + MySQL +许多C ++ / Java背景的混合体系结构。

    真正使YouTuber感到无法消亡的真正原因是运行时问题。由于GIL,Python在多线程环境中难以扩展,因此YouTube使用了前叉多进程模式。为了连接到Google生产环境并与各种Google系统进行交互,YouTube不可避免地会调用Google的通用C ++库,但是这些C ++库都假定在典型的单进程多线程环境中运行,并且打开几个后台线程。 ,加载共享数据表是罕见且常见的,因为它们都假定这些资源由数千个线程共享。没什么,但这让YouTube的多进程环境感到尴尬。最直接的影响是巨大的内存占用。在那些内存价格高昂的年代,这个问题尤为突出。在不再提高CPU的单核性能之后,CPU开销就成为一个大问题。 YouTube尝试了PyPy,但发现由于明显的CPU瓶颈已通过C模块方法进行了优化,下一个PyPy并未带来预期的显着性能改进。我从概要分析器中看到的是从事大型和复杂项目的人员所熟悉的:处处表现不佳,而不是处处出现瓶颈,软件过于复杂,并且有许多不可避免的事情要做以响应最简单的请求,因此您必须花钱那么多的CPU。 Pypy-stm仍不成熟,GIL带来的前叉咒语距离很远。 YouTube无处可去,甚至使Grumpy(https://github.com/google/grumpy)变得疯狂,这是用Go编写的Python运行时,它尝试使用goroutine并将Python代码逐步移植到Go中。性能障碍,该项目在下面似乎没有上下文。从性能的角度来看,另一个有希望的方向是Cython。但是,如上所述,很明显,使用手写C模块已优化了CPU瓶颈。为了广泛传播Cython,必须手动重写许多业务代码。要手动重写它,为什么要使用Python?

    花两朵花和一张桌子。在代码库上,YouTuber经历了许多艰苦的工作,或者将代码分为严格的Web前端和API层。 API层严格划分服务模块。协议缓冲区RPC API交互。尽管由于各种不得已而为之,严格划分的Python代码库(实际上)必须全部发布,但从技术上讲,现在可以逐模块重写它。

    激烈的#YTFExit活动开始了(YTFE = YouTube FrontEnd),该活动还有另一个机会:MySQL确实是不可持续的,即使可以得到技术支持,Google SRE也不再愿意为YouTube维护一套独特的Google。巨大的MySQL环境。 YouTube决定将所有存储迁移到Spanner,并重新设计了表结构,并且必须重写用于访问数据的不可访问的Python代码。 YouTube决定将使用C ++的API层服务逐一重写为独立部署的微服务,从而充分利用Google完美的C ++基础结构,实际上,无论使用哪种语言,预性能都不存在。只要将旧代码压低,一次编写就可以显着改善,更不用说C ++了。最后,只有Web层保留为Python,并且由于YouTube Web前端已迁移到Polymer,因此它可以直接与API层通信。服务器需要缝合网页的地方越来越少,其余的Web层代码也越来越少。最终它将也移出Python系统。 YouTube将不再是Python项目。

    这就是YouTube的故事。 YouTube无疑是使用Python的成功项目,但是Python是否在所有时期都是YouTube的最佳选择,每个参与者都有自己的结论。我们可以提出许多假设性的问题,例如YouTube是否是一家独立公司并且不需要依赖其他Google软件,这样可以减轻运行时问题的痛苦并有更多的优化机会;如果在架构上尽早进行严格划分,开发效率是否会下降得如此严重?如果我早年用Go编写Vitess时咬了牙并用Go编写了YTFE,那么该项目的开发是否会更加顺利。如果您认真思考每个假设,您会发现这绝不是纯粹的语言技术问题。

    我个人认为,在一个大型团队的长期发展项目中,“自然增长”和诱杀是不可避免的。面对由此产生的软件复杂性和冗余性,编写代码的速度根本就没有意义。可以帮助项目的主要内容是1.更快地进行编译和静态分析2.具有可靠的运行时。 Python无法在这两个方面都做得很好(pytype无法在YouTube上大规模传播,因为它对于YouTube的规模而言太慢了),并不是说Python一定很糟糕,而只是在这一领域有太多选择,为什么要我拿着Python吗?社区和生态系统在这方面别无选择。 #YTFExit最终选择实际上是C ++,也就是说C ++在很多方面也非常不适合现代大型项目,例如,编译时间会失败,但是有很多地方必须使用C ++。 Google必须努力优化,并且还要满足YouTube的要求。 #YTFExit不选择Go的最大考虑因素是C ++互操作性不好。如果不是由于Google的C ++ Matthew效应,如果我想启动一个大型的Web项目(例如YouTube),我将选择Go。

    当然,命运没有给我这个机会。离开YouTube后,我去了一个大型机器学习项目。我以为自己逃脱了YouTube的麻烦,结果,我在项目的第一天就感到困惑。 Python代码已成为机器学习的默认语言。有很多事故,但这是既成事实。前端DSL是Python。我对此没有任何意见。实际上,除了这种神经网络构造之外,机器学习项目的大部分工作都是各种繁荣的protobuf数据。我认为这非常不适合Python,但是由于Python是机器学习的默认语言,因此大多数研究人员开始感到沮丧的是,数据也直接基于Python,您与谁联系?也许在将来,Python社区将努力创造奇迹,并使语言和生态学特别适合于此类大型项目。因此,一门语言的命运当然取决于自我奋斗,但它也必须考虑到历史行程。这个明显的原因知道,小编相信政治是敏感的,可以伸开双手。

    本文网址:http://www.11st22.com/d/2020427122320_5975_723785369/home   ,   转载请注明出处。

    推荐阅读

    tags

    最新发布