宣传海报上,Python之父GuidovanRossum在EuroPython2015大会上的演讲分为演讲和现场问答部分,但在他拿下舞台上,他会把整个过程改成现场问答的形式。在回答听众提问之前,他先用自己的几个问答推动了会议的进展。主题包括Python3(和3.5)、为什么没有2.8、为什么有那么多未解决的错误、Pypy以及他讨厌Python的哪些部分。DjangoGirlsVanRossum自己的第一个问题是他对DjangoGirls的看法——这是前一天演讲的主题。他说,这是一次很棒的谈话,他喜欢讲故事。他的演讲中不会有这样的东西,也不会有任何“漂亮的幻灯片”。当他听说奥拉……或奥拉……为这些幻灯片画了松鼠和獾时,他感到震惊。他喜欢的另一个方面是当他们说他们不知道自己在做什么时。让他想起25年前开始接触python,他不知道接下来要做什么,比如,他不知道一种编程语言需要一个不同角色的社区。他也被她们一年打造出来的“强势品牌”所感染,“期待欧拉欧拉,姜戈女孩会走得很远。”Python版本改变了方向,他的下一个疑问是开发人员为什么转向python3。“为什么你不能放弃python3?”,他问自己。但是他没有说人们应该迁移到python3,他也不希望他们这样做,但是有很多付出其他代价的艰苦工作。比如这些应用和网站的外观,python2.7现在还没死,还会有更多的安全修复,也许,未来五年会有更安全的外观。移植到python3将需要大量工作,何必呢?[GuidovanRossum]一方面,Python3是一种比Python2“好得多的语言”。它是一种非常容易教授的语言。比如DjangoGirls工作室,完全是用Python3开发的,Django的开发者从来都不能说没有基于框架接口搞过废话。这样一来,使用这种语言(和这种框架)会让初次开发的体验更加愉快。随着时间的推移,Python会变得越来越好。例如,Python3.5中有“很多很棒的新东西”。他表示,Python2是一门优秀的语言,将一如既往地保持原有的特性,这使得它逐渐接近最新的2.7版本。从核心开发人员所做的所有工作中获益的唯一方法是转向Python3。一个长期存在的问题是为什么Python2.8没有发布,尽管VanRossum指出可能存在一些风格问题有点过时了。Python2.8并没有解决人们想要解决的任何问题。没有新功能,这意味着没有理由进行版本升级,并且闸门是开放的,可以从Python3开始移植。这将使程序需要同时移植到2.8和3。Unicode是移植到3的一大障碍。但是“够了”。所以Python2处于没有获得新特性的状态。这使得核心开发人员可以专注于Python3并使其变得更好。然后他谈到了将于9月完成的Python3.5。他以前无法选择这么多功能。比如os.scandir()带来的性能优化非常好,但实际上大部分用户是不会注意到的。另一组用户会对新的矩阵乘法运算符感到非常满意。NumPy等科学计算包将开始使用此功能,此功能将比调用函数“自然”得多。也许他最喜欢的Python3.5特性是语法提示,这是他自己制作的PEP。他为让PEP接受做了很多工作,做自己的裁判有点奇怪,说服自己接受他的工作。但他仍然希望有人会为他做一个独立的代码审查,就像马克香农曾经作为BDFL代表所做的那样,他说。“如果这不会让你感到惊讶,最后一位PEP接受了Python3.5的一个特性,他将这个特性作为一种爱好,使用async和await关键字进行研究。这将提供一种更自然的方式来编写有关协程的代码。“打开错误”他最近询问python错误跟踪器中所有未解决的错误。如果你看任何一个公开的bug,你会发现这个bug可能已经被patch了,有一长串的讨论,甚至核心开发者都说patch可以合并到trunk中,但是这个bug并没有被修复。这是一个不可靠的核心开发人员还是一个好人?这些补丁还需要做什么?他说,这些问题也存在于其他一些大型项目中。许多错误没有以正确的方式关闭,导致对文档的误解和堆积更多的错误。由于硬件或开发环境的差异,这些错误很难重现。但是这个bug没有补丁。这里也有功能建议的错误,附加了补丁,但我们通常对接受这些更改犹豫不决,因为这些担忧没有用。例如,它不具备同一种语言的某些功能,或者是向后兼容的。如果不一直中断,很难接受这些补丁。另外,核心开发者自己的工作量很大,没有人分担将补丁合并到Python核心代码中的工作。所有没有引起核心团队注意的补丁和特性一般不会被插入到合并过程中。在公司内部,这些事情有些不同。人们花钱请人做一些乏味的工作,但是对于开源,你必须自愿去做那些不愉快的工作。一些核心开发人员从事这项繁琐的工作已经太久了,他们想摆脱它。由于多种原因,一些未解决的错误在错误跟踪器上存在很长时间。最后,总是有很多被忽略的统计效应。如果您随机注意到一个错误,包括已关闭的错误,您可能会得到一个已关闭的错误。许多错误很快就被关闭了,错误也被简单地修复了,有点像快速修复。但他说,一个开放错误的平均生命周期随着项目的年龄线性增长。GIL一些听众询问了全局解释器锁(GIL),并希望了解有关该问题的更多信息以及它是如何解决的。范罗森笑着问道:“你有多少时间?”他简要描述了GIL的历史。Python诞生后,出现了多核计算机。当线程运行在不同的内核上时,两个或多个处理器想要更新同一个对象,这就产生了一种竞争机制,尤其是在Python垃圾回收机制中。一个合理的解决方案是锁定每个对象,这样可以保护数据不被多次访问破坏。但事实证明,当没有锁争用时,加锁和解锁操作的开销很大。一些实验表明,不需要加锁的单线程程序的性能会降低2倍。这意味着只有使用三个或更多线程或内核的程序才能从中受益。于是,GIL诞生了(虽然这个名字是在它被添加到解释器之后很久才出现的)。它是一次有效地锁定所有对象的单个锁,因此所有对象访问都是有序的。现在的问题是,10年或15年后,多核处理器将无处不在,人们将希望利用它们而不必进行多处理(例如,使用单独的进程而不是线程进行通信)他说,如果您想设计一种新语言,使其没有可变对象或有限的可变性。然而,“这不再是Python”来自听众。“你说了我不得不说的话,”VanRossum赞许地说。围绕GIL有许多正在进行的开发人员工作,包括PyPy软件事务内存(STM)和PyParallel。其他开发人员也绞尽脑汁想出解决方案。如果有人知道删除GIL并保留Pythonic语言的方法,Van和其他人会很乐意听到的。PyPy他被问及PyPy,他是否使用它,以及它是否有一天会成为默认解释器。他不使用PyPy,但他下载了它并玩了几分钟,并且喜欢他所看到的。他以两种模式使用Python,或者写小脚本来做事,他只使用系统中已经安装的解释器,或者作为Dropbox工程师将Python部署到集群中。他说,Dropbox集群运行的是Python2.7的修改版本,引起了听众的笑声。“我说过,这不是秘密,”他说。Dropbox的某些部分使用PyPy,因为PyPy更快。但该公司担心一些小的不兼容性会导致不易追踪的错误。“我们遇到过太多这样的问题。”PyPy证明您可以比CPython更快地执行Python。它还提供了一个测试平台,可以测试像STM这样有趣的想法。但是保守的原则让人们只在需要速度时才使用PyPy。这样做的问题是,当您发现时,您已经部署了很多机器,很难迁移。所以这很像迁移到Python3的问题。Dropbox对第三方有很多依赖,其中一些甚至无法在其源代码上进行重构。在生产中使用数万行Python代码的公司也是如此,他发现谷歌很难迁移这些代码。总而言之,PyPy是一个“非常酷的项目”。但它有很多复选框,需要更容易检查。也许PyPy需要从DjangoGirls租用Ola和Ola来创建一个更大的项目社区,他半开玩笑地建议道。最喜欢的[GuidovanRossum]接下来的5个小问题是他喜欢的东西。最喜欢的网络框架?他说他只会在任何一种框架中编写Web应用程序,他最后尝试的是Flask。最喜欢的测试库?他主要使用标准库中的unittest和mock。编辑?他现在使用Emacs,但从vi开始(两者都受到不同听众的称赞)。他仍然偶尔使用vi(或Vim),但5分钟后,他又花了15分钟才重新习惯Emacs。除了Python,你最喜欢什么语言?他过去常说它是C,但它“有点无聊”。他信任的人告诉他,现代C++是一种优秀的语言。他喜欢Go,但没有在其中写过任何有意义的东西。当他与设计师交谈时,他喜欢Swift的外观,它从Python那里偷了一堆东西。从一种语言中复制你喜欢的坏东西并最终得到一堆不合逻辑的特性很容易,但Swift的设计师似乎并没有这样做。***,喜欢异常?在更多的欢呼声和笑声中,他以轻笑和键盘中断作为回应。他最讨厌的问题是他讨厌Python什么。他立即回答:“一切与包装和出版有关”。总是存在与版本交叉和依赖相关的问题导致“永无止境的混乱”。他害怕同事上前问他“一个简单的Python问题”,其中一半是某种没有简单解决方案的输入路径问题。然后,他的时间到了。EuroPython会议的组织者给了每位主讲人一份礼物:巴斯克贝雷帽和大手帕。他们出现在VanRossum的演讲中***
