【发布时间】:2011-05-05 20:29:21
【问题描述】:
据我所知,在 C 语言中,我们可以使用函数指针,它在运行时调用 (1)。
根据维基百科的定义:
动态编程语言是一个术语 广泛用于计算机科学 描述一类高层 执行的编程语言 运行时许多常见的行为 其他语言可能会在 编译,如果有的话......
所以我的问题是,为什么 C 不是提供 (1) 中的功能的动态语言?
【问题讨论】:
标签: c function pointers dynamic
据我所知,在 C 语言中,我们可以使用函数指针,它在运行时调用 (1)。
根据维基百科的定义:
动态编程语言是一个术语 广泛用于计算机科学 描述一类高层 执行的编程语言 运行时许多常见的行为 其他语言可能会在 编译,如果有的话......
所以我的问题是,为什么 C 不是提供 (1) 中的功能的动态语言?
【问题讨论】:
标签: c function pointers dynamic
C 不是高级语言,它是非常低级的。
它缺少类和其他高级功能,而是提供直接位翻转和直接操作内存的能力。
通常,动态语言在某些 VM 上运行,例如 JVM 或 CLR,被解释为 Python,或使用可执行堆栈(即 Haskell)来提供功能。相比之下,C 直接编译成机器码。
有一些方法可以让 C 进行自我修改,但这是一项非常困难的技术,并不真正符合“动态语言”的条件。
【讨论】:
多态行为不是动态语言造成的。一般来说,提到“动态语言”的人指的是它的类型系统。 PHP 是一种动态语言,因为任何变量都可以包含任何类型的数据,并且数据类型之间的转换是隐式处理的。在运行时确定转换的内容和时间。
另外,我认为 C 未能满足您引用的定义的“高级编程语言类”部分。
【讨论】:
因为你的函数指针中的函数仍然在编译时编译。
您不能在运行时“即时”添加新函数或修改函数。
【讨论】:
您只能将指针分配给编译时存在的函数。您不能在 C 程序的中间编译一个新函数并为该函数分配一个指针。
【讨论】:
由于其类型系统,语言通常被认为是动态的。 C 是静态类型的。这意味着每个变量在创建时都有一个分配给它的类型,并且该类型不能更改。您不能将浮点数据放入 int 指针*。在像 Python 这样的动态语言中,数据有类型,但变量没有。我可以将字符串分配给与分配整数相同的变量。
您所指的定义似乎也在谈论动态编程,即在运行时添加代码。在 C 中,如果不考虑汇编,就不可能在编译后添加新代码。您的程序在执行时无法决定它是否需要一个新函数。在像 Scheme 这样的语言中,它可以。
*铸造不计算在内,因为您正在显式转换类型。
【讨论】: