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

Slashdot采访Python之父

时间:2023-03-11 20:30:17 科技观察

指南:Python之父GuidovanRossum于2013年1月正式离开谷歌后正式加入Dropbox。2013年8月19日,Slashdot网站开通了Guido的采访帖,并网友在评论中提问。8月25日,Slashdot在另一个线程中汇总了关于“面向对象、函数式编程、PyPy、Python3”的问题和回复。这篇总结贴现已被健生OMG翻译成中文。从谷歌到Dropboxnurhussein问道:“嗨,是什么促使你离开谷歌去Dropbox?你之前在谷歌主要做什么?未来你会在Dropbox做什么?”Guido:在谷歌工作了7年之后,我已经准备好生活发生了变化,而在这一点上,Dropbox的工作机会正合我意。在高层次上,我的工作仍然没有太大变化:作为普通工程师(不是经理或团队***),花一半时间在公司做BDFL需要做的Python做的事情,做什么代码审查,架构和设计工作处理很多电子邮件我的很多工作都使用Python一些细节当然是不同的。我在谷歌只做了两件事:前两年我致力于在线代码审查工具Mondrian的开发。这个工具从来没有开源过,但它导致了Rietveld,它被Python、Go和Chromium社区使用。加入GoogleAppEngine后,我做了很多不同的事情,主要是用Python。我在Python中的最后一个大项目是一个新的Python数据库API,NDB。我在Dropbox已经7个月了,我在这里的主要工作是设计Dropbox数据存储API。使用该术语来描述这个数据存储有点讽刺,但这不是我的错——Dropbox数据存储和GoogleAppEngine数据存储有一点重叠。更讽刺的是,尽管我做了这么多设计工作,用Python完成了两个原型,但我们上个月发布的SDK只支持Java、Object-C和Javascritp。不过我正在努力,这次采访让我放慢了速度。为什么Python避开一些常见的OO样式i_ate_god提问:“接口、虚拟类、私有成员等......为什么Python没有这些特性”Guido:我能想到两个原因:你并不真的需要它们,如果没有编译时类型检查将很难实现。Python最初是一个skunkworks项目(不受管理层的支持和鼓励,但并不气馁),我希望很快能看到一些东西出来。这导致我删除了一些不是真正需要或继续的功能;它还让我在运行时进行所有类型检查,这限制了Python可以支持的功能。我也不是OO的忠实拥护者——我只是想要一种简单的语言,它或多或少是偶然变成OO的。在现代的Python中,这些特性有一些粗略的等价语法,但它们并不总是能很好地工作,或者会导致大量的above执行,因此通常会避免使用它们,但它们也有它的用处。ebno-10db提问的函数式语言:“有人认为Python至少在某种程度上是一种函数式语言。你不同意,我也不同意。仅仅拥有一些map和filter类型的函数并不能使其成为函数式语言Language.据我了解,这些函数是一些错过list的人添加到库中的,你已经多次尝试将它们删除。一般来说,你不是函数式编程的粉丝,至少从Python不。问题:你觉得函数式编程方法一般来说不是特别有用,还是不太适合Python?我很想听听你的不同方面的原因。Guido:我不是想提出一个想法**作为*的信徒,我在我的设计选择中尽量务实(但不是“太”务实)。我会衡量真实代码的可读性和可用性。有些地方map()和filter()是合适的,但另一方面Python有列表推导。我不再讨厌reduce(),因为我以前只用(a)或(b)来实现sum()是不可读的。所以我们添加了内置的sum(),从内置函数中移除了reduce(),并将它移到了实用函数中。我对函数式语言的看法是,它们都使用非常强大的编译器,比如Haskell。对于这样的编译器,函数泛型非常有用,因为它们支持大量转换,包括并行化。但是Python解释器并不知道你的代码是什么意思,这也是有用的。所以,我认为在Python中加入一些函数式的思想是不合理的,因为这些在函数式语言中是有用的,但不适合Python,而且会让不使用函数式编程的人看不懂代码。可读性(这里我指的是大多数程序员)。我也不认为函数式语言目前的成果使其准备好成为主流。诚然,我在一些相关领域对Haskell了解不多,但任何不如Haskell流行的语言都有它的实际用途,我也从未听说过任何其他函数式语言比Haskell更流行。至于Haskell,我认为有很多编译器技术经过验证会很棒,但它的“纯度”将是它被接受的最大障碍。它的单一性使其不适合大多数人。NeverWorker1提问的多行lambda表达式:“对于Python,最常见的抱怨之一就是它对lambda表达式的限制,这意味着不能在一行中赋值。显然,Python对空格的处理是主要原因这个。原因。我花了一些时间思考实现多行lambda表达式的可能性,我能想到的最好的办法就是塞进一些不用的符号,比如C风格的花括号,有点乱充其量。有没有更好的方法,你认为这个功能会被添加吗?圭多:真的吗?除了在Slashdot采访中提问的人之外,我基本上从未听到过这些抱怨。这确实是一个更好的方法,这里使用def关键字在本地范围内定义一个正则函数。定义的函数对象成为局部变量,使用lambda具有相同的语义,只是使用的是局部变量,这里没有语法限制。例如,两者的语言是相同的:defmake_adder(n):__defadder(x):____returnx+n__returnadder这是一个使用lambdas的表达式:defmake_adder(n):__returnlambdax:x+nAndrewKoenig曾经问过我它指出那lambda在一个场景下是很适合的,就是你有一长串包含很多lambda表达式的list或者dict,所以如果你想实现不用lambda,那就定义很多函数,给它们命名,然后参考他们在列表或字典中的名字会让你不知所措。但是,在那种情况下,lambda表达式非常简单,如果您有一些例外情况,在list或dict之前使用def是一个很好的折衷方案。Btrot69的PyPy:“你觉得PyPy代表未来的方式吗?你怀疑吗?如果是,为什么?”Guido:我仍然持怀疑态度,原因有二:(1)他们还不支持Python3。(2)还有很多扩展模块不能很好的支持。但我希望他们能解决这些问题。作为PyPy项目的竞争对手,Jython和IronPython将使CPython项目保持势头。浏览器运行Python?多年来,曾多次尝试创建可在浏览器中运行的Python沙盒版本。主要是因为Javascript问题。而现在我们有了一个很好的替代CoffeeScript来代替Javascript完成的工作——是时候实现让Python在浏览器中运行的功能了吗?Guido:我在1995年放弃了这件事。请不要将Python编译成Javascript。它们的语义非常不同,事实证明,如果你用Javascript编写Python运行时,它会运行得太慢。Python3被MetalliQaZ提问:“你对当前向Python3的迁移有什么看法?从用户的角度来看,一些流行的库离过渡还很远,这阻碍了这种过渡。就我的专长而言,基本上所有我用的系统没有安装3.x的解释器,其实2.7的也很少,想听听大家的意见。Guido:我很好奇你在哪里工作。我同意向Python3的迁移持续了很长时间,但如果您的系统不使用2.7,它就有点老了!当我离开谷歌时,所有向Python2.7的过渡工作已经完成(过去几年从2.4成功迁移到2.6),而在Dropbox,客户端和服务器都在使用2.7。两家公司都在考虑Python3的问题。说到迁移到Python3,我其实是相当乐观的。许多流行的图书馆已经开始这样做。它确实会持续很长时间,但也有很多进步。几年后,我希望所有的代码都迁移到Python3。完全杜绝Python2的使用可能还需要更多的时间,但是,WindowsXP不就彻底死了吗?原文链接:Slashdot翻译:伯乐在线-伯乐在线阅读器翻译链接:http://blog.jobbole.com/47081/