一个元老级的 Python 核心开发者曾建议我们( 点击阅读),应该广泛学习其它编程语言的优秀特性,从而提升 Python 在相关领域的能力,在关于元编程方面,他的建议是学习 Hy 和 Ruby,但是,他也提到,他并不知道学习哪种语言,可以加深对 Python 元类设计的理解,
这其实意味着,Python 的元类设计有着很大的原创性,并非借鉴自哪种语言的成熟设计!
既然不是从其它语言中学习来的,那么,Python 的元类思想到底起源自哪里呢?Guido 不会是“无中生有”开创出来的设计吧?
下面的一篇译文,作者是 Guido van Rossum(Python 之父),原文写于 2013 年 10 月,正是要回答 Python 元类的起源问题:
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 之父的对话聊起,关于知识产权、知识共享与文章翻译
0 评论