关于python:Python-的元类设计起源自哪里

一个元老级的 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 之父的对话聊起,对于知识产权、常识共享与文章翻译

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据