在C中实现动态类型

时间:2012-04-03 09:53:45

标签: c types type-conversion

  

可能重复:
  Representing dynamic typing in C

我的计算历史课程的一位教授深入研究了明显的类型或类型推断语言,并且普遍称赞了潜在类型语言的伟大性(更快的开发时间,动态系统等等)。

同一天,在Automata Class,另一位教授说:

  

动态类型通过添加更多方法来完成同样的事情,使事情变得更加复杂。

我一生中大部分时间都在使用静态类型语言:C / C ++ / Java - 我唯一接触过的是Shell Coding和Ren'Py。

我的问题是,我可以在C中编写一个简单的程序来实现两者的一些好处吗?

例如,我可以创建Unions来接受所有用户驱动的数据,如下所示:

    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,它基本上没有什么动态,但至少是一个开始。
我想我看到了我的两位教授都想说的话。

3 个答案:

答案 0 :(得分:5)

我的建议是尝试使用静态类型语言进行动态输入。它很可能具有低于标准的性能和非常强大的语法负担。相反,如果您只有经验丰富的静态类型语言,我强烈建议您尝试Python。它非常有活力,会让你学会新的思维方式。

最后但并非最不重要的是,还有Cython这是一种使用C作为中间语言的Python方言。它可以混合静态类型和动态类型,它真的很新鲜。

答案 1 :(得分:1)

  

我不反对类型,但我不知道任何类型系统不是完全痛苦[...]    - Alan Kay

在C语言之上实现功能齐全的动态类型系统是非常有可能的:采用GLib对象系统所基于的GType。

然而,由于需要大量的样板代码,这些系统通常很难使用,这可以通过使用自定义代码生成器和预处理器来解决,这就是Objective-C的启动方式。

答案 2 :(得分:1)

如果你想展示C如何“不安全”,请尝试使用void *来传递参数。缺点是它不是真正动态的,因为你不能先调用对象上的任何方法而不先抛出它。