gpt4 book ai didi

Python 和 Smalltalk - 元编程能力比较

转载 作者:太空狗 更新时间:2023-10-29 18:18:17 25 4
gpt4 key购买 nike

我最近一直在学习 Python,对其出色的运行时元编程能力感到惊讶。以前我在阅读有关 Smalltalk 的文章时遇到了术语“运行时元编程”,据我所知,它拥有最好的运行时元编程功能。 Python 与 Smalltalk w.r.t. 相比如何?元编程?两种语言采用的方法之间有哪些显着差异?

最佳答案

Python 实际上在这里表现得相当好。 Smalltalk 通常不会明确区分程序和元程序,但 Python 更明确 - 例如,装饰器的特殊语法或元编程 Hook 的 __foo__() 命名约定。这是一件好事。

另一方面,这有点像苹果与橘子的比较。 Smalltalk 是一种比 Python 更小、更紧凑的语言,因此使用元程序进行操作的 Material 更少。例如,考虑 __getattr__()。这是一个让 Python 对象提供属性访问的自定义实现的 Hook 。 Smalltalk 没有这样的东西。但! Smalltalk 强制对对象的内部状态进行更严格的封装,并且没有与 Python 中使用的 object.attribute 语法等效的语法。所以读取一个对象的状态需要通过一个方法...这正是 __getattr__() 提供的。因此,对于在 Python 中使用 __getattr__() 的许多情况,您只需在 Smalltalk 中编写一个普通方法——不需要元编程。

到处都是这样:Python 的 __getitem__() 和它的 friend 们可以编写模仿列表或字典的类。 Smalltalk 不需要它,因为 Array 和 Dictionary 只是常规的 Smalltalk 类并且没有使用它们的特殊语法。 Python __eq__() 等启用运算符重载。 Smalltalk 没有运算符,因此您无需执行任何特殊操作即可实现 +。 Python 的上下文库提供了一些用于实现您自己的上下文管理器的漂亮工具。 Smalltalk 没有 with 结构,但它确实有真正轻量级的 lambda 语法,这让您可以直接地做同样的事情。

Smalltalk 的元编程工具往往是相当低级的。例如,您可以创建自己的 CompiledMethod 实例,并将它们粘贴到类的方法字典中。您还可以编写自己的编译器,并指定使用它编译特定类的所有方法。这使得各种各样的事情成为可能——我见过尝试使用替代语法、用于分析的仪器字节码、陷阱读取和写入实例变量以实现透明持久性的项目,等等。

Smalltalk 的元编程工具功能强大,但它们的组织不如 Python 的整齐,而且使用频率也不高。

关于Python 和 Smalltalk - 元编程能力比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6852189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com