代码之家  ›  专栏  ›  技术社区  ›  Skilldrick

动态类型语言是如何在静态类型语言之上实现的?

  •  2
  • Skilldrick  · 技术社区  · 15 年前

    我最近才真正了解静态和动态类型之间的区别,从C++开始,然后移动到Python和JavaScript。我不理解的是动态类型语言(例如python)如何在静态类型语言(例如c)的基础上实现。我好像记得读过一次关于空指针的东西,但我并没有真正理解。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Valentin Golev    15 年前

    D-T语言中的每个变量都表示为结构类型、值,其中一个值是联合/另一个结构/指针等。

    在C++中,如果您创建了一个基本抽象类MyValuy并派生出MyInt、MyScript等,就可以得到类似的(“类似”)结果。您可以通过更多的工作,像动态类型语言那样使用这些VAR。(我不太了解C++,但是我认为在运行时,你需要使用For运算符函数来改变一种变量,或者可能不是,不管怎样)

    这个结果由相同的东西归档,运行时类型信息,它在对象中记录实际类型的信息。

    不过,我不推荐它:)

        2
  •  3
  •   Wim    15 年前

    基本上,动态类型语言的每个“变量”都由静态类型语言中的一个结构表示,数据类型是其中一个字段。对这些动态数据类型(加、减、比较)的操作通常由 virtual method table ,即对于每个数据类型,指向以特定类型的方式实现所需功能的函数的多个指针。

        3
  •  1
  •   Michael Dillon    15 年前

    不是这样。动态类型语言是在CPU体系结构的基础上实现的。只要CPU体系结构是图灵完成的,就可以在其上实现静态语言,或者动态语言,或者像.NET的clr/dlr这样的混合语言。重要的是CPU架构的图灵完整性是使或禁用事物的原因,而不是C语言或C++编程语言的静态特性。

    一般来说,编程语言保持图灵完整性,因此您可以用任何编程语言实现任何东西。当然,如果底层工具支持它,有些事情会更容易,因此在C或C++中实现依赖于动态基础托的应用程序是不容易的。这就是为什么人们把精力放在开发一个可编程的动态系统上,比如说python,这样你就可以实现一次动态系统,并且只需要花费一次额外的精力,然后从动态语言层重用它。