是否可以在C语言中添加类型推断?

deo*_*ian 14 c compiler-construction functional-programming type-inference

假设我们创建了C的重新实现,唯一的区别是推断了类型.仍然需要给出存储类和修饰符(const,static,restrict等),让我们暂时将注意力限制在单个文件C程序上.可以吗?主要障碍是什么?

关于什么可能导致类型推断问题的一些想法

  • 具有相同字段名称的结构需要手动消除歧义
  • 对于具有相同字段名称的联盟也是如此
  • 演员可能需要一个"从"注释,类似于

    var i = (uint32_t -> uint64_t) *some_pointer;
    
    Run Code Online (Sandbox Code Playgroud)

这些问题需要一些用户注释,但不应该太繁琐,是否有一些将这个想法从水中吹出的杀手问题?

编辑:为了澄清,我不是在谈论添加泛型或参数多态,只是对现有C类型进行类型推断.

编辑2014:任何对此概念感兴趣的人都可能想要研究Rust

Cir*_*四事件 10

GCC 5.1支持:


gee*_*aur 6

C会自动提升某些类型,这会使事情复杂化.但是为了可行,你需要与C存在一些额外的差异:现在,标准仍然在某种程度上支持传统的K&R C程序,并且要求以特定方式处理未指定的类型.(例如,在没有原型的情况下,参见函数参数的规则.过去也可以指定没有类型的函数和变量,它们将被默认为(int).(如何变量?仅限存储类. static foo;))在添加新的隐含类型机制之前,必须删除所有这些遗留类型处理.