共计 1822 个字符,预计需要花费 5 分钟才能阅读完成。
一个元老级的 Python 外围开发者曾倡议咱们(点击浏览),应该宽泛学习其它编程语言的优良个性,从而晋升 Python 在相干畛域的能力。在对于元编程方面,他的倡议是学习 Hy 和 Ruby。然而,他也提到,他并不知道学习哪种语言,能够加深对 Python 元类设计的了解。
这其实意味着,Python 的元类设计有着很大的原创性,并非借鉴自哪种语言的成熟设计!
既然不是从其它语言中学习来的,那么,Python 的元类思维到底起源自哪里呢?Guido 不会是“无中生有”创始进去的设计吧?
上面的一篇译文,作者是 Guido van Rossum(Python 之父),原文写于 2013 年 10 月,正是要答复 Python 元类的起源问题:
原文:https://python-history.blogspot.com/2013/10/origin-of-metaclasses-in-python.html
译者:豌豆花下猫 @Python 猫
申明:本翻译是出于交流学习的目标,基于 CC BY-NC-SA 4.0 受权协定。为便于浏览,内容略有改变,所有图片皆为译者所加。
python-ideas 上有人猜想 Python 的元类设计是起源自 Ruby。事实并非如此。既然是对于语言个性的起源,我感觉我有必要来廓清下事实。
对于元类,我并没有受过 Ruby 的启发(今后也不会)。事实上,Ruby 受到过 Python 的启发。Mats 已经通知我,他的灵感有 20% 来自 Python,有 80% 来自 Perl,而且 Larry Wall 是他心目中的英雄。
(译注:Larry Wall 是 Perl 语言之父。他曾在 2014 年访华,《程序员》杂志做过一期专访,举荐一读。)
我在 1998 年写过对于 Python 元类的文章:http://www.python.org/doc/essays/metaclasses
(作者注:那篇 1998 年的文章里蕴含了一个性能残缺的 Enum 实现,它有许多与 PEP-435 雷同的个性。)
旧式类只是这个想法的第二或第三次迭代物。
我实现旧式类的灵感来自于一本书,即 Ira Forman 和 Scott Danforth 写的《Putting Metaclasses to Work》。
但即使是在 Python 最后的设计中(1990 年,公布于 1991 年),类型(type)自身就是一个对象。任何对象中的类型指针总是指向一个非凡对象,该对象的“数据”是一堆实现其它对象行为的 C 函数指针,相似于 C++ 的虚函数表。
一个类型的类型始终是一个非凡的类型对象(The type of a type was always a special type object),你能够将其称为元类型(meta-type),因为它是本人的类型。
过后我对 Smalltalk 只有含糊的理解;当我起初读到它的元类设计时,我感到很诧异,因为它与 Python 或 Ruby 中的元类有很大的不同!
然而,Smalltalk 的字节码对 Python 的字节码影响很大。我在 Adele Goldberg 和其他人的一本书中读到过,如同是《Smalltalk-80: The Language and its Implementation》。
(译文完)
以上文章出自 Guido 的《The History of Python》系列,该系列次要是对于 Python 语言及社区的倒退历史。我曾翻译过该系列的最新一篇《pgen 解析器的起源》,曾打算把其它文章也陆续翻译进去……(只是曾)……
偶合的是,就在本文刚译完而查资料时,我无心中发现有人在 2019 年上半年曾经把该系列翻译进去了(他翻译了 25 篇,正好不含我所译的最新一篇)!这些译文,我居然始终从未浏览过!
该译者也有公众号,我好奇翻看了一些文章,发现不少的浏览量只有 10 几个!看来那位译者是没有怎么花心思经营啊,纯正是当做了一种学习趣味,默默做事,不求掌声。
所以,如果你对 Python 历史相干内容感兴趣的话,我诚心举荐你关注“ReadingPython”,查看其历史文章。(另外,该译者正在译《Python behind the scenes》系列,这也是我的翻译打算之一,而且理论曾经把一篇 1.4 万字的译了一半后就搁置了好几个月……)
举荐浏览:
1、与 Python 之父聊天:更快的 Python!
2、Python 之父爆料:明年至多令 Python 提速 1 倍!
3、Python 之父重回决策层,将来如何倒退?
4、聊聊 Python 的内置电池
5、从 Python 之父的对话聊起,对于知识产权、常识共享与文章翻译