在C语言中实现动态类型

在C语言中实现动态类型,c,types,type-conversion,C,Types,Type Conversion,可能重复: 在我的计算历史讲座上,一位教授深入讨论了明显类型或类型推断语言,并普遍赞扬了潜在类型语言的伟大之处(更快的开发时间、动态系统等等) 同一天,在Automata课程上,另一位教授说: 动态类型通过添加更多的方法来完成相同的事情,从而使事情变得更加复杂 我一生中的大部分时间都在使用静态类型语言:C/C++/Java——我唯一接触过的另一种语言是Shell编码和Ren'Py 我的问题是,我能用C写一个简单的程序来实现两者的一些好处吗 例如,我可以创建联合以接受所有用户驱动的数据,如下所示

可能重复:

在我的计算历史讲座上,一位教授深入讨论了明显类型或类型推断语言,并普遍赞扬了潜在类型语言的伟大之处(更快的开发时间、动态系统等等)

同一天,在Automata课程上,另一位教授说:

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

我一生中的大部分时间都在使用静态类型语言:C/C++/Java——我唯一接触过的另一种语言是Shell编码和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);
我意识到一个联盟可能会危及类型安全,但这就是我在这里要做的。我还可以采取什么其他方法?我只是想做个示范

我试图从他那里得到答案。但老实说,我无法密切关注这些论点

如果这个问题看起来很愚蠢,我道歉

PS

使用下面的建议,我写了这样一篇文章:,它基本上没有什么动态性,但至少是一个开始。

我想我明白我的两位教授想说什么了。

我的建议是不要尝试用静态类型语言进行动态类型输入。它很可能会有低于标准的表现和非常强大的句法负担。相反,如果您只经历过静态类型语言,我强烈建议您尝试一下。它是高度动态的,会教你新的思维方式

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

我不反对类型,但我不知道有哪种类型系统不是一个完全令人痛苦的[…]
--艾伦·凯

在C:Take-GType之上实现一个功能齐全的动态类型系统是完全可能的,GLib对象系统就是基于这个系统的


然而,这样的系统使用起来往往很痛苦,因为它们需要大量的样板代码,这可以通过使用自定义代码生成器和预处理器来解决,而Objective-C就是这样开始的。

如果您想展示C如何“不安全”的,请尝试使用void*来传递参数。缺点是它不是真正的动态的,因为如果不先强制转换对象,就无法调用对象上的任何方法。

在中处理项目时,我几乎没有python经验,尽管这可能不算。我一定会查看Cython和它的来源。@nightcracker,啊,是的,我的道歉:)(我同意Cython,它很酷!)我可以用这个吗,例如?我同意,它效率很低,而且什么也做不了,但是如果需要的话,我可能会解析出一些有用的东西。我认为这是一个有趣的实验-让我知道结果谢谢你的想法。这是我努力拼凑出来的——我的函数指针功能很肤浅。我放弃了——不管怎样,人们在GType和Smalltalk中做得更好。只要它是某种类型的指针,就不需要向(void*)抛出参数。这是自动完成的。非常感谢您给我指出Gtype:我正在浏览他们的网站,它真的很有趣。我也在看SmallTalk维基——看起来很好奇。