在 C 中实现动态类型
Posted
技术标签:
【中文标题】在 C 中实现动态类型【英文标题】:Implementing dynamic typing in C [duplicate] 【发布时间】:2012-04-16 23:13:54 【问题描述】:可能重复:Representing dynamic typing in C
在我的计算历史副讲座中,一位教授深入探讨了明显类型化或类型推断语言,并普遍赞扬了潜在类型语言的伟大之处(更快的开发时间、动态系统等......)。
p>同一天,在自动机课上,另一位教授说:
动态类型通过添加更多方法来做同样的事情,使事情变得更加复杂。
我一生中大部分时间都在使用静态类型语言:C/C++/Java - 我唯一接触过其他语言的是 Shell Coding 和 Ren'Py。
我的问题是,我可以用 C 编写一个简单的程序来实现两者的一些好处吗?
例如,我可以创建联合来接受所有用户驱动的数据,如下所示:
typedef union
int int_type;
char char_type;
//and so on
dynamic;
// Var Creation :
dynamic data;
// For unknown return type
void* function(dynamic data);
我意识到联合可能会损害类型安全,但这就是我在这里尝试做的。我还能采取什么其他方法?我只是在尝试演示。
我尝试从this question 获得答案。但老实说,我无法密切关注这些论点。
如果这个问题看起来很愚蠢,我深表歉意。
PS
使用下面的建议,我写了这个:http://codepad.org/A9JAX8lD,它基本上没有什么动态,但至少是一个开始。 我想我明白我的两位教授都想说什么了。
【问题讨论】:
【参考方案1】:我的建议是不尝试使用静态类型语言进行动态类型。它很可能具有低于标准的性能和非常强大的语法负担。相反,如果您只体验过静态类型语言,我强烈建议您尝试Python。它是高度动态的,会教你新的思维方式。
最后但同样重要的是,还有Cython,它是一种使用 C 作为中间语言的 Python 方言。它可以混合静态类型和动态类型,真是令人耳目一新。
【讨论】:
我在Ren'Py 的项目中工作时的 Python 经验很少,尽管这可能不算数。我一定会检查 Cython 及其来源。 @nightcracker,啊,是的,我很抱歉 :)(我同意 cython,这很酷!)【参考方案2】:如果您想展示 C 如何“不安全”,请尝试使用 void* 来传递参数。缺点是它不是真正动态的,因为如果不先强制转换就无法调用对象上的任何方法。
【讨论】:
我可以用这个吗,例如? codepad.org/m9hd38OV 我同意,它效率低下并且什么都不做,但如果需要,我可能会解析出一些有用的东西。 我认为这是一个有趣的实验 - 让我知道结果 感谢您的想法。 This 是我设法拼凑起来的——我的函数指针功能很浅。我要放弃了——不管怎样,人们在 GType 和 Smalltalk 中做得更好。 只要参数是某种类型的指针,就不需要将参数强制转换为 (void*)。它是自动完成的。【参考方案3】:我不反对类型,但我不知道任何类型系统不是完全痛苦的 [...] ——艾伦·凯
很有可能在 C 之上实现一个功能齐全的动态类型系统:以 GLib 对象系统所基于的 GType 为例。
但是,由于需要大量样板代码,这些系统通常使用起来很痛苦,而这可以通过使用自定义代码生成器和预处理器来解决,这就是 Objective-C 的起步方式。
【讨论】:
非常感谢您将我指向 Gtype:我正在查看他们的 GNOME PAGE,这真的很有趣。我也在看 SmallTalk wiki - 看起来很好奇。以上是关于在 C 中实现动态类型的主要内容,如果未能解决你的问题,请参考以下文章
使用C语言为python编写动态模块--在C中实现python中的类