【发布时间】:2009-11-08 15:40:34
【问题描述】:
我最近才真正掌握了静态类型和动态类型之间的区别,从 C++ 开始,然后转向 Python 和 JavaScript。我不明白的是如何在静态类型语言(例如 C)之上实现动态类型语言(例如 Python)。我似乎记得曾经读过一些关于 void 指针的东西,但我并没有真正明白。
【问题讨论】:
-
您对 C++ 或任何静态类型语言感兴趣吗? .NET 上有一些 C# 的实现。
我最近才真正掌握了静态类型和动态类型之间的区别,从 C++ 开始,然后转向 Python 和 JavaScript。我不明白的是如何在静态类型语言(例如 C)之上实现动态类型语言(例如 Python)。我似乎记得曾经读过一些关于 void 指针的东西,但我并没有真正明白。
【问题讨论】:
d-t 语言中的每个变量都表示为一个 struct { type, value },其中一个值是联合/另一个结构/指针等。
在 C++ 中,例如,如果您创建一个基本抽象类 MyVariable 和派生的 MyInt、MyString 等,您可以获得相似(“相似”)的结果。您可以通过更多的工作,像在动态类型语言中一样使用这些变量. (我不太了解 C++,但我认为您需要使用友元运算符函数来在运行时更改变量类型,或者可能不会,无论如何)
这个结果由同样的东西归档,运行时类型信息,它在对象中存储实际类型的信息
虽然我不会推荐它:)
【讨论】:
基本上,动态类型语言的每个“变量”都由静态类型语言中的结构表示,其中数据类型是字段之一。对这些动态数据类型的操作(加、减、比较)通常由virtual method table 实现,它为每种数据类型提供一些指向函数的指针,这些函数以特定类型的方式实现所需功能。
【讨论】:
不是。动态类型语言是在 CPU 架构之上实现的。只要 CPU 架构是图灵完备的,你就可以在其上实现静态语言,或者动态语言,或者像 .NET 的 CLR/DLR 这样的混合语言。重要的是 CPU 架构的图灵完备性是启用或禁用事物的原因,而不是像 C 或 C++ 这样的编程语言的静态特性。
一般来说,编程语言保持图灵完备,因此您可以用任何编程语言实现任何东西。当然,如果底层工具支持它,有些事情会更容易,因此在 C 或 C++ 中实现依赖于动态基础的应用程序并不容易。这就是为什么人们努力创建一个可编程的动态系统,比如 Python,这样你就可以实现一次动态系统,并且只需经历一次额外的努力,然后从动态语言层重用它。
【讨论】: