静态类型的语言是否可以支持smalltalk / python / ruby​​等元类?

时间:2019-08-31 06:26:14

标签: metaclass static-typing

我发现元类的概念引人入胜,将类视为一流的对象。您可以为变量分配类,将其传递给方法,甚至在运行时创建新类。似乎,支持元类的每种编程语言都是动态类型的语言(Smalltalk,Python,Ruby)或逐渐类型化的语言(Objective C和Groovy都支持静态和动态类型)。我还没有看到支持元类的静态类型语言。

静态类型和元类是否彼此不兼容?在我看来,元类的功能需要一定程度的动态性。我仍然想知道,像Java,C#和Kotlin这样的静态类型化语言在技术上是否可能支持元类并将类作为第一类对象,或者从理论上讲这是不可能的吗?

1 个答案:

答案 0 :(得分:0)

鉴于Python本身是用C实现的,并且可以通过其API“看到”并在C中使用其对象,答案是“是”。

在某些语言中,可能更难的是属于类层次结构的对象如果它们具有适当的元类,自省和运行时类创建可能会有点困难-要求实现此类元类的代码复制部分语言运行时本身,或在运行时调用不同的代码生成函数-至少,一个类可以使用动态创建的类的声明生成源代码,并在运行时进行迭代以将该代码编译并加载到当前进程中。

例如,使用C ++可以完全控制内存中的数据布局,也许可以用一种更简单的方法来仿真已编译的类,即只需填充数据结构并重做名称处理部分附加班级成员。

但是,如果那样方便的话,那就是另一个问题了。也许最好不要将元类用于支持它的语言,或者对于要从头开始实现类系统的语言(如Python运行时使用C)。

相关问题