我最近才开始真正掌握静态和动态类型之间的区别,开始使用C ++,然后转向Python和JavaScript。我不明白的是如何在静态类型语言(例如C)之上实现动态类型语言(例如Python)。我似乎记得曾经读过一些关于void指针的东西,但我并没有真正理解它。
答案 0 :(得分:4)
d-t语言中的每个变量都表示为struct {type,value},其中一个值是union /另一个struct / pointer等。
在C ++中,如果您创建一个基本抽象类MyVariable并派生MyInt,MyString等,您可以获得类似(“类似”)的结果。您可以通过更多工作,使用动态类型语言中的这些变量。 (我不太了解C ++,但我认为你需要使用友元运算符函数来改变运行时的变量类型,或者不需要,等等)
这个结果是由同样的事情,运行时类型信息,它在对象中的实际类型的信息
。我不会推荐它,但是:)
答案 1 :(得分:3)
基本上,动态类型语言的每个“变量”都由静态类型语言中的结构表示,其中数据类型是字段之一。对这些动态数据类型(加,减,比较)的操作通常由virtual method table实现,{{3}}为每个数据类型提供一些指向函数的指针,这些函数以特定于类型的方式实现所需的功能。 / p>
答案 2 :(得分:1)
不是。动态类型语言是在CPU架构之上实现的。只要CPU架构是图灵完成的,您就可以在其上实现静态语言,或动态语言,或者像CLR / DLR of .NET那样的混合。重要的是,CPU架构的图灵完整性是启用或禁用事物的原因,而不是C或C ++等编程语言的静态特性。
通常,编程语言保持图灵完整性,因此您可以用任何编程语言实现任何东西。当然,如果底层工具支持它,有些事情会更容易,因此在C或C ++中实现依赖于动态基础的应用程序并不容易。这就是为什么人们努力创建一个可编程的动态系统,比如Python,这样你就可以实现一次动态系统,只需要花费一次额外的工作量,然后再从动态语言层重用它。